第三章
定点运算指令
以下是定点运算指令(ADD、SUB、INC、DEC、NEG、CMP、MUL、IMUL、DIV、IDIV)的汇总表格,包括每条指令的格式、操作描述及其对标志位的影响。
指令 | 格式 | 操作描述 | OF(溢出标志) | SF(符号标志) | CF(进位标志) | ZF(零标志) |
---|---|---|---|---|---|---|
ADD | add src, dst |
dst = dst + src |
结果溢出时置位 | 结果为负数时置位 | 结果进位时置位 | 结果为零时置位 |
SUB | sub src, dst |
dst = dst - src |
结果溢出时置位 | 结果为负数时置位 | 结果借位时置位 | 结果为零时置位 |
INC | inc operand |
operand = operand + 1 |
结果溢出时置位 | 结果为负数时置位 | 不变 | 结果为零时置位 |
DEC | dec operand |
operand = operand - 1 |
结果溢出时置位 | 结果为负数时置位 | 不变 | 结果为零时置位 |
NEG | neg operand |
operand = -operand |
操作数为最小负数时置位 | 结果为负数时置位 | 操作数非零时置位 | 结果为零时置位 |
CMP | cmp src, dst |
dst - src (仅设置标志位,不存储结果) |
结果溢出时置位 | 结果为负数时置位 | 结果借位时置位 | 结果为零时置位 |
MUL | mul operand |
无符号乘法:EAX = EAX * operand (结果在EDX:EAX) |
结果超出目标寄存器时置位 | 不变 | 结果超出目标寄存器时置位 | 不变 |
IMUL | imul operand imul src, dst imul imm, src, dst |
有符号乘法:EAX = EAX * operand (结果在EDX:EAX)dst = dst * src dst = src * imm |
结果超出目标寄存器时置位 | 不变 | 结果超出目标寄存器时置位 | 不变 |
DIV | div operand |
无符号除法:EAX = EDX:EAX / operand ,余数在EDX |
不变 | 不变 | 不变 | 不变 |
IDIV | idiv operand |
有符号除法:EAX = EDX:EAX / operand ,余数在EDX |
不变 | 不变 | 不变 | 不变 |
说明
- ADD 和 SUB:用于加法和减法操作。根据结果设置 OF, SF, CF, ZF 标志位。
- INC 和 DEC:用于自增和自减操作。CF 标志位保持不变。
- NEG:用于取负操作。如果操作数为最小负数(例如 0x80000000),则 OF 置位。
- CMP:用于比较操作。通过设置标志位反映比较结果。
- MUL 和 IMUL:用于无符号和有符号乘法。结果存储在 EDX:EAX 中(对于一操作数形式),如果结果超出目标寄存器容量,则 OF 和 CF 置位。
- DIV 和 IDIV:用于无符号和有符号除法。结果存储在 EAX 中,余数存储在 EDX 中。
这些指令在处理定点运算时具有不同的功能和用途,通过设置标志位来反映操作结果的特性。
标签:计算机系统,结果,时置位,HUST,operand,EAX,CS,src,dst From: https://www.cnblogs.com/liubainian/p/18202328