第三章    参考答案
1.按照题目中提出的要求,写出能达到要求的一条(或几条)汇编形式的指令:
⑴ 将一个立即数送入寄存器BX;
⑵ 将一个立即数送入段寄存器DS;
⑶ 将变址寄存器DI的内容送入一个存储单元中;
⑷ 从存储单元中取一个数送到段寄存器ES中;
⑸ 将立即数0ABH与AL相加,结果送回AL中;
⑹ 把BX与CX寄存器内容相加,结果送入BX;
⑺ 用寄存器间接寻址方式,实现一个立即数与存储单元内容相加,结果放回存储器。
解:(1)MOV BX, 1234H
(2) MOV AX, 1234H
MOV DS, AX
(3) MOV [BX], DI
(4) MOV ES,[BX]
(5) ADD AL,0ABH
(6) ADD BX,CX
(7) MOV AX,[BX]
ADD AX,1234H
MOV [BX],AX
2.执行下面程序,完成指令后的填空:
MOV    AX,2000H                ;AH=    20H   
    MOV    DS,AX                      ;AL=      00H    汇编指令有多少个DS=  2000H     
      MOV    SS,AX                    ;SS=        2000H  AX=    2000H     
    MOV    BX,2030H                ;BH=    20H      BL=   30H       
    MOV    SI,BX                    ;SI=   2030H 
    MOV    DI,3040H                ;DI=    3040H 
    MOV    SI,DI                    ;SI=    3040H 
    MOV    SP,50FFH                ;SP=    50FFH 
    MOV    DX,SP                    ;DH=    50H        DL=    FFH   
    MOV    CL,25                    ;CL=    19H   
    MOV    BL,CL                    ;CL=    19H    BL=    19H   
    MOV    AH,0F0H                    ;AH=    F0H   
    MOV    CH,AH                    ;CH=    F0H   
    MOV    BYTE PTR[DI],64            ;(DI)=  40H   
    MOV    WORD PTR[SI],256        ;(SI)=    00H    (SI+1)=    01H 
    MOV    DL,[SI+1]                ;DL=    01H   
    MOV    DH,1+[SI]                ;DH=    00H   
    MOV    AL,1[SI]                    ;AL=    01H   
    MOV    WORD PTR[BX][SI],34        ;(BX+SI)=    22H    (BX+SI+1)=  00H   
    MOV    [BX+SI+4],BL            ;(BX+SI+4)=  19H   
    MOV    BP,2[BX+DI]                ;BP=      00H   
    MOV    [BP],AL                    ;(BP)=      01H 
    MOV    AX,[BP][DI]                ;AX=      0100H 
    MOV    BL,AL                    ;BL=      00H   
    MOV    ES,BX                    ;ES=      2000H   
    PUSH    BX                        ;SP=        50FDH        (SP,SP+1)=  2000H
    PUSH    DI                        ;SP=        50FBH        (SP,SP+1)=  F019H
    POP        CX                        ;SP=        50FDH        CX=  3040H     
    POP        DX                        ;SP=        50FFH        DX=   2000H     
    XCHG    AX,BP                    ;AX=    0000H    BP=    0100H     
    XCHG    DH,BL                    ;DH=    00H        BL=     20H       
    LAHF                            ;FLAG=    0002H        AH=  02H 
    SAHF                            ;FLAG=    0002H        AH=  02H       
    PUSHF                            ;SP=        50FDH        (SP,SP+1)=  0002H 
    POPF                            ;SP=        50FFH    FLAG=  0002H   
3.设DS=2000H,ES=2100H,SS=1500H,SI=00A0H。BX=0100H,BP=0010H,数据段中变量名VAL的偏移地址值是0050H,指出下列源操作数字段的寻址方式是什么?其物理地址值是多少?
⑴MOV AX,0ABH 
⑵MOV AX,BX
⑶MOV AX,[100H]
⑷MOV AX,VAL
⑸MOV AX,[BX]
⑹MOV AX,ES:[BX]
⑺MOV AX,[BP]
⑻MOV AX,[SI]
⑼MOV  AX,[BX+10]
⑽MOV AX,VAL[BX]
⑾MOV AX,[BX][SI]
⑿MOV AX,VAL[BX][SI]
解:(1)立即寻址方式
  (2)寄存器寻址方式
  (3)直接寻址方式;其物理地址为:20100H
  (4)直接寻址方式;其物理地址为:20050H
  (5)寄存器间接寻址方式;其物理地址为:20100H
  (6)寄存器间接寻址方式;其物理地址为:21100H
  (7)寄存器间接寻址方式;其物理地址为:15010H
  (8)寄存器间接寻址方式;其物理地址为:200A0H
  (9)寄存器相对寻址方式;其物理地址为:20110H
  (10)寄存器相对寻址方式;其物理地址为:20150H
  (11)基址变址寻址方式;其物理地址为:201A0H
  (12)相对基址变址寻址方式;其物理地址为:201F0H
