目录 上一页 下一页 下一章

第4章 奇妙的声音 -73-

-t
AX=0100BX=0100CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=13CDES=13CDSS=13CDCS=13CDIP=010A NV UP EI PL NZ NA PE NC
13CD:010A29D8SUB AX,BX 大的数减小的数没有产生借位
  最后一个SUB指令反映了相等的两个数相减时ZF标志位的变化情况,此情况前文已有所讨论。
-t
AX=0000BX=0100CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=13CDES=13CDSS=13CDCS=13CDIP=010C NV UP EI PL ZR NA PE NC
13CD:010C745BJZ 0169 相等两个数相减ZF标志发生变化
  通过以上跟踪结果可以清楚地看到当用100H和200H相比较时(CPU实际执行100H-200H)CF标志置位,NC变为CY。这说明小的无符号数减大的无符号数时只有CF置位,因此JB指令的转移条件是CF=1;当我们用200H减去100H时,可以看到CF标志复位(置零)。好象这里面没有ZF的事,指令JA只需判断CF的状态就成了,其实不然。请看当用100H-100H时CF仍置零,而ZF却置成了1。可见如果仅判断CF标志,那么无论是"高于"(Above)还是"为零"(Zero)指令都要完成转移,这显然不是JA指令的含义。
  那么我们为什么说这两条指令仅用于相同符号的数呢?解决这个问题我们还得靠DEBUG来帮忙:
C:\ASM\>DEBUG[Enter]
-a[Enter]
13CD:0100
13CD:0103
13CD:0106
13CD:0108
13CD:010A

mov ax,-1
mov bx,1
cmp ax,bx
ja 120

-r
AX=0000BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=13CDES=13CDSS=13CDCS=13CDIP=0100 NV UP EI PL NZ NA PO NC
13CD:0100B8FFFFMOV AX,FFFF 注意-1的补码表示
  -1的补码为0FFFFH,但这个数如果作为无符号数它又是"+65535",CPU究竟如何处理这个数呢?
-t
AX=FFFFBX=0000CX=0000DX=0000SP=FFEEBP=0000SI=0000DI=0000
DS=13CDES=13CDSS=13CDCS=13CDIP=0103 NV UP EI PL NZ NA PO NC
13CD:0103BB0100MOV BX,0001 设置BX寄存器为1

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章