4.2.8 本节习题

 

下面几个问题使用以下数据:

.data
    val1 BYTE 10h
    val2 WORD 8000h
    val3 DWORD 0FFFFh
    val4 WORD 7FFFh

  1. 写一条val2加1的指令。
  2. 写一条从EAX中减掉val3的指令。
  3. 写一条从val2中减去val4的指令。
  4. 如果使用ADD指令对val2加1,那么进位标志和符号标志的值分别是什么?
  5. 如果使用ADD指令对val4加1,那么溢出标志和符号标志的值分别是什么?
  6. 在每条指令执行后,在提示处写下进位标志、符号标志、零标志和溢出标志的值:
    mov ax,7FF0h
    add al,10h            ;a.  CF =    SF =    ZF =    OF =
    add ah,1              ;b.  CF =    SF =    ZF  =    OF =
    add ax,2              ;c.  CF =    SF =    ZF =    OF =
  7. 用汇编语言实现下面的表达式:AX= (-val2+BX)-val4。
  8. (是/否):正整数和负整数相加的时候是否有可能设置溢出标志位?
  9. (是/否):负整数和负整数相加产生正整数时是否会设置溢出标志位?
  10. (是/否):NEG指令是否可能设置溢出标志位?
  11. (是/否):符号标志和零标志是否可能同时被设置?
  12. 写两条连续的指令,同时设置进位标志和溢出标志位的值。
  13. 写一系列指令,演示一下在执行完INC和DEC指令后零标志是如何用于指示无符号溢出的。
  14. 在讨论进位标志时,我们给出了一个1-2的例子,例子中对2求反再和1相加,进位标志是和的最高有效位的进位值取反后得到的。以4-3为例解释这个过程,以说明进位标志值是如何产生的。

 

参考答案:

  1. inc val2。
  2. sub eax, val3。
  3. 代码:
    mov ax,val4
    sub val2,ax
  4. CF = 0,SF=1。
  5. OF= 1,SF= 1。
  6. 写下面的标志值:
    (1)CF = 1,SF = 0,ZF = 1,OF = 0
    (1)CF = 0,SF = 1,ZF = 0,OF = 1
    (1)CF = 0,SF = 1,ZF = 0,OF = 1
  7. 代码示例:
    mov ax,val2
    neg ax
    add ax,bx
    sub ax,val4
  8. 否。
  9. 是。
  10. 是(例如,mov al,-128后面跟neg al)。
  11. 否。
  12. 下面的代码同时设置进位和溢出标志:
    mov al,80h
    add al,80h
  13. 下面的代码在INC和DEC之后设置零标志,表明发生了无符号溢出:
    mov al, 0FFh
    inc al
    jz overflow_occurred
    mov bl, 1
    dec bl
    jz overflow_occurred
  14. 从4中减去3(无符号),MSB到高位的进位被放在进位标志中了:
    mov al, 4
    sub al, 3        ;CF = 0