汇编语言之标志寄存器 ZF标志 ZF标志是零标志位(zero flag);她记录相关指令执行后,其结果是否为0,如果为0,则ZF = 1,如果不为0 ,则 ZF = 0 例如 上面指令执行后,ZF= 1 PF标志 PF标志是奇偶标志位(parity flag),他记录相关指令执行后,其结果所有的bit位中1的个数是否为偶数,如果为偶数,则PF= 1,否则为0 上面执行后结果是11,有3个1,所以PF = 0 SF 标志 SF是符号标志位(sign flag),用于记录相关结果是否为负数,如果结果为负数,SF= 1,如果非负数,则SF= 0 CF标志 CF标志是进位标志(carry flag),一般情况下,在进行无符号运算的时候,它记录了运算结果的最高有效位向更高位的进位值,或从更高位借位值 OF标志 OF标志是溢出标志(overflow flag),OF记录了有符号数运算的结果是否产生溢出,如果发生溢出,OF=1,如果没有 OF=0 执行add命令后,CF=0,OF=1;CPU在执行add等指令的时候,就包含了两种含义,无符号数运算和有符号数运算,对于无符号数运算,CPU用CF位来记录是否产生了进位,对于有符号数运算,CPU用OF位记录是否产生了溢出,对于无符号数运算,98+99没有进位,CF=0;对于有符号数运算,98+99产生溢出,OF=0 abc指令 说了这么多的标志,现在看看这些标志如何使用的 adc 操作对象1,操作对象2 功能:操作对象1 = 操作对象1 +操作对象2 + CF 上面执行结束后 (ax) = 4,这是因为 (ax) = (ax)+1+(CF) = 2+1+1 = 4 为什么会出现abc指令,现在需要计算0198H和0183H的和
实际上面加法可以看作两步进行1)低位相加 2)高位相加在相加地位产生的进位数 sbb指令 sbb是带有借位减法指令,他利用了记录的借位值 sbb sbb操作对象1,操作对象2 功能:操作对象1 = 操作对象1 -操作对象2 -CF 计算003E1000H – 00H cmp指令 cmp是比较指令,cmp功能相当于减法指令,知识不保存结果,但是对寄存器产生影响。 格式:cmp 操作对象1,操作对象2 功能:计算操作对象1- 操作对象2,但是不保存结果,仅仅根据计算结果对标志寄存器进行设置 执行后 (ax) = 8,结果是5(101B),zf = 0,pf = 1,sf = 0;of= 0,cf = 0 根据无符号指令 zf = 1,(ax) = (bx) zf = 0;(ax) != (bx) cf = 1;(ax) < (bx) cf = 0 ;(ax) >= (bx) cf = 0 and zf = 0 ;(ax) > (bx) cf = 1 or zf = 1;(ax) <= (bx) 检测比较结果的条件转移指令 转移是指他能够修改ip,而条件是指根据某种条件,决定是否修改ip 下面是根据无符号的比较结果进行转移的条件转移指令 指令含义检测的相关标志位英文je等于则转移zf=1equaljne不等于则转移zf=0no equaljb低于则转移cf = 1belowjnb不低于则转移cf = 0belowja高于则转移cf = 0 and zf = 0abovejna不高于则转移cf = 1 or zf = 1no above 样例 DF标志 DF标志是方向标志位(direction flag),在串处理指令中,控制每次操作后si,di的增减 对上面指令设置通常使用 串传送指令 movsb ((es)*16 +(bi) ) = ((ds)*16 + (si)) 当 df = 0时 (si) = (si) +1 (bi) = (bi)+1 当 df =1时 (si) = (si) -1 (bi) = (bi)-1 使用汇编表示: movsw 使用汇编表示: movsb 和movsw都要配合rep使用格式:rep movsb 使用汇编表示: rep的作用就是根据cx的值,重复执行后面的串传送指令,由于每执行一次,movsb指令si和di都会递增或者递减指向后一单或者前一单 pushf和popf pushf的功能就是将标志寄存器的值压栈,而popf就是从栈中弹出数据,送入标志寄存器中
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/85684.html