微机原理及汇编语言课后习题解答(2)

2019-06-17 11:26

相对基址变址寻址;I/O端口指令IN和OUT使用的端口寻址方式有直接寻址和间接寻址。 2. 设(DS)=2000H,(ES)= 2100H,(SS)= 1500H,(SI)= 00A0H,(BX)= 0100H,(BP)= 0010H,

数据变量VAL的偏移地址为0050H,请指出下列指令的源操作数字段是什么寻址方式?它的物理地址是多少?

(1) MOV AX,21H (2) MOV AX,BX (3) MOV AX,[1000H] (4) MOV AX,VAL (5) MOV AX,[BX] (6) MOV AX,ES:[BX] (7) MOV AX,[BP] (8) MOV AX,[SI] (9) MOV AX,[BX+10] (10) MOV AX,VAL[BX]

(11) MOV AX,[BX][SI] (12) MOV AX,VAL[BX][SI] 解:(1)MOV AX,21H

立即寻址,源操作数直接放在指令中 (2)MOV AX,BX

寄存器寻址,源操作数放在寄存器BX中 (3)MOV AX,[1000H]

直接寻址,EA = 1000H,PA =(DS)×10H+EA = 2000H×10H+1000H = 21000H (4)MOV AX,VAL 直接寻址,EA = [VAL] = 0050H,PA =(DS)×10H+EA = 2000H×10H+0050H = 20050H (5)MOV AX,[BX]

寄存器间接寻址,EA =(BX)= 0100H,PA =(DS)×10H+EA = 2000H×10H+0100H = 20100H

(6)MOV AX,ES:[BX]

寄存器间接寻址,EA =(BX)= 0100H,PA =(ES)×10H+EA = 2100H×10H+0100H = 21100H

(7)MOV AX,[BP]

寄存器间接寻址,EA =(BP)= 0010H,PA =(SS)×10H+EA = 1500H×10H+0010H = 15010H

(8)MOV AX,[SI]

寄存器间接寻址,EA =(SI)= 00A0H,PA =(DS)×10H+EA = 2000H×10H+00A0H = 200A0H

(9)MOV AX,[BX+10]

寄存器相对寻址,EA =(BX)+10D = 0100H+000AH= 010AH,PA =(DS)×10H+EA = 2000H×10H+010AH = 2010AH (10)MOV AX,VAL[BX]

寄存器相对寻址,EA =(BX)+[VAL]= 0100H+0050H= 0150H,PA =(DS)×10H+EA = 2000H×10H+0150H = 20150H (11)MOV AX,[BX][SI]

第 6 页 共 27 页

基址变址寻址,EA = (BX)+(SI)= 0100H+00A0H = 01A0H,PA = (DS)×10H+EA = 2000H×10H+01A0H = 201A0H (12)MOV AX,VAL[BX][SI]

基址变址相对寻址,EA = (BX)+(SI)+[VAL]= 0100H+00A0H+0050H = 01F0H,PA =(DS)×10H+EA = 2000H×10H+01F0H = 201F0H

3. 给定寄存器及存储单元的内容为:(DS) = 2000H,(BX) = 0100H,(SI) = 0002H,(20100) =32H,(20101)=51H,(20102) =26H,(20103)= 83H,(21200)=1AH,(21201)=B6H,(21202)=D1H,(21203)=29H。试说明下列各条指令执行完后,AX寄存器中保存的内容是什么。

(1) MOV AX,1200H (2) MOV AX,BX (3) MOV AX,[1200H] (4) MOV AX,[BX] (5) MOV AX,1100H[BX] (6) MOV AX,[BX][SI] 解:(1)MOV AX,1200H 执行后,(AX)= 1200H (2)MOV AX,BX 执行后,(AX)= (BX)= 0100H (3)MOV AX,[1200H] 直接寻址,EA = [VAL] = 1200H,PA =(DS)×10H+EA = 2000H×10H+1200H = 21200H,执行后,(AX)= B61AH (4)MOV AX,[BX]

