条件转移指令较多,容易混淆,在此记录一下便于日后使用
1. 根据单个条件标志的设置情况转移
| 指令 | 英文 | 含义 | 格式 | 测试条件 |
|---|---|---|---|---|
| jz/je | jump if zero/equal | 结果为零/相等则转移 | jz/je opr | zf=1 |
| jnz/jne | jump if not zero/equal | 结果不为零/不相等则转移 | jnz/jne opr | zf=0 |
| js | jump if sign | 结果为负则转移 | js opr | sf=1 |
| jns | jump if not sign | 结果为正则转移 | jns opr | sf=0 |
| jo | jump if overflow | 溢出则转移 | jo opr | of=1 |
| jno | jump if not overflow | 不溢出则转移 | jno opr | of=0 |
| jp/jpe | jump if parity/parity even | 奇偶位为1则转移 | jp/jpe opr | pf=1 |
| jnp/jnpe | jump if not parity/parity even | 奇偶位为0则转移 | jnp/jnpe opr | pf=0 |
| jb/jnae/jc | jump if below/not above、not equal/carry | 低于/不高于或不等于/进位为1则转移 | jb/jnae/jc opr | cf=1 |
| jnb/jae/jnc | jump if not below/ above、equal/not carry | 不低于/高于或等于/进位为零则转移 | jnb/jae/jnc opr | cf=0 |
| 适用于测试某 | 一次运算的结果并根据其 | 不同特征产生程序分支 | 不同的处理的 | 情况 |
2. 比较两个无符号数,并根据比较的结果转移
| 指令 | 英文 | 含义 | 格式 | 测试条件 | 等价于 |
|---|---|---|---|---|---|
| jb/jnae/jc | jump if below/not above、not equal/carry | 低于/不高于或不等于/进位为1则转移 | jb/jnae/jc opr | cf=1 | < |
| jnb/jae/jnc | jump if not below/ above、equal/not carry | 不低于/高于或等于/进位为零则转移 | jnb/jae/jnc opr | cf=0 | ≥ |
| jbe/jna | jump if below/equal、not above | 低于/等于、不高于则转移 | jbe/jna opr | cf并zf=1 | ≤ |
| jnbe/ja | jump if not below/not equal、above | 不低于/不等于、高于则转移 | jnbe/ja opr | cf并zf=0 | > |
3. 比较两个带符号数,并根据比较的结果转移
| 指令 | 英文 | 含义 | 格式 | 测试条件 | 等价于 |
|---|---|---|---|---|---|
| jl/jnge | jump if less、not greater/equal | 小于、不大于/不等于则转移 | jl/jnge opr | sf异或cf=1 | < |
| jnl/jge | jump if not less、greater/equal | 不小于、大于/等于则转移 | jnl/jge opr | sf异或cf=0 | ≥ |
| jle/jng | jump if less/equal、not greater | 小于/等于、不大于则转移 | jle/jng opr | (sf异或cf)并zf=1 | ≤ |
| jnle/jg | jump if not less/not equal、 greater | 不小于/不等于、大于则转移 | jnle/jg opr | (sf异或cf)并zf=0 | > |
4.测试cx或ecx的值为0则转移指令
1. lcxz (jump if cx register is zero) cx寄存器的内容为零则转移
格式:jcxz opr
测试条件:(cx)=0
2. lecxz (jump if ecx register is zero) ecx寄存器的内容为零则转移
格式:jecxz opr (386及其后继机型可用)
测试条件:(ecx)=0
以上就是本文的全部内容,希望对大家的学习有所帮助,
命中助腚