JCC指令和标志寄存器
JCC指令
JCC指令在满足条件时会修改
EIP寄存器的值
| JCC指令 | 说明 | 对应标志 | 对应C语言 |
|---|---|---|---|
| JE, JZ | 结果为零则跳转(相等时跳转) | ZF=1 | if (i == j);if (i == 0) |
| JNE, JNZ | 结果不为零则跳转(不相等时跳转) | ZF=0 | if (i != j);if (i != 0) |
| JS | 结果为负则跳转 | SF=1 | if (i < 0) |
| JNS | 结果为非负则跳转 | SF=0 | if (i > 0) |
| JP, JPE | 结果中1的个数为偶数则跳转 | PF=1 | (null) |
| JNP, JPO | 结果中1的个数为偶数则跳转 | PF=0 | (null) |
| JO | 结果溢出了则跳转 | OF=1 | (null) |
| JNO | 结果没有溢出则跳转 | OF=0 | (null) |
| JB, JNAE | 小于则跳转 (无符号数) | CF=1 | if (i < j) |
| JNB, JAE | 大于等于则跳转 (无符号数) | CF=0 | if (i >= j) |
| JBE, JNA | 小于等于则跳转 (无符号数) | CF=1 or ZF=1 | if (i <= j) |
| JNBE, JA | 大于则跳转(无符号数) | CF=0 and ZF=0 | if (i > j) |
| JL, JNGE | 小于则跳转 (有符号数) | SF≠ OF | if (si < sj) |
| JNL, JGE | 大于等于则跳转 (有符号数) | SF=OF | if (si >= sj) |
| JLE, JNG | 小于等于则跳转 (有符号数) | ZF=1 or SF≠ OF | if (si <= sj) |
| JNLE, JG | 大于则跳转(有符号数) | ZF=0 and SF=OF | if(si>sj) |
| 指令 | 英文 | 中文 |
|---|---|---|
| je | Equal | 等于 |
| jne | Not Equal | 不等于 |
| jg | Creater | 大于 |
| jge | Creater or Equal | 大于等于 |
| jng | Not Greater | 不大于 |
| jnge | Not Greater or Equal | 不大于等于 |
| jl | Less | 小于 |
| jle | Less or Equal | 小于等于 |
| jnl | Not Less | 不小于 |
| jnle | Not Less or Equal | 不小于等于 |
| ja | Above | 高于 |
| jae | Above or Equal | 高于等于 |
| jna | Not Above | 不高于 |
| jnae | Not Above or Equal | 不高于等于 |
| jb | Below | 低于 |
| jbe | Below or Equal | 低于等于 |
| jnb | Not Below | 不低于 |
| jnbe | Not Below or Equal | 不低于等于 |
| jpe | Parity Even | 校验为偶 |
| jpo | Parity Odd | 检验为奇 |
FLAG寄存器
| 位 | 名称 | 含义 | 说明 |
|---|---|---|---|
| 0 | CF | Carry Flag | 若算术操作产生的结果在最高有效位(most-significant bit)发生进位或错位则置为1,否则置0。通常用来指示无符号整型运算的溢出状态 |
| 1 | 1 | 未使用 | |
| 2 | PF | Parity Flag | 奇偶校验位,如果结果的最低有效字节(least-significant byte)包含偶数个1则置为1,否则置0 |
| 3 | 0 | 未使用 | |
| 4 | AF | Auxiliary Carry Flag | 辅助进位标志,如果算术操作在结果的第3位发生进位或错位,则置为1,否则置0,这个标志在BCD(binary-code decimal)算术运算中被使用 |
| 5 | 0 | 未使用 | |
| 6 | ZF | Zero Flag | 如果运算结果为0,则置为1,否则置0。通常与CMP和TEST指令一起使用 |
| 7 | SF | Sign Flag | 符号标志位,该标志被置为有符号整型的最高有效位 |
| 8 | TF | Trap Flag | 陷阱标志位,当为1时CPU进入单步执行模式,调试器中的单步步入就是使用这个表示位,单步步过使用CC下断点 |
| 9 | IF | Interrupt Enable Flag | |
| 10 | DF | Direction Flag | 用来控制变址寄存器的方向,当为0时,执行MOVS或STOS指令后EDI和ESI自增,反之则自减,数值取决于写入的长度,STD置为1,CLD置0 |
| 11 | OF | Overflow Flag | 反映有符号数加减运算结果是否有溢出,无符号数看CF位,例如0X7F+2,CF位不会溢出,而看OF则溢出 |
| 12 | IOPL | I/O Privilege Level | |
| 13 | IOPL | I/O Privilege Level | |
| 14 | NT | Nested Task | |
| 15 | 0 | 未使用 | |
| 16 | RF | Resume Flag | |
| 17 | VM | Virtual-8086 Mode | |
| 18 | AC | Alignmen Check / Access Contorl | |
| 19 | VIF | Virtual Interrupt Flag | |
| 20 | VIP | Virtual Interrupt Pending | |
| 21 | ID | ID Flag | |
| 22 | 0 | 未使用 | |
| 23 | 0 | 未使用 | |
| 24 | 0 | 未使用 | |
| 25 | 0 | 未使用 | |
| 26 | 0 | 未使用 | |
| 27 | 0 | 未使用 | |
| 28 | 0 | 未使用 | |
| 29 | 0 | 未使用 | |
| 30 | 0 | 未使用 | |
| 31 | 0 | 未使用 |
署名-非商业性使用本文采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ZEKALRYN'S BLOG!
评论
