目录 上一页 下一页 下一章

-280- PC机汇编语言实战精解

那些反映运算后果的标志位都应该有相应的条件转移指令。
  原则上讲的确应该有这样的规律,不过有个特例--AF标志没有相应的条件转移指令。除AF外,SF、ZF、PF、CF、OF都有对应的条件转移指令。另外有一些条件转移指令要根据几个标志位的情况进行转移,比如前面我们讨论过的指令"JA",还有其它的一些。在本节里我们将总结所有的条件转移指令以及它们所判断的条件。
  在总结之前还要先解决一个前面遗留下来的问题,就是指令JA/JB与指令JG/JL的区别。前面已经提到过如果要对符号不同的两个数进行比较,应该使用JG/JL指令判断结果。下面先进行一个实验,实验过程中请注意观察符号标志位SF与溢出标志位OF:
  C:\ASM\>DEBUG[Enter]
  -a[Enter]
  0F6A:0100 mov al,5
  0F6A:0102 cmp al,3
  0F6A:0104 cmp al,-1
  0F6A:0106 cmp al,80
  0F6A:0108 [Enter]

-g=100 102[Enter]
AX=0005BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=002ADI=0000
DS=0F6AES=0F6ASS=0F6ACS=0F6AIP=0102 NV UP EI PL NZ NA PO NC
0F6A:01023C03CMP AL,03
  注意在进行数据比较之前SF与OF标志都为0,且CF标志也为0。
-p[Enter]
AX=0005BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=002ADI=0000
DS=0F6AES=0F6ASS=0F6ACS=0F6AIP=0104 NV UP EI PL NZ NA PO NC
0F6A:01043CFFCMP AL,FF
  第一次我们将+5与+3相比较,各标志位都没有变化。如果单从CF与ZF标志来看是可以说明5>3的,因为此次比较即没有产生借位且结果也不是0。指令JA就是依靠这两个标志位进行判断的。
-p[Enter]
AX=0005BX=0000CX=0000DX=0000SP=FFEEBP=0000SI=002ADI=0000
DS=0F6AES=0F6ASS=0F6ACS=0F6AIP=0106 NV UP EI PL NZ AC PE CY
0F6A:01063C80CMP AL,80
  第二次将+5与-1相比较,标志寄存器产生了变化。如果此时仍然通过CF标志对比较结果进行判断,就会有+5<-1的结果,只有小数减大数才会产生借位。由此可以得出这样的结论:CPU在设置CF标志位的时候是不考虑参加运算的数是否有符号的。换句话说,CPU把参加运算的数

Copyright © 2004-2015 Reanimator www.cookmoon.org

目录 上一页 下一页 下一章