[Intel汇编-MASM]标志寄存器

1. 标志寄存器的功能:

    1) 即SF寄存器(16位),Sign Flag Register,用于存放程序运行时的一些状态信息以及一些运算的临时结果等,该寄存器中的信息称为程序状态字PSW(Program Status Word,因为是16位字型的);

    2) 该寄存器和其它通用寄存器和专用寄存器有明显的区别,首先它不是用来存放数据和地址的,它是按位起作用的,每一位保存着不同意义的信息(比如保存加法进位信息、运算是否溢出等信息),并且该寄存器无法直接访问,它的功能是隐藏在普通的指令中的,可以通过一些指令间接地用到该寄存器中的位信息;

    3) 该寄存器是基于CPU的,不同CPU结构和数量都不同(比如相同的标志位对于不同的CPU其在SF中位于第几位可能不同,并且有用的标志位的数量可能也不尽相同,有的多有的少,并不是所有16位都是有用的,只有部分有用),因此这里不讨论也无需记忆每种标志位位于SF的第几位,只需要知道几种重要的标志位的作用就行了;

    4) 这里最主要介绍8个标志位,每个标志位都有自己的名字,分别是ZF、PF、SF、CF、OF、DF、TF、IF,这几个标志位的具体作用和含义下面会具体分解;


2. ZF:

    1) Zero Flag,判零标志位;

    2) 基本上所有的运算指令都会影响ZF位,就是指add、sub、and、or、mul、div、inc等指令;

    3) 作用规则:计算结果(即目的操作数最终的值)为0则ZF为1,不为0则ZF为0,即等价于函数isZero( )的作用;


3. PF:

    1) Parity Flag,奇偶标志位;

    2) 检查运算指令结果(目的操作数)的奇偶性以及数据传送时查错(也是判断结果的奇偶性,比如奇偶校验);

    3) 作用规则:如果指令运行结果的二进制位中1的个数为偶则PF为1,否则为0;


4. SF:

    1) Sign Flag,符号标志位;

    2) 检查运算指令的结果中最高位(即符号位)是否为1;

    3) 作用规则:如果指令运行结果的最高位为1则SF为1,否则为0;

!注意:在汇编这种低级语言中,数据仅仅就是二进制单元中的0和1,因此对于一个数既可以看成是有符号数也可以看成是无符号数,如果是有符号数则最高位必须看作是符号位并且要把它看做补码,如果是无符号数则最高位不是符号位并且要看成普通二进制编码(不用看成是补码表示);

!因此,不管你把运算看做是有符号运算还是无符号运算都会影响到SF位,但是只有看作有符号运算时SF位的内容对你来说才会有意义;


5. CF标志位和adc、sbb指令:

    1) Carry Flag,进位/借位符号位;

    2) 专门用于检查加法指令和减法指令的进位和

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值