JA | 大于跳转(如果 leftOp > rightOp) | Jump if left Above right |
JNBE | 不小于或等于跳(和) JA 相同) | Jump if left Not Below or Equal right |
JB | 如果 leftOp < rightOp) | Jump if left Below right |
JNAE | 不大于或等于跳(和) JB 相同) | Jump if left Not Above or Equal right |
JAE | 大于或等于跳转(如果 leftOp ≥ rightOp) | Jump if left Above or Equal right |
JNB | 不少于跳转(和 JAE 相同) | Jump if left Not Below right |
JBE | 小于或等于跳转(如果 leftOp ≤ rightOp) | Jump if left Below or Euqal right |
JNA | 不大于跳转(和 JBE 相同) | Jump if left Not Above right |
JG | 大于跳转(若 leftOp > rightOp) | Jump if left Greater than right |
JNLE | 不小于或等于跳转(与 JG 相同) | Jump if left Not Less than or Equal right |
JL | 小于跳转(若 leftOp < rightOp) | Jump if left Less than right |
JNGE | 不大于或等于跳转(与 JL 相同) | Jump if left Not Greater than or Euqal right |
JLE | 小于或等于跳转(若 leftOp ≤ rightOp) | Jump if left Less than or Euqal right |
JNG | 不大于跳转(与 JLE 相同) | Jump if left Not Greater than right |
JGE | 大于或等于跳转(若 leftOp ≥ rightOp) | Jump if left Greater than or Equal right |
JNL | 不小于跳转(与 JGE 相同) | Jump if left Not Less than right |
由以上内容可以总结出,Greater / Less用于描述有符号的比较,Above / Below用于表示无符号的比较,Equal则通用。
以下例子是有符号比较与无符号比较的基本特点。
7Fh=01111111,80h=10000000。
无符号比较实际上是直接比较二进制数大小,所以7Fh<80h。
有符号数按照补码规则,01111111=+127,10000000=-128,所以7Fh>80h。
mov al, +127 ;十六进制数值 7Fh
cmp al, -128 ;十六进制数值 80h
ja L1: ;不跳转,因为无符号 7Fh < 80h
jg L2: ;跳转,因为有符号 +127 > -128
nop
nop
nop
L1:nop
L2:nop
示例 1:
mov edx,-1
cmp edx, 0
jnl L5 ;不发生跳转(-1 ≥ 0 为假)
jnle L5 ;不发生跳转(-1 > 0 为假)
jl L1 ;跳转(-1 < 0 为真)
示例2:
mov bx, +32
cmp bx, -35
jng L5 ;不发生跳转( + 32 ≤ -35 为假)
jnge L5 ;不发生跳转( + 32 < -35 为假)
jge L1 ;跳转( + 32 ≥ -35 为真)
示例3:
mov ecx, 0
cmp ecx, 0
jg L5 ;不发生跳转(0 > 0 为假)
jnl L1 ;跳转(0 ≥ 0 为真)
示例4:
mov ecx, 0
cmp ecx, 0
jl L5 ;不发生跳转(0 < 0 为假)
jng L1 ;跳转(0 ≤ 0 为真)