美文网首页
汇编笔记5(标志与中断)

汇编笔记5(标志与中断)

作者: AlunX | 来源:发表于2018-06-12 00:22 被阅读0次

第11章(标志寄存器):

标志寄存器都是16位                                               

flag:按位起作用(其他寄存器是整个起作用)

1,3,5,12,13,14,15为保留位,不具有意义                                                  debug中的对应

零位标志位ZF:(6)上一次指令执行后结果为0则为1                                            (0)NZ (1) ZR

奇偶标志位PF:(2)二进制1的个数为偶数为1,为奇数为0                                  PO    PE

符号标志位SF:(7)结果为负为1,为正为0(对于有符号数)                              PL      NG

进位标志位CF:(0)无符号运算时记录进位和借位(都为1)                                  NC      CY

溢出标志位OF(11)有符号数运算时的进位和错位(只要最高位改变)                NV 

方向标志位DF(10)控制每次操作后si,di的递增递减

CF的运用:置0方法:sub ax,ax

      inc,loop不影响CF                add会影响,所以使用inc改变数值而不是add

adc:adc ax,bx==>(ax)=(ax)+(bx)+CF(先算低位后高位)

带进位的加法指令:利用CF位,把上一次的进位加到本次,adc也会影响CF,可以达到任意位相加

sbb:sbb ax,bx==>(ax)-(bx)-CF(先算高位后低位)

cmp:功能相当于减法,但不保存值,只作为判断依据(操作寄存器不变化,只影响flag寄存器中标志)

              考虑结果正负需要考虑SF和OF

              检测比较结果的条件转移

          1.无符号考虑ZF,CF    有符号考虑SF,OF,ZF

(以下指令都是无符号,且都是根据flag寄存器判断,也就是不配合cmp也可以用)

je:等于则转移        ZF

jne:不等于则转移 

jb:低于则转移    CF

jnb:不低于则转移

ja:高于则转移        CF和ZF

jna:不高于则转移

DF的运用:

串传宗指令:movsb(以字节为单位传送)movsw(以字为单位)

将ds:si中的字节送入es:di中并对1si,di递增(DF=0)或递减(DF=1)

配合rep(根据cx值执行多次串传送指令)使用

DF设置指令:cld(设为0),std(设为1)

pushf:将标志寄存器结果入栈

popf:将出栈结果传入标志寄存器

另:1.mov,push,pop等传送指令不改变标志位

问题总结:1.10H这种代表十进制,对应1的个数为16

实际操作的问题:

        1.call调用子程序用结束程序隔开,je等跳转用jmp隔开

      2.cmp也要注意操作对象位数相同

      3.注意混合使用跳转命令提高效率

相关文章

网友评论

      本文标题:汇编笔记5(标志与中断)

      本文链接:https://www.haomeiwen.com/subject/bmukeftx.html