×
嵌入式 > 技术百科 > 详情

第13章 标志寄存器(X86汇编教程)

发布时间:2020-06-20 发布时间:
|
其实这章的内容不怎么重要,看不懂也没关系,这些都是后台自己处理的,标志寄存器很少有人自己操作,就好像你不知道你的心脏每分钟跳几下,但你仍然活得好好的这样,另外,.之前居然有人转载了某章节,虽然那一章我没写不能转载......

     这一章简单介绍一个寄存器.为之后的章节做铺垫(由于咱是懒人,下一章几时写未定.)

    标志寄存器(PSW),是对计算的结果以及CPU的某些状态进行保存用的.

    为了实现一些功能,CPU在执行某些指令的时候,会把计算产生的一些东西保存到标志寄存器,一般都是算数指令.比如说计算结果是正数还是负数.

    186的标志寄存器是16位的,除了几个没用到的位,每一位都有不同含义和名字.名字表如下:

  15 | 14 | 13 | 12 | 11 | 10 | 09 | 08 | 07 | 06 | 05 | 04 | 03 | 02 | 01 |00
  [   ][     ][     ][    ][OF][DF][IF  ][TF ][SF][ZF][     ][AF][     ][PF][     ][CF]

 

 

[第0位CF]
这个用来记录相关指令执行后超出界限的那一位数据.
比如:
加法的时候:
mov ah,10000000B
mov al,10000000B
add ah,al
结果:ah=00000000B(理论上有个1在第9位,但ah是8位寄存器,所以第9位不放在这里)
第9位放在CF里!

减法计算的时候能计算向高位借的数值:
mov ax,0000H
sub ax,0001H
结果:ax=FFFFH(向第17位借了一个数字,于是CF=1(表示有借位!),如果没借数字则CF=0)
[第2位PF]
用来记录相关指令执行后,其结果所有bit位中1的个数是否为偶数,是则PF=1否则PF=0
[第6位ZF]
用来记录相关指令执行结果是否为0,如果为0则ZF=1否则ZF=0,比如:
mov AX,1
sub AX,1
结果为0则ZF=1
影响标志位的指令,比如add,sub,mul,div,inc,or,and等,大多都是运算指令,有些则没有影响,如mov,push,pop等,大多都是传送指令.
[第7位SF]
记录指令执行后的结果是否为负数,如果是负数则=1否则=0
[第8位TF]
如果TF=1则CPU运行一行代码后就产生中断,如果为0则代码一直运行下去.
[第9位IF]
控制是否响应外中断,如果为1则响应,为0则不响应,STI指令能将其设为1,CLI指令设为0
[第10位DF]
给一些指令用的...
[第11位OF]
溢出标志,计算结果如果产生溢出则OF=1否则OF=0
溢出实例:
mov ah,FFh
add ah,FFh
计算结果大于ah所能存放的最高数值,则会溢出
   


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
家庭网络:从带宽共享走向内容共享