4.如果TABEL为数据段中0032H单元的符号名,其中存放的内容为1234H,试问以下两条指令有什么区别?指令执行后,AX寄存器的内容各是什么?。
MOV AX,TABEL
LEA AX,TABEL
解:指令MOV AX,TABEL 是取出地址为TABEL的内存单元内容,执行结束后AX=1234H
    指令LEA AX,TABEL 是取出符号地址的数值,执行结束后AX=0032H.
5.已知堆栈段寄存器SS的内容是0FFA0H,堆栈指针寄存器SP的内容是00B0H,先执行两条把8057H和0F79H分别进栈的PUSH指令,再执行一条POP指令。试画出堆栈区和SP的内容变化过程示意图(标出存储单元的物理地址)。
解:
6.求出以下各十六进制数与十六进制数62A0H之和,并根据结果设置标志位SF、ZF、CF和OF的值。
⑴1234H            ⑵4321H        ⑶CFA0H        ⑷9D60H
解:(1)结果74DEH:SF=0;ZF=0;CF=0;OF=0。
(2)结果A5C1EH:SF=1;ZF=0;CF=1;OF=1。
(3)结果3240H:SF=0;ZF=0;CF=1;OF=0。
(4)结果0000H:SF=0;ZF=1;CF=1;OF=0。
7.求出以下各十六进制数与十六进制数4AE0H的差值,并根据结果设置标志位SF、ZF、CF和OF的值。
⑴1234H            ⑵5D90H        ⑶9090H            ⑷EA04H
解:(1)结果:C754H;SF=1;ZF=0;CF=1;OF=0。
(2)结果:12B0H;SF=0;ZF=0;CF=0;OF=0。
(3)结果:45B0H;SF=0;ZF=0;CF=0;OF=0。
(4)结果:9F24H;SF=1;ZF=0;CF=0;OF=0。
8.假设BX=0E3H,变量VALUE中存放的内容为79H,确定下列各条指令单独执行后的结果。
⑴XOR BX,VALUE        ⑵AND BX,VALUE    ⑶OR BX,VALUE   
⑷XOR BX,0FFH      ⑸AND BX,0            ⑹TEST BX,01H
解:(1)BX=9AH
  (2)BX=61H
  (3)BX=FBH
  (4)BX=1CH
  (5)BX=00H
  (6)BX=E3H
9.试写出执行下列指令序列后BX寄存器的内容。执行前BX=6D16H。
    MOV  CL,7
    SHR  BX,CL
解:执行后BX=00DAH
10. 试分析以下程序段所完成的功能。
    MOV CL,04
    SHL DX,CL
    MOV BL,AH
    SHL AX,CL
    SHR BL,CL
    OR DL,BL
解:程序段完成由DX和AX共同组成的32位数向左移动4位。
11.写一程序段:比较两个5字节的字符串OLDS和NEWS,如果OLDS字符串不同于NEWS字符串,则执行NEW_LESS;否则顺序执行程序。
解:参考程序:  MOV AX,DS
                MOV ES,AX
                MOV CX,0005H
                LEA SI,OLDS
                LEA DI,NEAS
                CLD
                REPZ  SCASB
                JNZ  NEW_LESS
               
12.假定AX和BX中内容为带符号数,CX和DX中的内容为无符号数,请用比较指令和条件转移指令实现以下判断:
⑴若DX的内容超过CX的内容,则转去执行EXCEED;
⑵若BX的内容大于AX的内容,则转去执行EXCEED;
⑶若CX的内容等于0,则转去执行ZERO;
⑷若BX与AX的内容相比较是否产生溢出?若溢出则转OVERFLOW;
⑸若BX的内容小于等于AX的内容,则转EQ_SMA;
若DX的内容低于等于CX的内容,则转EQ_SMA。
解:(1)CMP DX,CX
JA EXCEED
(2) CMP BX, AX
  JG EXCEED
(3) CMP CX, 0
  JZ ZERO
(4) CMP BX, AX
  JO OVERFLOW
(5) CMP BX, AX
  JLE EQ_SMA
(6) CMP DX, CX
  JBE EQ_SMA
13.假设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
解:当2p>q时,AX的内容置成1;当2p<=q时,AX的内容置成2。
14.要求测试STATUS中的一个字节,如果第1、3、5位均为1则转移到ROUTINE_1;如果此三位中有两位为1则转移到ROUTINE_2;如果此三位只有一位为1则转移到ROUTINE_3;如果此3位全为0则转移到ROUTINE_4。试画出流程图,并编制相应程序段。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。