汇编语言CMP(比较)指令:比较整数
了解了所有按位操作指令后,现在来讨论逻辑(布尔)表达式中的指令。最常见的布尔表达式涉及一些比较操作,下面的伪码片段展示了这种情况:
CMP(比较)指令执行从目的操作数中减去源操作数的隐含减法操作,并且不修改任何操作数:
如果比较的是两个无符号数,则零标志位和进位标志位表示的两个操作数之间的关系如右表所示:
如果比较的是两个有符号数,则符号标志位、零标志位和溢出标志位表示的两个操作数之间的关系如右表所示:
CMP 指令是创建条件逻辑结构的重要工具。当在条件跳转指令中使用 CMP 时,汇编语言的执行结果就和 IF 语句一样。
下面用三段代码来说明标志位是如何受到 CMP 影响的。设 AX=5,并与 10 进行比较,则进位标志位将置 1,原因是(5-10)需要借位:
if A > B ...
while X > 0 and X < 200 ...
if check_for_error(N) = true
CMP(比较)指令执行从目的操作数中减去源操作数的隐含减法操作,并且不修改任何操作数:
CMP destination,source
标志位
当实际的减法发生时,CMP 指令按照计算结果修改溢出、符号、零、进位、辅助进位和奇偶标志位。如果比较的是两个无符号数,则零标志位和进位标志位表示的两个操作数之间的关系如右表所示:
CMP结果 | ZF | CF |
---|---|---|
目的操作数 < 源操作数 | 0 | 1 |
目的操作数 > 源操作数 | 0 | 0 |
目的操作数 = 源操作数 | 1 | 0 |
如果比较的是两个有符号数,则符号标志位、零标志位和溢出标志位表示的两个操作数之间的关系如右表所示:
CMP结果 | 标志位 |
---|---|
目的操作数 < 源操作数 | SF ≠ OF |
目的操作数 > 源操作数 | SF=OF |
目的操作数 = 源操作数 | ZF=1 |
CMP 指令是创建条件逻辑结构的重要工具。当在条件跳转指令中使用 CMP 时,汇编语言的执行结果就和 IF 语句一样。
下面用三段代码来说明标志位是如何受到 CMP 影响的。设 AX=5,并与 10 进行比较,则进位标志位将置 1,原因是(5-10)需要借位:
mov ax, 5
cmp ax,10 ; ZF = 0 and CF = 1
mov ax,1000
mov cx,1000
cmp cx, ax ;ZF = 1 and CF = 0
mov si,105
cmp si, 0 ; ZF = 0 and CF = 0