EA = (BX)= 0100H,PA =(DS)×10H+EA = 2000H×10H+0100H = 20100H,执行后,(AX)= 5132H

(5)MOV AX,1100H[BX]

EA =(BX)+1100H = 0100H+1100H = 1200H,PA =(DS)×10H+EA = 2000H×10H+1200H = 21200H,执行后,(AX)= B61AH (6)MOV AX,[BX][SI]

EA =(BX)+(SI)= 0100H+0002H = 0102H,PA =(DS)×10H+EA = 2000H×10H+0102H = 20102H,执行后,(AX)= 29D1H

4. 试说明指令MOV BX,10H[BX]与指令LEA BX,10H[BX]的区别。

答:前者是数据传送类指令,表示将数据段中以(BX+10H)为偏移地址的16位数据送寄存器BX.;后者是取偏移地址指令,执行的结果是(BX)= (BX)+10H,即操作数的偏移地址为(BX)+10H。

5. 假设(DS)=3000H,(CS)=1000H,(IP)=1500H,(BX)=1000H,位移量大DATA=50H

(31000H)=1250H,(31050H)=2400H,(31052H)=6000H。确定下列转移指令的转移地址。 (1)JMP 2500H (2) JMP BX

(3)JMP WORD PTR[BX] (4) JMP DWORD PTR[BX+DATA] 解:(1)JMP 2500H

第 7 页 共 27 页

(IP)=2500H (2) JMP BX

(IP)=(BX)=1000H (3)JMP WORD PTR[BX]

物理地址=(DS)*10H+(BX)=3000H*10H+1000H=31000H,所以(IP)=1250H

(4) JMP DWORD PTR[BX+DATA] 物理地址=(DS)*10H+(BX)+(DATA)=3000H*10H+1000H+50H=31050H,所以(IP)=2400H 6. 设堆栈指针SP的初值为2500H, (AX)=1234H,(BX)=5678H。执行指令PUSH AX后,

(SP)=?,再执行指令PUSH BX及POP AX之后,(SP)=? (AX)=? (BX)=? 解:堆栈指针SP总是指向栈顶,每执行一次PUSH指令SP-2,执行一次POP指令SP+2.所以,执行PUSH AX指令后,(SP)=24FEH;再执行PUSH BX及POP AX后,(SP)=24FEH,(AX)=(BX)=5678H

7. 分析下列指令的正误,对于错误的指令要说明原因并加以改正。 (1) MOV AH,BX (2) MOV [BX],[SI]

(3) MOV AX,[SI][DI] (4) MOV MYDAT[BX][SI],ES:AX (5) MOV BYTE PTR[BX],1000 (6) MOV BX,OFFSET MAYDAT[SI] (7) MOV CS,AX (8) MOV DS,BP 解:(1) MOV AH,BX

错误,寄存器类型不匹配,可改为MOV AX,BX (2) MOV [BX],[SI]

错误,两个操作数不能都为存储单元,可改为MOV BX,[SI]或MOV [BX],SI (3) MOV AX,[SI][DI]

错误,寻址方式中只能出现一个变址寄存器,可改为MOV AX,[BX][DI]。 (4) MOV MYDAT[BX][SI],ES:AX

错误,AX前不能有段跨越前缀,去掉ES:,改为MOV MYDAT[BX][SI],AX (5) MOV BYTE PTR[BX],1000 错误,1000超出字节空间存储范围 (6) MOV BX,OFFSET MAYDAT[SI] 正确

(7) MOV CS,AX

错误,MOV指令CS不能做目的操作数,可改为MOV DS,AX (8) MOV DS,BP 正确

注:本题错误改正部分有的答案并不唯一,可参考原题题意改成合法形式。 8. 设VAR1、VAR2为字变量,LAB为标号,分析下列指令的错误之处并加以改正。 (1) ADD VAR1,VAR2 (2) MOV AL,VAR2 (3) SUB AL,VAR1 (4) JMP LAB[SI]

