标志寄存器(EFLAGSJI)
1、定义
标志寄存器又称程序状态字(外语缩写:PSW、外语全称:Program Status Word)。
是一个16位的存放条件标志、控制标志寄存器,主要用于反映处理器的状态和ALU运算结果的某些特征及控制指令的执行。
2、符号意义(来自百度)
标志位(外语缩写) | 标志位名称及外语全称 | =1 | =0 |
CF | 进位标志/Carry Flag | CY/Carry/进位 | NC/No Carry/无进位 |
PF | 奇偶标志/Parity Flag | PE/Parity Even/偶 | PO/Parity Odd/奇 |
AF | 辅助进位标志/Auxiliary Carry Flag | AC/Auxiliary Carry/进位 | NA/No Auxiliary Carry/无进位 |
ZF | 零标志/Zero Flag | ZR/Zero/等于零 | NZ/Not Zero/不等于零 |
SF | 符号标志/Sign Flag | NG/Negative/负 | PL/Positive/非负 |
TF | 跟踪标志/Trace Flag | ||
IF | 中断标志/Interrupt Flag | EI/Enable Interrupt/允许 | DI/Disable Interrupt/禁止 |
DF | 方向标志/Direction Flag | DN/Down/减少 | UP/增加 |
OF | 溢出标志/Overflow Flag | OV/Overflow/溢出 | NV/Not Overflow/未溢出 |
对于EFLAGSJI寄存器:位置顺序OF DF IF TF SF ZF 0 AF 0 PF CF(cf占零位)
进位标志CF:如果运算结果的最高位产生了一个进位(+)或借位(-),那么,其值为1,否则其值为0。
奇偶标志PF:奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。Attention:1是指数字转化为二进制之后的1的个数。
辅助进位标志AF:
在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:
(1)、在字(word)操作时,发生低字节向高字节进位或借位时;
(2)、在字节(byte)操作时,发生低4位向高4位进位或借位时
零标志ZF:零标志ZF用来反映运算结果是否为0。
如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。
符号标志SF:符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。
溢出标志OF:溢出标志OF用于反映有符号数加减运算所得结果是否溢出。
CMP指令
在微型计算机的汇编语言中,CMP(compare)是其中一条指令,叫做比较指令。cmp的功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。
格式
CMP OPR1 , OPR2.
(OPR1)-(OPR2)
该指令与SUB指令一样执行减法的操作,但它并不保存运算结果,只是根据结果设置相关的条件标志位(SF、ZF、CF、OF)。CMP指令后往往跟着条件转移指令,实现根据比较的结果产生不同的程序分支的功能。
TEST指令
- test指令用于检查条件是否成立,如果条件为真,则返回一个0,如果条件不为真,则返回一个大于 0 的值,它可以进行数值、字符和文件三个方面的检查。
- test指令也可以简写为[], []和test是等价的
Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结果本身不会保存。
TEST AX,BX 与 AND AX,BX 命令有相同效果,只是Test指令不改变AX和BX的内容,而AND指令会把结果保存到AX中。