标志位
状态标志:
用于记录程序运行结果的状态信息
CF ZF SF PF OF AF
控制标志:
用于控制处理器执行指令
DF IF TF
状态标志
CF进位标志:当运算结果的最高有效位有进位(加法)或借位(减法)的时候,进位标志置1,
ZF 零标志:看最低字节即后8位的数值是否全部为0.
SF 符号标志: 一般是看有符号的运算,看最低字节即后8位的最高位D7 有符号:-128~127
PF奇偶标志:看运算结果最低字节中‘1’的个数为0或偶数时,则PF=1,否则PF=0
AF辅助进位标志:若运算时D3(低半字节)有进位或借位时,AF=1,否则AF=0
OF溢出标志:若运算结果有溢出,则OF=1,否则OF=0
溢出:如果运算结果超出了范围,就产生了溢出,有溢出,说明有符号的运算结果不正确
说明:我们通常认为溢出(上溢)就是因为进位时当前存储格式(1B、2B、4B等)的位数(8bit、16bit、32bit)不够而引起的。比如8为寄存器:11111111B+1B=100000000B超过了八位的1则被认为是溢出寄存器(放不下),当然也是进位进上去的1
溢出与进位 区别
溢出标志(OF):表示有符号数运算结果是否超出范围,运算结果已经不正确。
进位标志(CF):表示无符号数运算结果是否超出范围,运算结果仍然正确。
OF范围:-128~127
CF范围:0~255
控制标志
DF方向标志:用于串操作指令中,控制地址的变化方向:
设置DF为0,存储器地址自动增加
设置DF为1,存储器地址自动减少
示例:
CLD指令用于复位方向标志即复位操作,执行后DF=0;
STD指令用于置位方向标志即置位操作,执行后DF=1.
IF中断允许标志:用于控制外部可屏蔽中断是否可以被处理器响应:
设置IF为0,则禁止中断;
设置IF为1,则允许中断。
示例:
CLD指令用于复位中断标志,执行后IF=0;
STD指令用于置位中断标志,执行后IF=1.
TF陷阱标志:用于控制处理器进入单步操作方式:
设置TF为0,处理器正常工作
设置TF为1,处理器单步执行指令
单步执行命令:处理器在每条指令执行结束时,便产生一个编号为1的内部中断。
这种内部中断称为单步中断,所以TF也成为的单步标志:利用单步中断可对程序进行逐条指令的调试。
(这一个操作主要是用于程序的调试)
学到这里我有点疑惑为啥这个和程序状态字PSW不太一样,有啥区别,有大佬知道的话能说一说吗
明白为啥了,这里的我所学的时汇编 CPU 8086的标志寄存器,而我所想的psw程序状态字是C51单片机的CPU的标志寄存器。
另附上看到一位大佬的博文关于PSW的写的很棒,膜拜
https://blog.csdn.net/yannanxiu/article/details/17225927?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control&dist_request_id=1328760.2991.16172012905639187&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-2.control