汇编语言王爽检测点答案Word文件下载.docx
- 文档编号:22281359
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:42
- 大小:25.64KB
汇编语言王爽检测点答案Word文件下载.docx
《汇编语言王爽检测点答案Word文件下载.docx》由会员分享,可在线阅读,更多相关《汇编语言王爽检测点答案Word文件下载.docx(42页珍藏版)》请在冰豆网上搜索。
movax,2
addax,ax
检测点2.2
(1)00010H1000fH
(2)0001H2000H
检测点2.3
共修改了4次ip第一次movax,bx第二次是subax,ax第三次是jmpax第四次是执行jmpax最后ip的值是0因为ax的值是零!
!
检测点3.1
(1)
2662H
E626H
D6E6H
FD48H
2C14H
0000H
00E6H
0026H
000CH
注意:
ax中存取的是字型数据,高地址存放高字节,低地址存放低字节!
(一定要小心)
①写出cpu的执行序列
Movax,6622
Jmp0ff0:
0100
Movax,2000H
Movds,ax
Movax,[0008]
Movax,[0002]
②
指令执行顺序
寄存器
CS
IP
DS
AX
BX
初值
2000H
0000
1000H
0
movax,6622h
0003
6622H
jmp0ff0:
1000h
movax,2000h
movds,ax
0005
movax,[0008]
0008
C389H
movax,[0002]
000B
EA66H
③数据和程序在计算机中都是以二进制的形式存放的,在区别程序和数据时,关键是看段地址,如果段地址是ds段,说明该内存中存放的是数据,如果段地址是cs段,说明该内存中存放的是程序指令
检测点3.2
Movss,ax
Movsp,0010H
Movax,1000H
Movsp,0000H
出栈时和入栈时的顺序,空栈时栈顶指向的是最高端地址!
栈满是栈顶指针指向的是最底端地址!
2。
实验任务
5BEA
5CCA
30F0
6023
00FE2200:
01005CCA
00FC2200:
00FE6023
01005CCA
010030F0
00FC22000:
00FC2E39
因为在DEBUG中T命令在执行修改寄存器ss的指令时,会产生中断,将现场保护起来,下一条指令也紧接着被执行!
实验三:
该实验自己做吧我做出来的东西只是我pc上的数据,可能在别的pc做出来的结果会不一样,在加之数据太多,我做了两次数据都没有完整的记下来,只好作罢!
实验四:
[bx]和loop的使用
assumecs:
code
codesegment
movax,0
movds,ax
movcx,64
movbx,200h
s:
movds:
[bx],ax
incbx
incax
loops
movax,4c00H
int21h
codeends
End
(2)如上题我一不小心写出来就是九条指令了!
呵呵!
(3)具体做法是将那段指令写道内存中,察看其在内存中的起始地址和终止地址,然后将该内存的内容复制到0:
200处就可以了!
检测点6.1
Movcs:
[dx],ax
cs
26或者1ah
popcs:
[dx]
发表于@2008年08月19日 01:
11:
00|评论
(2)|编辑|举报|收藏
旧一篇:
常用命令(转)|新一篇:
实验五:
编写、调试具有多个段的程序
Copyright©
maokaijiang
PoweredbyCSDNBlog
十一川藏疯狂之旅
本文来自CSDN博客,转载请标明出处:
王爽汇编语言答案(本答案是自己做的所有题目已在deubg中调试;
但难免有差错,发现的提醒我email:
maokaijiang1211@谢谢)
①1931(一直保持不变,由于pc不同答案有可能不一样)
②cs=1943ss=1941ds=1931(由于pc不同,所以答案也可能不同,这只是机子上的数据)
③第一空:
X—2
第二空:
X—1
(2)
1.一直不变
2.答案不一样,就不写了
3.X-2,X-1
4.(N/16+1)*16
(3)
2.答案不一样
3.X+3,X+4
(4)
答:
可能执行,如果不指明标号,cpu顺序执行指令,所有可能正确执行!
(5)
;
******************************************
将a段和b段指的数据依次相加,将结果保存到c段中
*******************************************
code
asegment
db1,2,3,4,5,6,7,8
aends
bsegment
bends
dsegment
db8dup(0)
dends
*********************************
代码段
start:
movax,d
moves,ax
movax,a
movcx,8
movbx,0
again1:
movdx,ds:
[bx]
moves:
[ax],dx
loopagain1
movax,b
movdx,0
again2:
adddx,ds:
loopagain2
movax,4c00h
endstart
(6)
*****************************************************
编写程序,用push指令将a段中的word数据,逆序存储到b段中
******************************************************
asegment
dw1,2,3,4,5,6,7,8
bsegment
dw0,0,0,0,0,0,0,0
movss,ax
movsp,10h
s:
push[bx]
addbx,2
loops
ht
(1)
本题略!
编程,将datasg段中的每个单词的前四个字母改写为大写字母
codesg,ss:
stacksg,ds:
datasg
stacksgsegment
stacksgends
datasgsegment
db'
1.displsy'
2.brows'
3.replace'
4.modify'
codesgsegment
movax,stacksg
movsp,16
movax,datasg
movcx,4
s0:
pushcx
movsi,0
s1:
moval,[bx+si+4]
addal,11011111B
mov[bx+si+4],al
incsi
loops1
adddx,16
popcx
loops0
codesgends
endstart
codesg,ds:
data,es:
table
datasegment
1975'
'
1976'
1977'
1978'
1979'
1980'
1981'
1982'
1983'
1984'
1985'
1986'
1987'
1988'
1989'
1990'
1991'
1992'
1993'
1994'
1995'
;
以上是表示21年的21个字符串
dd16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
以上是表示21年公司总收的21个dword型数据
dw3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw11542,14430,45257,17800
以上是表示21年公司雇员人数的21个word型数据
dataends
tablesegment
db21dup('
yearsummne?
?
'
)
tableends
movax,data
movax,table
movcx,21
movdi,0
**************************************
把年份送到table中
moval,[bx]
[di],al
moval,[bx+1]
[di+1],al
moval,[bx+2]
[di+2],al
moval,[bx+3]
[di+3],al
********************************************
把收入送到table中
movax,54h[bx]
movdx,56h[bx]
5h[di],ax
7h[di],dx
把人数送到table中
movax,0A8h[si]
0Ah[di],ax
计算人均收入并把其送到table中
*****************************************
divwordptr0A8h[si]
0Ch[di],ax
addsi,2
adddi,16
adddx,4
loops0;
循环21次
第九章收藏
检测点9.1
(1)程序如下:
assumecs:
datasegment
db0,0,0,0,0,0,0,0
movax,data
jmpwordptr[bx+1]
endsstart
理由是:
要是jmp跳转后执行第一条指令,本条指令是wordptr是段内转移必须满足ip=0所以ds:
[bx+1]的值必须为零,也就是data段的第二个数据必须为零
(2)第一空:
bx
(3)本题可以先用debug将内存2000:
1000中的内容写为BE000600.....然后再调试可得到
cs=0006hip=00BEh
检测点9.2
实现在内存2000H段中查找第一个值为零的字节,
找到后,将它的偏移地址存储到dx中
codesegment
movax,2000H
movcl,[bx]
movch,0
jcxzok
jmpshorts
ok:
movdx,bx
codeends
注:
利用jcxz判断cx是否等于零来发生跳转,注意判断的是一个字节!
检测点9.3
************************************************************
利用loop指令,实现在内存2000H段中查找第一个值为零的byte,找到后
将它的偏移地址存储到dx中
*************************************************************
jmpok
decbx
实验八:
codesg
nop
movdi,offsets
movsi,offsets2
movax,cs:
[si]
movcs:
[di],ax
s2:
jmpshorts1
nop
注:
程序可以正常运行,本程序主要考察了转移指令的使用!
实验九:
****************************************************************************
编程:
在屏幕中间分别显示绿色,绿底红色,白底蓝色的字符串'
welcometomasm!
'
.
实验原理见书中186页
code,ds:
display,ss:
stack
datasegment
db02H,24H,71H
stacksegment
db16dup(0)
stackends
displaysegment
db1024dup(0)
displayends
movax,data
movax,0b872H;
定义12行中间的起始位置
movcx,3
*****************************
做三次外循环,每次显示一种颜色
******************************
pushax
movcx,16
*********************************************
做上六次内循环,将数据段定义的字符串写入内存中
[si],al
moval,[di+10h]
[si+1],al
subsi,32;
将si回到初始位置
addsi,160;
换行
popax
incdi;
改变颜色
第十章收藏
检测点10.1
1000
0000
检测点10.2
ax=6
注意:
执行calls是ip的值为6接着进栈,然后执行popax相当于把ip的值放到ax中!
检测点10.3
ax=1100H
执行callfarptrs后cs=1000ip=3(10H)接着进栈然后执行popax此时ax=3
==〉addax,ax此时ax=6(100H)==〉popbx此时bx=1000==〉addax,bx此时ax=1100H
检测点10.4
ax=000B具体我就不一一分析了,呵呵!
检测点10.5
ax=3
(1)ax=1bx=0
实验十:
编写子程序
(1)显示字符串
*******************************************************************
显示字符串的子程序(dh)=行号(取值范围0-24),(dl)=列号(取值范围0-79)
(cl)=颜色,ds:
si指向字符串的首地址
********************************************************************
display,ss:
0
stackends
displaysegment
displayends
movdh,8
movdl,3
movcl,2
callshow_str
显示字符串的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 检测 答案