具体指令分析
JB指令(英文:jump when below)当CF标志位为1的时候才会跳转,
而JNAE指令(英文:jump when not above or equal)和JB指令一样;
JNB指令(英文:jump when not below)只在CF标志位为0的时候才跳转,JAE指令(英文:jump when above or equal)和JNB指令一样。
JE指令功能是在ZF标志位等于1时进行跳转,也就是(test等判断指令)结果为0(或者相等)的时候跳转。
JNZ指令功能是在ZF标志为0转移,就是结果不为零(或不相等)则转移。
汇编指令 | 对应的机器码 | 作用 |
---|---|---|
JZ/JE | 74 | Z=1,为零/等于则跳转 |
JNZ/JNE | 75 | Z=0 ,不为零/不等于则跳转 |
通常上一条指令可能是:
sub eax,1
在eax=1时,eax-1=0,ZF标志位置1
test eax,eax
在eax为0时,eax&eax=0,ZF标志位置1
cmp eax,1
在eax=1时,eax-1=0,ZF标志位置1
其中test指令
如果AL为0:
test al,al 后
CF = 0,ZF = 0,SF=0, ZF=1, PF=1
如果AL为1:
test al,al 后
CF = 0,ZF = 0,SF=0, ZF=0, PF=0
其中cmp指令
指令格式: cmp 操作对象1,操作对象2
功能: 计算操作对象1 - 操作对象2 但不保存结果,仅仅根据计算结果对标志寄存器进行设置.比如cmp ax,ax 是做ax - ax 的运算,结果为0,但并不在ax中保存,仅影响flag的相关各位.
指令执行后: zf = 1,pf = 1,sf = 0,cf = 0,of = 0;
下面的指令:
mov ax,8
mov bx,3
cmp ax,bx
执行后: (ax)= 8,zf = 0,pf = 1,sf = 0, cf = 0, of = 0
如果 ax = bx 则 ax - bx = 0 ,所以 : zf = 1
如果 ax != bx 则ax - bx != 0,所以 : zf = 0
如果ax < bx 则ax - bx 将产生错位,所以 : cf = 1
如果 ax >= bx 则 ax - bx 将不必借位,所以 : cf = 0
如果ax > bx 则 ax - bx 既不必借位,结果又不为0, 所以 : cf = 0 并且 zf = 0
如果 ax <= bx 则ax - bx 既可能借位,结果可能为0,所以 : cf = 1 或 zf =1
汇编各种跳转指令: JO、JNO、JB、JNB、JE、JNE、JBE、JA、JS、JNS、JP、JNP、JL
名称 | 功能 | 操作数 | 操作码 | 模数 | 寄存器1 | 寄存器2或内存 | 位移量 | 立即数 | 符号 | 方向 | 芯片型号 | 16位 | 32位 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
JO | 溢出跳转 | 短 | $70 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JNO | 不溢出跳转 | 短 | $71 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JB | 低于跳转 | 短 | $72 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JNB | 不低于跳转 | 短 | $73 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JE | 相等跳转 | 短 | $74 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JNE | 不等跳转 | 短 | $75 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JBE | 不高于跳转 | 短 | $76 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JA | 高于跳转 | 短 | $77 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JS | 负号跳转 | 短 | $78 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JNS | 非负跳转 | 短 | $79 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JP | 奇偶跳转 | 短 | $7A | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JNP | 非奇偶跳转 | 短 | $7B | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JL | 小于跳转 | 短 | $7C | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JNL | 不小于跳转 | 短 | $7D | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JNG | 不大于跳转 | 短 | $7E | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JG | 大于跳转 | 短 | $7F | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JO | 溢出跳转 | 近 | $0F80 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | 无 | $66 |
JNO | 不溢出跳转 | 近 | $0F81 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | 无 | $66 |
JB | 低于跳转 | 近 | $0F82 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | 无 | $66 |
JNB | 不低于跳转 | 近 | $0F83 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | 无 | $66 |
JE | 相等跳转 | 近 | $0F84 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | 无 | $66 |
JNE | 不等跳转 | 近 | $0F85 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | 无 | $66 |
JBE | 不高于跳转 | 近 | $0F86 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | 无 | $66 |
JA | 高于跳转 | 近 | $0F87 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | 无 | $66 |
JS | 负号跳转 | 近 | $0F88 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | 无 | $66 |
JNS | 非负跳转 | 近 | $0F89 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | 无 | $66 |
JP | 奇偶跳转 | 近 | $0F8A | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | 无 | $66 |
JNP | 非奇偶跳转 | 近 | $0F8B | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | 无 | $66 |
JL | 小于跳转 | 近 | $0F8C | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | 无 | $66 |
JNL | 不小于跳转 | 近 | $0F8D | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | 无 | $66 |
JNG | 不大于跳转 | 近 | $0F8E | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | 无 | $66 |
JG | 大于跳转 | 近 | $0F8F | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | 无 | $66 |
JO | 溢出跳转 | 近 | $0F80 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JNO | 不溢出跳转 | 近 | $0F81 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JB | 低于跳转 | 近 | $0F82 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JNB | 不低于跳转 | 近 | $0F83 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JE | 相等跳转 | 近 | $0F84 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JNE | 不等跳转 | 近 | $0F85 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JBE | 不高于跳转 | 近 | $0F86 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JA | 高于跳转 | 近 | $0F87 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JS | 负号跳转 | 近 | $0F88 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JNS | 非负跳转 | 近 | $0F89 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JP | 奇偶跳转 | 近 | $0F8A | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JNP | 非奇偶跳转 | 近 | $0F8B | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JL | 小于跳转 | 近 | $0F8C | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JNL | 不小于跳转 | 近 | $0F8D | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JNG | 不大于跳转 | 近 | $0F8E | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JG | 大于跳转 | 近 | $0F8F | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JCXZ | 计数一六零跳转 | 位移8 | $E3 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | $67 |
JECXZ | 计数三二零跳转 | 位移8 | $E3 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $67 | 无 |
JMP | 跳转 | 寄16 | $FF | 11 | 100 | 3 | 无 | 无 | 无 | 无 | 8086 | 无 | $66 |
JMP | 跳转 | 寄32 | $FF | 11 | 100 | 3 | 无 | 无 | 无 | 无 | 386 | $66 | 无 |
JMP | 跳转 | 16[寄16] | $FF | 00 | 100 | 5 | 无 | 无 | 无 | 无 | 8086 | 无 | $6766 |
JMP | 跳转 | 32[寄16] | $FF | 00 | 100 | 5 | 无 | 无 | 无 | 无 | 386 | $66 | $67 |
JMP | 跳转 | 16[寄32] | $FF | 00 | 100 | 5 | 无 | 无 | 无 | 无 | 386 | $67 | $66 |
JMP | 跳转 | 32[寄32] | $FF | 00 | 100 | 5 | 无 | 无 | 无 | 无 | 386 | $6766 | 无 |
JMP | 跳转 | 16[寄16+位移8] | $FF | 01 | 100 | 5 | 9 | 无 | 无 | 无 | 8086 | 无 | $6766 |
JMP | 跳转 | 32[寄16+位移8] | $FF | 01 | 100 | 5 | 9 | 无 | 无 | 无 | 386 | $66 | $67 |
JMP | 跳转 | 16[寄32+位移8] | $FF | 01 | 100 | 5 | 9 | 无 | 无 | 无 | 386 | $67 | $66 |
JMP | 跳转 | 32[寄32+位移8] | $FF | 01 | 100 | 5 | 9 | 无 | 无 | 无 | 386 | $6766 | 无 |
JMP | 跳转 | 16[寄16+位移16] | $FF | 10 | 100 | 5 | 9 | 无 | 无 | 无 | 8086 | 无 | $6766 |
JMP | 跳转 | 32[寄16+位移16] | $FF | 10 | 100 | 5 | 9 | 无 | 无 | 无 | 386 | $66 | $67 |
JMP | 跳转 | 16[寄32+位移32] | $FF | 10 | 100 | 5 | 9 | 无 | 无 | 无 | 386 | $67 | $66 |
JMP | 跳转 | 32[寄32+位移32] | $FF | 10 | 100 | 5 | 9 | 无 | 无 | 无 | 386 | $6766 | 无 |
JMP | 跳转 | 近16[寄16] | $FF | 00 | 100 | 5 | 无 | 无 | 无 | 无 | 8086 | 无 | $6766 |
JMP | 跳转 | 近32[寄16] | $FF | 00 | 100 | 5 | 无 | 无 | 无 | 无 | 386 | $66 | $67 |
JMP | 跳转 | 近16[寄32] | $FF | 00 | 100 | 5 | 无 | 无 | 无 | 无 | 386 | $67 | $66 |
JMP | 跳转 | 近32[寄32] | $FF | 00 | 100 | 5 | 无 | 无 | 无 | 无 | 386 | $6766 | 无 |
JMP | 跳转 | 近16[寄16+位移8] | $FF | 01 | 100 | 5 | 9 | 无 | 无 | 无 | 8086 | 无 | $6766 |
JMP | 跳转 | 近32[寄16+位移8] | $FF | 01 | 100 | 5 | 9 | 无 | 无 | 无 | 386 | $66 | $67 |
JMP | 跳转 | 近16[寄32+位移8] | $FF | 01 | 100 | 5 | 9 | 无 | 无 | 无 | 386 | $67 | $66 |
JMP | 跳转 | 近32[寄32+位移8] | $FF | 01 | 100 | 5 | 9 | 无 | 无 | 无 | 386 | $6766 | 无 |
JMP | 跳转 | 近16[寄16+位移16] | $FF | 10 | 100 | 5 | 9 | 无 | 无 | 无 | 8086 | 无 | $6766 |
JMP | 跳转 | 近32[寄16+位移16] | $FF | 10 | 100 | 5 | 9 | 无 | 无 | 无 | 386 | $66 | $67 |
JMP | 跳转 | 近16[寄32+位移32] | $FF | 10 | 100 | 5 | 9 | 无 | 无 | 无 | 386 | $67 | $66 |
JMP | 跳转 | 近32[寄32+位移32] | $FF | 10 | 100 | 5 | 9 | 无 | 无 | 无 | 386 | $6766 | 无 |
JMP | 跳转 | 远16[寄16] | $FF | 00 | 101 | 5 | 无 | 无 | 无 | 无 | 8086 | 无 | $6766 |
JMP | 跳转 | 远32[寄16] | $FF | 00 | 101 | 5 | 无 | 无 | 无 | 无 | 386 | $66 | $67 |
JMP | 跳转 | 远16[寄32] | $FF | 00 | 101 | 5 | 无 | 无 | 无 | 无 | 386 | $67 | $66 |
JMP | 跳转 | 远32[寄32] | $FF | 00 | 101 | 5 | 无 | 无 | 无 | 无 | 386 | $6766 | 无 |
JMP | 跳转 | 远16[寄16+位移8] | $FF | 01 | 101 | 5 | 9 | 无 | 无 | 无 | 8086 | 无 | $6766 |
JMP | 跳转 | 远32[寄16+位移8] | $FF | 01 | 101 | 5 | 9 | 无 | 无 | 无 | 386 | $66 | $67 |
JMP | 跳转 | 远16[寄32+位移8] | $FF | 01 | 101 | 5 | 9 | 无 | 无 | 无 | 386 | $67 | $66 |
JMP | 跳转 | 远32[寄32+位移8] | $FF | 01 | 101 | 5 | 9 | 无 | 无 | 无 | 386 | $6766 | 无 |
JMP | 跳转 | 远16[寄16+位移16] | $FF | 10 | 101 | 5 | 9 | 无 | 无 | 无 | 8086 | 无 | $6766 |
JMP | 跳转 | 远32[寄16+位移16] | $FF | 10 | 101 | 5 | 9 | 无 | 无 | 无 | 386 | $66 | $67 |
JMP | 跳转 | 远16[寄32+位移32] | $FF | 10 | 101 | 5 | 9 | 无 | 无 | 无 | 386 | $67 | $66 |
JMP | 跳转 | 远32[寄32+位移32] | $FF | 10 | 101 | 5 | 9 | 无 | 无 | 无 | 386 | $6766 | 无 |
JMP | 跳转 | 短 | $EB | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | 无 |
JMP | 跳转 | 位移16 | $E9 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | $66 |
JMP | 跳转 | 位移32 | $E9 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JMP | 跳转 | 近 | $E9 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | $66 |
JMP | 跳转 | 近 | $E9 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JMP | 跳转 | 远(数段址:)偏移16 | $EA | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 8086 | 无 | $66 |
JMP | 跳转 | 远(数段址:)偏移32 | $EA | 无 | 无 | 无 | 无 | 10 | 无 | 无 | 386 | $66 | 无 |
JMP | 跳转 | 数段址:偏移16 | $EA | 无 | 无 | 无 | 无 | 12 | 无 | 无 | 8086 | 无 | $66 |
JMP | 跳转 | 数段址:偏移32 | $EA | 无 | 无 | 无 | 无 | 12 | 无 | 无 | 386 | $66 | 无 |
JMPE | 跳转扩展 | 寄16 | $0F00 | 11 | 110 | 3 | 无 | 无 | 无 | 无 | IA64 | 无 | $66 |
JMPE | 跳转扩展 | 寄32 | $0F00 | 11 | 110 | 3 | 无 | 无 | 无 | 无 | IA64 | $66 | 无 |
JMPE | 跳转扩展 | 16[寄16] | $0F00 | 00 | 110 | 5 | 无 | 无 | 无 | 无 | IA64 | 无 | $66 |
JMPE | 跳转扩展 | 32[寄16] | $0F00 | 00 | 110 | 5 | 无 | 无 | 无 | 无 | IA64 | $66 | 无 |
JMPE | 跳转扩展 | 16[寄32] | $0F00 | 00 | 110 | 5 | 无 | 无 | 无 | 无 | IA64 | 无 | $66 |
JMPE | 跳转扩展 | 32[寄32] | $0F00 | 00 | 110 | 5 | 无 | 无 | 无 | 无 | IA64 | $66 | 无 |
JMPE | 跳转扩展 | 16[寄16+位移8] | $0F00 | 01 | 110 | 5 | 9 | 无 | 无 | 无 | IA64 | 无 | $66 |
JMPE | 跳转扩展 | 32[寄16+位移8] | $0F00 | 01 | 110 | 5 | 9 | 无 | 无 | 无 | IA64 | $66 | 无 |
JMPE | 跳转扩展 | 16[寄32+位移8] | $0F00 | 01 | 110 | 5 | 9 | 无 | 无 | 无 | IA64 | 无 | $66 |
JMPE | 跳转扩展 | 32[寄32+位移8] | $0F00 | 01 | 110 | 5 | 9 | 无 | 无 | 无 | IA64 | $66 | 无 |
JMPE | 跳转扩展 | 16[寄16+位移16] | $0F00 | 10 | 110 | 5 | 9 | 无 | 无 | 无 | IA64 | 无 | $66 |
JMPE | 跳转扩展 | 32[寄16+位移16] | $0F00 | 10 | 110 | 5 | 9 | 无 | 无 | 无 | IA64 | $66 | 无 |
JMPE | 跳转扩展 | 16[寄32+位移32] | $0F00 | 10 | 110 | 5 | 9 | 无 | 无 | 无 | IA64 | 无 | $66 |
JMPE | 跳转扩展 | 32[寄32+位移32] | $0F00 | 10 | 110 | 5 | 9 | 无 | 无 | 无 | IA64 | $66 | 无 |
JMPE | 跳转扩展 | 位移16 | $0FB8 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | IA64 | 无 | $66 |
JMPE | 跳转扩展 | 位移32 | $0FB8 | 无 | 无 | 无 | 无 | 10 | 无 | 无 | IA64 | $66 | 无 |