汇编
1. jg
(Jump if Greater)
含义: 如果第一个操作数大于第二个操作数,则跳转。
应用场景: 用于有符号数的比较。
条件:
(ZF = 0) 且 (SF = OF)
ZF = 0
确保两个数不相等。SF = OF
表示符号位没有溢出,比较结果有效。
示例:
cmp eax, ebx jg greater_label
2. ja
(Jump if Above)
含义: 如果第一个操作数大于第二个操作数,则跳转。
应用场景: 用于无符号数的比较。
条件:
(CF = 0) 且 (ZF = 0)
CF = 0
表示第一个操作数没有借位。ZF = 0
确保两个数不相等。
示例:
cmp eax, ebx ja above_label
3. jl
(Jump if Less)
含义: 如果第一个操作数小于第二个操作数,则跳转。
应用场景: 用于有符号数的比较。
条件:
(SF ≠ OF)
- 符号位和溢出标志不同,表示第一个操作数小于第二个操作数。
示例:
cmp eax, ebx jl less_label
4. jb
(Jump if Below)
含义: 如果第一个操作数小于第二个操作数,则跳转。
应用场景: 用于无符号数的比较。
条件:
(CF = 1)
- 进位标志位被置位,表示第一个操作数小于第二个操作数。
示例:
cmp eax, ebx jb below_label
5. je
(Jump if Equal)
含义: 如果两个操作数相等,则跳转。
应用场景: 无论有符号还是无符号比较都适用。
条件:
(ZF = 1)
- 零标志位被置位,表示比较结果为零(即两个数相等)。
示例:
cmp eax, ebx je equal_label
6. jne
(Jump if Not Equal)
含义: 如果两个操作数不相等,则跳转。
应用场景: 无论有符号还是无符号比较都适用。
条件:
(ZF = 0)
- 零标志位没有置位,表示比较结果非零(即两个数不相等)。
示例:
cmp eax, ebx jne not_equal_label
7. jle
(Jump if Less or Equal)
含义: 如果第一个操作数小于或等于第二个操作数,则跳转。
应用场景: 用于有符号数的比较。
条件:
(ZF = 1) 或 (SF ≠ OF)
- 要么两个数相等,要么符号位和溢出标志不同,表示第一个操作数小于第二个操作数。
示例:
cmp eax, ebx jle less_or_equal_label
8. jbe
(Jump if Below or Equal)
含义: 如果第一个操作数小于或等于第二个操作数,则跳转。
应用场景: 用于无符号数的比较。
条件:
(CF = 1) 或 (ZF = 1)
- 要么借位发生(第一个操作数小于第二个操作数),要么两个数相等。
示例:
cmp eax, ebx jbe below_or_equal_label
总结:有符号 vs. 无符号
指令 | 有符号 | 无符号 |
---|---|---|
Greater | jg | ja |
Less | jl | jb |
Greater or Equal | jge | jae |
Less or Equal | jle | jbe |
注意:
- 有符号指令依赖符号位(SF)和溢出标志(OF)。
- 无符号指令依赖进位标志(CF)。
这两类指令的用途取决于数据的类型(有符号或无符号),在实际代码中需要根据具体的逻辑需求选择合适的跳转指令。