汇编课后题答案Word格式.docx
《汇编课后题答案Word格式.docx》由会员分享,可在线阅读,更多相关《汇编课后题答案Word格式.docx(36页珍藏版)》请在冰豆网上搜索。
1EH000B1H
000B2H
3CH000B3H
2AH000B4H
2.3
30022H和30024H字节单元的内容分别为
(30022H)=0ABH
(30024H)=0EFH
30021H和30022H字单元的内容分别为
(30021H)=0AB34H
(30022H)=0CDABH
2.4
逻辑地址为3017:
000A的存储单元的物理地址为3017AH。
逻辑地址为3015:
002A的存储单元的物理地址为3017AH。
逻辑地址为3010:
007A的存储单元的物理地址为3017AH。
2.5
0AAA40H
2.7
AX,BX,CX,DX,SI,DI
CX
CS,DS,SS,ES
FLAGS
CS,IP
(7)
SS,SP,BP
2.8
指示存储器地址的寄存器如下所示
段偏移
CSIP
SSSP,BP
DSBX,DI,SI
ESDI
2.9
1.(M)2.(C)3.(D)4.(B)5.(A)6.(L)7.(K)8.(J)
9.(F)10.(H)11.(G)12.(E)13.(I)14.(O)15.(N)
第三章
1
(1)立即寻址没有
(2)直接寻址7237H
(3)使用BX的寄存器寻址没有
(4)使用BX的间接寻址637DH
(5)使用BX的寄存器相对寻址0D5F0H
(6)基址变址寻址8E18H
(7)相对基址变址004FH
2。
根据下列要求,写出相应的汇编指令。
(1)ADDDX,BX
(2)ADDAL,[BX][SI]
(3)ADD[BX][0B2H],CX
(4)MOVAX,2A59HADD[0524H],AX
(5)ADDAL,0B5H
3。
(1)寄存器间接寻址
MOVBX,OFFSET[BLOCK][0AH]
MOVDX,[BX]
(2)寄存器相对寻址
MOVSI,OAH
MOVDX,[BLOCK][SI]
(3)基址变址寻址
MOVBX,BLOCK
MOVSI,OAH
MOVDX,[BX][SI]
4。
现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各条指令执行完后,AX寄存器的内容。
(1)MOVAX,1200H1200H
(2)MOVAX,BX0100H
(3)MOVAX,[1200]4C2AH注意,是字单元!
!
(4)MOVAX,[BX]3412H同上
(5)MOV1100[BX]4C2AH
(6)MOVAX,[BX][SI]7856H
(7)MOVAX,1100[BX][SI]65B7H
5。
(1)7CD9H
(2)1200H(3)6319H
6。
MOVBX,2000H
LESDI,[BX]
MOVAX,ES:
DI
7。
转向地址OBJ的值分别为:
(1)064DH
(2)0691H(3)05E0H注意有符号数的符号位~~
8。
(1)MOVAX,0ABH立即数寻址无物理地址
(2)MOVAX,BX寄存器寻址同上
(3)MOVAX,[100]直接寻址20100H
(4)MOVAX,VAL直接寻址20050H
(5)MOVAX,[BX]寄存器间接寻址20100H
(6)MOVAX,ES:
[BX]直接寻址21100H
(7)MOVAX,[BP]寄存器间接寻址20010H
(8)MOVAX,[SI]同上200A0H
(9)MOVAX,[BX+10]寄存器相对寻址20110H
(10)MOVAX,VAL[BX]同上20150H
(11)MOVAX,[BX][SI]基址变址寻址201A0H
(12)MOVAX,VAL[BX][SI]相对基相变址寻址201F0H
9。
(1)的指令:
MOVAX,[BX][0CH]MOVZREO,AX
(2)的指令:
MOVAX,ARRAY[BX]MOVZREO,AX
10。
MOVAX,TABLE是把符号地址TABLE里的内容送到AX里,指令执行完后,(AX)=1234H
LEAAX,TABLE是把符号地址TABLE的有效地址(这里是偏移量)送到指定寄存器AX里,指
令执行完后,(AX)=0032H
11。
执行完指令后,(AX)=1E00H
12。
LEAAX,CSTRING
MOVDL,AX
MOVDH,[AX+6]
13。
这个,,图,很麻烦了,所以就不画了~~大家可以看一下课本上P51--P53,很清楚,看完了这道韪也会了~~~
14。
LESBX,[2000]
MOVAX,ES:
[BX]
注意:
一开始我写的是:
[8000H],后来看到题目里要求写两条指令,所以一条就不行了,就要画蛇添足~~~
15。
运算结果SF,ZF,CF,OF各位的值(从左至右依次往下~)
(1)74D4H0000
(2)A5C1H1001
(3)4240H0010
(4)0000H0110
16。
接上表~
(1)5D140000
(2)A8701001
(3)D8701000
(4)34E40010
17。
(1).MOVAX,Z;
把Z送到AX
SUBAX,X;
Z-X
ADDAX,W;
W+(Z-X)
MOVZ,AX;
结果保存在Z中
(2).MOVAX,R;
R送到AX中
ADDAX,9;
R+9
MOVBX,X;
X送到BX中
ADDBX,6;
X+6
ADDAX,BX;
(R+9)+(X+6),结果保存在AX中
MOVBX,W;
W送到BX中
SUBBX,AX;
W-(R+9)-(X+6),连续减去两个数,相当于减去这两个数的和~~
MOVZ,BX;
最终结果送到Z中
(3)
MOVAX,W;
把W送到AX
IMULX;
W*X注意:
低十六位保存在AX里,高十六位保存在DX里
MOVBX,Y;
把Y送到BX里
ADDBX,6;
Y+6
IDIVBX;
(W*X)/(Y+6)注意:
商保存在AX里,余数保存在DX里
MOVZ,AX;
把商送到Z中,
MOVR,DX;
把余数送到R中
(4)
MOVAX,W;
把W送到AX中
SUBAX,X;
W-X
CWD;
把AX中的十六位带符号数扩展成为32位,低十六位保存在AX中,高十六位保在DX中
MOVBX,5;
把5送到BX中
(W-X)/5被除数为32位,除数为16位商为16位
IMULY;
上一步结果再乖以Y,积为32位
MOVBX,2;
把2送到BX中
IMULBX;
上一步乘法所得的积再乘以2,各为64位
MOVZ,EAX;
把结果中低32位放入Z双字单元中
MOV[Z+4],EDX;
把结果中高32位放入Z+4双字单元中
18。
指令本条指令执行完后AX的内容执行完后CF,SF,ZF的值
MOVAX,1234H1234H000
MOVCL,41234H000
ROLAX,CL2341H100
DECAX2340H100
MOVCX,42340H100
MULCX8918H000
INT20H
程序结束后,(AX)=8918H(DX)=0000H
19。
指令执行完后AX的内容执行完后CF,SF,ZF和OF的值
MOVAX,000010
DECAXFFFFH0100
ADDAX,7FFFH7FFEH0000
ADDAX,28000H0101
NOTAX7FFFH0101
SUBAX,0FFFFH8000H1101
ADDAX,8000H0000H1011
SUBAX,1FFFFH1101
ANDAX,58D1H58D1H0000
SALAX,1B1A2H0101
SARAX,1D8D1H0100
NEGAX272FH1000
RORAX,19397H1001
20。
(1)MOVAX,DATAX
ADDDATAY,AX
(2)MOVAX,DATAX
MOVAX,[DATAX+2]
ADD[DATAY+2],AX
(3)本組指令的作用是:
BX<
------[DATAX]+[DATAY]+[1](CF的值)帶進位加法~
(4)MOVAX,DATAX
MULDATAY;
結果的高十六位保存在DX裏,低十六位保存在AX裏
(5)MOVAX,DATAX
MOVDX,[DATAX+2]
MULDWORDDATAY;
結果的高三十二位保存在EDX裏,低三十二位保存在EAX裏
;
這裏所用的DWORD為一屬性操作符,在第四章會學到~~
(6)MOVAX,DATAX
DIV17H;
結果商保存在AL中,余數在AH中
(7)MOVAX,DATAX
CDW
DIVDATAY
21。
NEGDX
NEGAX
SBBDX,0
22。
MOVAX,A;
把雙字長數的低字放到AX中
MOVDX,[A+2];
把雙字長數的高字放到DX中
TESTDX,8000H;
測試雙字長數的符號
JZRIGHT;
如果是非負數,則直接保存
NEGDX;
如果是負數,則求補
NEGAX
SBBDX,0
RIGHT:
MOVB,AX
MOV[B+2],DX
2006-12-0711:
4823。
每條指令單獨執行完後的結果依次為:
(1)9AH
(2)61H(3)0FBH(4)1CH(5)0(6)0E3H
24。
執行指令序列後,BX的內容為:
0DAH
25。
(1)把53D乘以2的程序:
MOVAX,35H;
53D=35H
SHLAX,1
(2)把53除以2的程序:
MOVAX,35H
SHRAX,1
其他的同理~~
26。
這段程序完成的功能是:
把DX:
AX中的雙字數據左移4位(相當於乘以16D)
27。
各條指令單獨執行後,DX的值依次為:
(1)5CH
(2)17H(3)05C8H(4)72H(5)2017H(6)0CDH(7)0172H(8)05CCH
(9)0DCH
28。
該程序段執行完後,BX寄存器的內容是:
C02DH
29。
(1)从左到右把CONMAE中的字符串伟送到PRLINE的程序实现:
LEASI,CONAME;
把CONAME中第一个字节的偏移地址送到SI中
LEADI,PRLINE;
把PRLINE中第一个字节的偏移地址送到DI中
MOVCX,20;
把重复次数放到CX里
CLD;
让SIDI从低地址指向高地址(即从左到右传送)
REPMOVSB;
传送
(2)从右到左把CONMAE中的字符串传送到PRLINE中的程序实现:
LEASI,CONAME
LEADI,PRLINE
MOVCX,20
STD;
和上面唯一不同的就是这次是从右到左,所以要从高地址批向低地址
REPMOVSB
(3)把CONAME中的第三和第四個字節裝入AX的程序實現:
LEASI,[CONAME+3]
LODSW
(4)把AX寄存器的內容存入從PRLINE+5開始的字節中的程序實現:
LEADI,[PRLINE+5]
STOSW
(5)檢查CONAME字符串中有無空格字符,如有把它偉送給BH寄存器的程序實現:
LEADI,CONAME;
把CONAME中第一個字符偏移地址放入DI中
把重複次數放到CX中
MOVAL,20H;
把空格符的ASCII值放入AL中
從低到高
REPNESCASB;
比較
MOVBH,[DI-1]R;
把檢查到的空格符送到BH中
30。
MOVCX,12H;
把重複次數放到CX中。
這裏用十六進制表示
MOVSI,0;
初始化SI
MOVAX,26H;
把&
字符的ASCII值放入AX
CHECK:
CMPAX,STRING[SI];
依次查找
INCSI
LOOPNECHECK;
找到了就退出
MOVAX,20H;
把空格符的ASCII值勤放入AX中
MOVSTRING[SI-1],AX;
用空格符代替&
31。
(1)用空格符清除PRINT_LINE域的程序实现:
MOVAL,20H
LEADI,PRINT_LINE
MOVCX,132
CLD
REPSTOSB
(2)在STUDENT_ADDR中查找第一个’_‘的程序实现:
MOVAX,2DH;
把“—”的ASCII值放入AX
MOVCX,9;
把重複次數放入CX中
;
依次檢查STUDENT-ADDR中的字符是否為"
_"
找到第一个停下来
CMPAX,STUDENT_ADDR[SI];
INCSI
LOOPNZCHECK
(3)在STUDENT_ADDR中查找最后一个”_“的程序实现:
和第二題不同的就是這次是從右到左查詢,所以SI的初始化為9
MOVAX,2DH
MOVSI,9
MOVCX,9
CHECK:
CMPAX,STUDENT_ADDR[SI]
DECSI
(4)程序實現:
MOVAL,2OH;
LEADI,STUDENT_NAME;
把STUDENT_NAME中第一个字符偏移地址放到DI中
MOVCX,30;
把重复次数放到CX中
让DI从低位移到高位
REPZSCASB;
如果有不是空格符的,就退出
JZSTORE;
如果全是空格符,就转到STORE中
用*代替空格
STORE:
MOVAL2AH
MOVCX,30
注意,这里是把前面从低到高移动的DI再从高到低移上去~~
(5)程序实现:
把STUDENT_NAME移到PRINT_LINE的前30个字节中
LEASI,STUDENT_NAME
LEADI,PRINT_LINE
把STUDENT_ADDR移到PRINT_LINE的后9个字节中
LEASI,[STUDENT_ADDR+9]
LEADI,[PRINT_LINE+132]
MOVCX,9
STD
32。
程序实现:
。
。
LEASI,OLDS
LEADI,NEWS
MOVCX,5
REPZCMPSB
JNZNEW_LESS
33。
(1)CMPDX,CX
JAEXCEED
(2)CMPBX,AX
JGEXCEED
(3)CMPCX,0
JZZERO
(4)CMPBX,AX
JOOVERFLOW
(5)CMPBX,AX
JLEEQ_SMA
(6)CMPDX,CX
JBEEQ_CX
34。
(1)跳转到:
L1
(2)跳转到L1
(3)跳转到L2
(4)跳转到L5
(5)跳转到L5
35。
(1)可以引起转移到L1的指令有:
NB,BE,NL,LE
(2)可以引起转移到L1的指令有:
同上
(3)可以引起转移到L1的指令有:
B,BE,L,LE
(4)可以引起转移到L1的指令有:
NB,NBE,NL,NLE
(5)可以引起转移到L1的指令有:
(6)可以引起转移到L1的指令有:
同(3)
(7)可以引起转移到L1的指令有:
同上
36。
37。
程序流程图就不画了,呵呵,程序如下~~
MOVAL,STAUS[SI];
把要测试的字节放到AL中
ANDAL,2AH;
把第一,三,五位为一其他位为0的数--2AH,与这个字节比较,结果放到AL中
JZROUTINE_4;
如果结果为0,则三位都为0
XORAL,2AH;
前面相与的结果再与2AH异或
JZROUTINE_1;
如果结果为0,则三位都为1
BSFBL,AL;
BSRBL,AL
CMPBL,CL
如果向前和向后测试后,第一个1的位置相同,说明只有一个1,则异或运算前有AL中有两个1
JEROUTINE_2
ROUTINE_1
注:
本题还有其他解法,请大家自己试试~~
38。
(1)当括号内是:
LOOP时,循环四次,程序结束后
(AX)=05(BX)=16(CX)=0(DX)=0
(2)当括号内是:
LOOPE时,不循环,程序结束后
(AX)=02(BX)=04(CX)=03(DX)=02
(3)当括号内是:
LOOPNE时:
循环三次,程序结束后
(AX)=04(BX)=11(CX)=01(DX)=0
39。
图,就不画了,呵呵~~自己看一下课本,P101~~
40.。
(1)00003100H
(2)5100H(3)7100H
41。
(1)目的地址:
2004H内容依次为:
56HF4H23H98H
(2)目的地址:
384CH内容依次为:
91H34HF2H01H
(3)目的地址:
寄存器,无物理地址~内容依次为:
92H6DHA2H4CH
42。
(1)PUSHAX
(SP)<
------(SP)-2
(SP+1)<
-----(AH)(SP)<
------(AL)
(2)POPESI
(ESI)<
-------((ESP)+3,(ESP)+2,(ESP)+1,(ESP))
(ESP)<
-------(ESP)+4
(3)PUSH[BX]
(SP)<
-----([BX+1])(SP)<
------([BX])
(4)PUSHAD
-------(EAX)
(ESP-4)<
-------(ECX)
(ESP-8)<
-------(EDX)
(ESP-12)<
-------(EBX)
(ESP-16)<
-------(ESP);
这里指的是指令执行前的ESP
(ESP-20)<
-------(EBP)
(ESP-24)<
-------(ESI)
(ESP-28)<
-------(EDI)
-------(ESP)-32
(5)POPDS
(DS)<
------((SP)+1,(SP))
(SP)<
------(SP)+2
(6)PUSH4
-------(SP)-2
(SP+1)<
-----0
------4
43。
(1)2CEFF93H
(2)24B76A0H
(3)9090804H(4)6F13ADH
44。
(1)0FFFFFFFCH
(2)0FFFFFFF8H
(3)00000007H(4)00000099H
45。
(EAX)=0(EBX)=25d
46。
(AX)=3d(DX)=7