第 8 页 共 27 页

(5) JNZ VAR1

解:(1) ADD VAR1,VAR2

错误,两个操作数不能都为存储单元,可改为 MOV BX,VAR2 ADD VAR1,BX

(2) MOV AL,VAR2

错误,数据类型不匹配,可改为MOV AX,VAR2 (3) SUB AL,VAR1

错误,数据类型不匹配,可改为SUB AX,VAR1 (4) JMP LAB[SI]

错误,寄存器相对寻址形式中不能用标号做位移量,可改为JMP VAR1[SI] (5) JNZ VAR1

错误,条件跳转指令只能进行段内短跳转,所以后面只能跟短标号。可改为JNZ LAB (6) JMP NEAR LAB

错误,缺少运算符PTR,可改为JMP NEAR PTR LAB

注:本题错误改正部分有的答案并不唯一,可参考原题题意改成合法形式。

9. 已知 (AL)=6CH, (BL)=0A9H,试问执行指令ADD AL,BL后,AF、CF、OF、PF、SF、和

ZF的值各为多少?

解:指令ADD AL,BL的功能为AL+BL→AL,其运算过程如下:

6CHA9H 115H

由以上运算可知,

低4位向高4位有进位,所以AF=1; 最高位产生了进位,所以CF=1;

该运算是一个正数加一个负数,所以不会产生溢出,所以OF=0;只有正数+正数=负数,或者负数+负数=正数时,才可能产生溢出现象;

该运算结果的低8位为0001 0101,含有奇数个1,所以PF=0; 该运算结果的最高位为符号位,为0,所以SF=0; 当前的运算结果不为零,所以ZF=0。 10.试判断下列程序执行后,(BX)=的内容。

MOV CL,5 MOV BX,01C9H ROL BX,1 RCR BX,CL

解:该程序段是首先将BX内容不带进位循环左移1位,再循环右移5位。即相当于将原BX内容不带进位循环右移4位

第 9 页 共 27 页

01C9H=0000 0001 1100 1001B

程序执行后,为1001 0000 0001 1100B 故结果为901CH

11.写出能够完成下列操作的8086CPU指令。 (1) 把4629H传送给AX寄存器; (2) 从AX寄存器中减去3218H; (3) 把BUF的偏移地址送入BX中。

12.根据以下要求写出相应的汇编语言指令。

(1) 把BX和DX寄存器的内容相加,结果存入DX寄存器中;

(2) 用BX和SI的基址变址寻址方式,把存储器中的一个字节与AL内容相加,并保存在AL寄存器中;

(3) 用寄存器BX和位移量21B5H的变址寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器单元中;

(4) 用位移量2158H的直接寻址方式把存储器中的一个字与数3160H相加,并把结果送回该存储器中;

(5) 把数25H与(AL)相加,结果送回寄存器AL中。 13.按下列要求写出相应的指令或程序段。 (1)使BL寄存器中的高、低四位互换; (2)屏蔽AX寄存器中的b10和b5位;

(3)分别测试AX寄存器中b13和b2位是否为1。

14.执行以下两条指令后,标志寄存器FLAGS的六个状态为各为何值?

MOV AX,95C8H ADD AX,8379H

解:指令的功能为95C8H+8739H→AL,其运算过程如下:

95C8H

8379H

11941H 由以上运算可知,

低4位向高4位有进位,所以AF=1; 最高位产生了进位,所以CF=1;

该运算是两个负数相加结果为正数,产生溢出,所以OF=1; 该运算结果的低8位为0100 0001,含有偶数个1,所以PF=1; 该运算结果的最高位为符号位,为0,所以SF=0; 当前的运算结果不为零,所以ZF=0。

第 10 页 共 27 页


微机原理及汇编语言课后习题解答(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:临床化学检验室间质量评价结果分析-wen

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: