IBM-PC汇编语言程序设计课后习题答案(第二版 - 沈美明)

发布时间 : 星期二 文章IBM-PC汇编语言程序设计课后习题答案(第二版 - 沈美明)更新完毕开始阅读

MOV DS, DI MOV ES, DI LEA SI, OLDS LEA DI, NEWS REPE CMPSB JNE NEW_LESS ┇

NEW_LESS: ┇

3.33 假定AX和BX中的内容为带符号数,CX和DX中的内容为无符号数,请用比较指令和条件转移指令实现以下判断:

(1) 若DX的内容超过CX的内容,则转去执行EXCEED。 (2) 若BX的内容大于AX的内容,则转去执行EXCEED。 (3) 若CX的内容等于0,则转去执行ZERO。

(4) BX与AX的内容相比较是否产生溢出?若溢出则转OVERFLOW。 (5) 若BX的内容小于等于AX的内容,则转EQ_SMA。 (6) 若DX的内容低于等于CX的内容,则转EQ_SMA。 答:(1) CMP DX, CX JA EXCEED

(2) CMP BX, AX JG EXCEED (3) JCXZ ZERO (4) CMP BX, AX JO OVERFLOW (5) CMP BX, AX JLE EQ_SMA (6) CMP DX, CX JBE EQ_SMA

3.34 试分析下列程序段: ADD AX, BX JNO L1 JNC L2

SUB AX, BX JNC L3 JNO L4

JMP SHORT L5

如果AX和BX的内容给定如下: AX BX

(1) 147BH 80DCH (2) B568H 42C8H (3) 42C8H 608DH (4) D023H 9FD0H (5) 94B7H B568H

问该程序分别在上面5种情况下执行后,程序转向哪里? 答:(1) 转向L1

(2) 转向L1 (3) 转向L2

(4) 转向L5 ;因为加法指令后AX中已经是6FF3H (5) 转向L5 ;因为加法指令后AX中已经是4A14H

3.35 指令CMP AX, BX后面跟着一条格式为J? L1的条件转移指令,其中?可以是B、NB、BE、NBE、L、NL、LE、NLE中的任意一个。如果AX和BX的内容给定如下: AX BX

(1) 1F52H 1F52H (2) 88C9H 88C9H (3) FF82H 007EH (4) 58BAH 020EH (5) FFC5H FF8BH (6) 09A0H 1E97H (7) 8AEAH FC29H (8) D367H 32A6H

问以上8条转移指令中的哪几条将引起转移到L1? 答:(1) JNB、JBE、JNL、JLE (2) JNB、JBE、JNL、JLE (3) JNB、JNBE、JL、JLE (4) JNB、JNBE、JNL、JNLE (5) JNB、JNBE、JL、JLE (6) JB、JBE、JL、JLE (7) JB、JBE、JNL、JNLE (8) JNB、JNBE、JL、JLE

3.36 假设X和X+2单元的内容为双精度数p,Y和Y+2单元的内容为双精度数q,(X和Y为低位字)试说明下列程序段做什么工作? MOV DX, X+2 MOV AX, X ADD AX, X ADC DX, X+2 CMP DX, Y+2 JL L2 JG L1

CMP AX, Y JBE L2

L1: MOV AX, 1 JMP SHORT EXIT L2: MOV AX, 2 EXIT:INT 20H

答:此程序段判断p*2>q,则使(AX)=1后退出;p*2≤q,则使(AX)=2后退出。 3.37 要求测试在STATUS中的一个字节,如果第1、3、5位均为1则转移到ROUTINE_1;如果此三位中有两位为1则转移到ROUTINE_2;如果此三位中只有一位为1则转移到ROUTINE_3;如果此三位全为0则转移到ROUTINE_4。试画出

流程图,并编制相应的程序段。 答:程序段如下: MOV AL, STATUS

AND AL, 00010101B ;只保留第1、3、5位 JZ ROUTINE_4 ;3位全为0转ROUTINE_4 JPE ROUTINE_2 ;两位为1转ROUTINE_2 CMP AL, 00010101B

JZ ROUTINE_1 ;3位全为1转ROUTINE_1 ROUTINE_3: ┇ ;仅一位为1执行ROUTINE_3 JMP EXIT

ROUTINE_1: ┇ JMP EXIT

ROUTINE_2: ┇ JMP EXIT

ROUTINE_4: ┇ EXIT: INT 20H

3.38 在下列程序的括号中分别填入如下指令: (1) LOOP L20 (2) LOOPE L20 (3) LOOPNE L20

试说明在三种情况下,当程序执行完后,AX、BX、 CX、DX四个寄存器的内容分别是什么? TITLE EXLOOP.COM CODESG SEGMENT

ASSUME CS:CODESG, DS: CODSEG, SS: CODSEG ORG 100H

BEGIN: MOV AX, 01 MOV BX, 02 MOV DX, 03 MOV CX, 04 L20: INC AX

ADD BX, AX SHR DX, 1 ( ) RET

CODESG ENDS END BEGIN

答:(1) (AX)=5H,(BX)=10H,(CX)=0H,(DX)=0H (2) (AX)=2H,(BX)=4H,(CX)=3H,(DX)=1H (3) (AX)=3H,(BX)=7H,(CX)=2H,(DX)=0H 3.39 考虑以下的调用序列:

(1) MAIN调用NEAR的SUBA过程(返回的偏移地址为0400); (2) SUBA调用NEAR的SUBB过程(返回的偏移地址为0A00);

(3) SUBB调用FAR的SUBC过程(返回的段地址为B200,返回的偏移地址为0100); (4) 从SUBC返回SUBB;

(5) SUBB调用NEAR的SUBD过程(返回的偏移地址为0C00); (6) 从SUBD返回SUBB; (7) 从SUBB返回SUBA; (8) 从SUBA返回MAIN;

(9) 从MAIN调用SUBC(返回的段地址为1000,返回的偏移地址为0600); 请画出每次调用及返回时的堆栈状态。

答:每次调用及返回时的堆栈状态图如下所示:

3.40 假设(EAX)=00001000H,(EBX)=00002000H,(DS)=0010H,试问下列指令访问内存的物理地址是什么? (1) MOV ECX,[EAX+EBX] (2) MOV [EAX+2*EBX],CL

(3) MOV DH,[EBX+4*EAX+1000H]

答:(1) PA=(DS)*10H+EA=00100H+00001000H+00002000H=00003100H (2) PA=(DS)*10H+EA=00100H+00001000H+2*00002000H=00005100H

(3) PA=(DS)*10H+EA=00100H+00002000H+4*00001000H+1000H=00007100H 3.41 假设(EAX)=9823F456H,(ECX)=1F23491H,(BX)=348CH,(SI)=2000H,(DI)=4044H。在DS段中从偏移地址4044H单元开始的4个字节单元中,依次存放的内容为92H,6DH,0A2H和4CH,试问下列各条指令执行完后的目的地址及其中的内容是什么? (1) MOV [SI],EAX (2) MOV [BX],ECX (3) MOV EBX,[DI]

答:(1) 目的地址为DS:2000H,内容依次为:56H,0F4H,23H和98H (2) 目的地址为DS:348CH,内容依次为:91H,34H,0F2H和01H (3) 目的操作数为EBX寄存器,(EBX)=4CA26D92H 3.42 说明下列指令的操作

(1) PUSH AX ;将(AX)压入堆栈

(2) POP ESI ;将堆栈中的双字弹出到ESI寄存器中 (3) PUSH [BX] ;将((BX))对应存储单元中的字压入堆栈 (4) PUSHAD ;32位通用寄存器依次进栈

(5) POP DS ;将堆栈中的字弹出到DS寄存器中 (6) PUSH 4 ;将立即数4以字的方式压入堆栈 答:见注释。

3.43 请给出下列各指令序列执行完后目的寄存器的内容。 (1) MOV EAX,299FF94H

ADD EAX,34FFFFH ;(EAX)= 2CEFF93H (2) MOV EBX,40000000

SUB EBX,1500000 ;(EBX)= 3EB00000H (3) MOV EAX,39393834H

AND EAX,0F0F0F0FH ;(EAX)= 09090804H (4) MOV EDX,9FE35DH

联系合同范文客服:xxxxx#qq.com(#替换为@)