第13章 标志寄存器(X86汇编教程)
这一章简单介绍一个寄存器.为之后的章节做铺垫(由于咱是懒人,下一章几时写未定.)
标志寄存器(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所能存放的最高数值,则会溢出
本章结束..
标志寄存器X86汇编教 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)