汇编test、cmp对标志位的影响
CMP {cond}    Rn,operand2
CMP⽐较指令使⽤寄存器Rn的值减去operand2的值,根据操作的结果影响新CPSR中相应的条件标志位,以便后⾯的指令根据相应的条件标志来判断是否执⾏。CMP指令与SUBS指令的区别在于CMP指令不保存运算结果。在进⾏两个数据⼤⼩判断时,常⽤CMP指令及相应的条件码来操作。
以下转⾃CSDN:
CMP指令的格式为 CMP op1 op2 ⽤到的标志位有CF,ZF,OF,SF四个,对于两个⽆符号数的情况,两数相减不可能溢出了,看CF和ZF标志位就可以,如果ZF为1,说明结果是0,那不⽤说,两数相等了(有符号数也是这样),如果ZF为0,则如果CF为1,表⽰有借
位,op1<op2,否则op1>op2。
对于有符号数,就要看符号标志位SF和溢出标志位OF了,如果是两个同号的数,两数相减也是不可能溢出的,OF⼀定为0,此时,如果SF为1,则表⽰op1<op2,否则op1>op2,如果是两个异号的数相减,不溢出的情况跟上⾯的⼀样(OF==0,SF==1?
op1<op2:op1>op2)。
如果溢出了,则要分析⼀下,此时OF=1表⽰溢出,如果SF也为1,表⽰结果为负数,假设op1为负数,op2正数,相减的结果为负数,没溢出,假设不成⽴,op1是整数,op2是负数,所以op1>op2,SF为0的情况可以同样分析可得op1<op2。
test逻辑与运算结果为零,就把ZF(零标志)置1;
比较指令cmp怎么用cmp 算术减法运算结果为零,就把ZF(零标志)置1.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。