-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=0005 | BX=0000 | CX=0000 | DX=0000 | SP=FFEE | BP=0000 | SI=002A | DI=0000 | ||||||||||||||
DS=0F6A | ES=0F6A | SS=0F6A | CS=0F6A | IP=0102 | NV UP EI PL NZ NA PO NC | ||||||||||||||||
0F6A:0102 | 3C03 | CMP AL,03 | |||||||||||||||||||
注意在进行数据比较之前SF与OF标志都为0,且CF标志也为0。 | |||||||||||||||||||||
-p[Enter] | |||||||||||||||||||||
AX=0005 | BX=0000 | CX=0000 | DX=0000 | SP=FFEE | BP=0000 | SI=002A | DI=0000 | ||||||||||||||
DS=0F6A | ES=0F6A | SS=0F6A | CS=0F6A | IP=0104 | NV UP EI PL NZ NA PO NC | ||||||||||||||||
0F6A:0104 | 3CFF | CMP AL,FF | |||||||||||||||||||
第一次我们将+5与+3相比较,各标志位都没有变化。如果单从CF与ZF标志来看是可以说明5>3的,因为此次比较即没有产生借位且结果也不是0。指令JA就是依靠这两个标志位进行判断的。 | |||||||||||||||||||||
-p[Enter] | |||||||||||||||||||||
AX=0005 | BX=0000 | CX=0000 | DX=0000 | SP=FFEE | BP=0000 | SI=002A | DI=0000 | ||||||||||||||
DS=0F6A | ES=0F6A | SS=0F6A | CS=0F6A | IP=0106 | NV UP EI PL NZ AC PE CY | ||||||||||||||||
0F6A:0106 | 3C80 | CMP AL,80 | |||||||||||||||||||
第二次将+5与-1相比较,标志寄存器产生了变化。如果此时仍然通过CF标志对比较结果进行判断,就会有+5<-1的结果,只有小数减大数才会产生借位。由此可以得出这样的结论:CPU在设置CF标志位的时候是不考虑参加运算的数是否有符号的。换句话说,CPU把参加运算的数 | |||||||||||||||||||||
Copyright © 2004-2015 Reanimator | www.cookmoon.org |