除整数寄存器外,CPU还维护着一组单个位的条件码寄存器
这些寄存器保存着最近算术或者逻辑操作所产生的一些效果 列如:
逻辑操作的1 或者0
有符号数的结果是否溢出 等
CF(carry flag):进位标志 描述了最近操作是否发生了进位(可以检查无符号操作是否溢出)
ZF(zero flag):零标志 最近操作结果为0(列如 逻辑操作 等)
SF(sign flag):符号标志最近操作结果为负数
OF(overflow flag):溢出标志最近操作导致一个补码溢出 补码溢出通常有两种结果(正溢出或者负溢出)
逻辑操作会将进位标志和溢出标志设置为0 (只是逻辑操作不会发生进位和溢出)
对于移位操作,进位标志会设置为最后移出的位,而溢出标志会设置为0
INC DEC指令会设置溢出标志和零标志,但是不会改变进位标志
了解条件码之后出现两类指令 仅仅设置条件码不会改变其他的寄存器 (其保存操作数的寄存器都不会改变 仅仅进行测试)
CMP A,B 操作 B-A (除不更新目标寄存器外 CMP和SUB的行为是一样的)
CMPB A, B
CMPW A, B
CMPL A, B
TEST A,B 操作 B&A (除不更新目标寄存器外 TEST和AND的行为是一样的)
TESTB A, B
TESTW A, B
TESTL A, B
例(cmp):
movw $0x0FFF, %ax
movw $1,%bx
cmpw %ax, %bx
这时会设置符号标志 但是%bx中的值还是$1
---------------------
作者:河里一只虾
来源:CSDN
原文:https://blog.csdn.net/qq_34717555/article/details/77727176
版权声明:本文为博主原创文章,转载请附上博文链接!