标志寄存器PSW和汇编条件转移指令解释

标志寄存器PSW

标志寄存器PSW(程序状态字寄存器PSW)
   标志寄存器PSW是一个16为的寄存器。它反映了CPU运算的状态特征并且存放某些控制标志。8086使用了16位中的9位,包括6个状态标志位和3个控制标志位。

CF(进位标志位):当执行一个加法(减法)运算时,最高位产生进位(或借位)时,CF为1,否则为0。
ZF零标志位:若当前的运算结果为零,则ZF为1,否则为0。
SF符号标志位:该标志位与运算结果的最高位相同。即运算结果为负,则SF为1,否则为0。
OF溢出标志位:若运算结果超出机器能够表示的范围称为溢出,此时OF为1,否则为0。判断是否溢出的方法是:进行二进制运算时,最高位的进位值与次高位的进位值进行异或运算,若运算结果为1则表示溢出OF=1,否则OF=0

PF奇偶标志:当运算结果的最低16位中含1的个数为偶数则PF=1否则PF=0
AF辅助进位标志:一个加法(减法)运算结果的低4位向高4位有进位(或借位)时则AF=1否则AF=0

另外还有三个控制标志位用来控制CPU的操作,可以由程序进行置位和复位。
TF跟踪标志:该标志位为方面程序调试而设置。若TF=1,8086/8088CPU处于单步工作方式,即在每条指令执行结束后,产生中断。
IF中断标志位:该标志位用来控制CPU是否响应可屏蔽中断。若IF=1则允许中断,否则禁止中断。
DF方向标志:该标志位用来控制串处理指令的处理方向。若DF=1则串处理过程中地址自动递减,否则自动递增。

OD里能查看到 除IF标志外的 8个标志位

汇编条件转移指令解释

可以通过以下程序理解上述有符号条件转移指令

void main(){
int a=3,b=5;
    if (a!=b) //je
        if (a==b) //jnz
            if (a<=b) //jg
                if (a<b) //jge
                    if (a>=b) //jl
                        if (a>b)//jle
                        {
                            printf("do if");
                        }
}
return 0;
时间: 2024-11-07 11:57:30

标志寄存器PSW和汇编条件转移指令解释的相关文章

标志寄存器(学习汇编)

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 NT IOPL OF DF IF TF SF ZF AF PF CF 未使用 嵌套标志 I/O权限标志占2位 溢出标志 方向标志 中断允许标志 单步标志 符号标志 零标志 未使用 辅助标志 未使用 奇偶标志 未使用 进位标志 1.CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理机,个数和结构都有可能不同)具有以下3种作用. (1)用来存储相关指令的某些执行结果: (2)用来为CPU执行相关指令提供行为依据: (3

汇编入门学习笔记 (十)—— 标志寄存器

疯狂的暑假学习之  汇编入门学习笔记 (十)--  标志寄存器 参考: <汇编语言> 王爽 第11章 CPU内部有一种特殊的寄存器叫标志寄存器(flag),它与ax,bx,cx等其他寄存器不同,它不是用来存放数据的,而是用来存放状态的.flag寄存器是按位器作用的,即只有0和1. flag寄存器的结构: 15     14    13    12     11     10     9     8     7     6     5     4     3     2     1     0

学 Win32 汇编[20]: 洞察标志寄存器

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 NT IOPL OF DF IF TF SF ZF AF PF CF 未使用 嵌套标志 I/O权限标志占2位 溢出标志 方向标志 中断允许标志 单步标志 符号标志 零标志 未使用 辅助标志 未使用 奇偶标志 未使用 进位标志 上表是 32 位寄存器 EFLAGS 的低 16 位. 不能直接读写 EFLAGS, 但有些方便的指令, 如:LAHF: 读取EFLAGS 低 8 位到 AH; SAHF 是 LAHF 的反向操作.

标志寄存器综述

转载自: http://www.cnblogs.com/dennisOne/archive/2012/10/23/2736238.html ?标志寄存器综述 8086CPU的标志寄存器(flags Register, FR)有16位,其中存储的信息通常被称为程序状态字(PSW),flag寄存器与其他寄存器不同,flag寄存器是按位起作用的.8086的flag寄存器中有CF.PF.ZF.SF.OF.DF标志位. 8086的FR的9个标志位 标志位 名称 功能 ZF 零标志位(Zero Flag)

汇编语言学习第十一章-标志寄存器

本博文系列参考自<<汇编语言>>第三版,作者:王爽 8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW).除了前面介绍的寄存器.本博文将介绍最后一个寄存器,标志寄存器.不同于之前的寄存器,标志寄存器是按位起作用的.其每一位都有特殊的含义. 8086标志寄存器的结构如下图所示: 标志寄存器的1,3,5,12,13,14,15都没有特殊含义.其0,2,4,6,7,8,9,10,11用作标志位使用. 11.1 ZF标志(zeros flag) 标志寄存器第6位

汇编语言(王爽) 第11章 标志寄存器

这里讲一个特殊的寄存器,flag 先看flag的16位显示 11.1 zf 指令执行后,结果0,ZF=1 指令执行后,结果不为0,ZF=0 11.2 pf 指令执行后,所有bit位中1的个数是否位偶数,若为偶数,那么pf=1 若为奇数,pf=0 11.3 sf 指令执行后,结果负,SF=1 指令执行后,结果不为负,SF=0 11.4 cf 进位 若出现进位,那么CF=1 没有的话CF=0 11.5 of 溢出, 数字的溢出. 8位范围是-128-127 若130就是溢出了 11.6 abc指令

汇编--控制转移指令 jmp

跳转指令分三类:一.无条件跳转: JMP;二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转);三.根据 EFLAGS 寄存器的标志位跳转, 这个太多了. JMP 无条件转移指令 1.段内直接短转移 2.段内直接近转移 3.段内间接近转移 4.段间直接远转移 5.段间间接远转移 条件转移指令 1)根据单个条件标志的设置情况转移: JZ(JE) ;为 0(等于) 则跳转 jump if zero, JNZ(JNE) ;不为 0(等于) 则

汇编--控制转移指令

跳转指令分三类:一.无条件跳转: JMP;二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转);三.根据 EFLAGS 寄存器的标志位跳转, 这个太多了. JMP 无条件转移指令 1.段内直接短转移 2.段内直接近转移 3.段内间接近转移 4.段间直接远转移 5.段间间接远转移 条件转移指令 根据标志位跳转的指令: JZ ;为 0 则跳转 jump if zero, JNZ ;不为 0 则跳转 JE ;等于则跳转 jump if equ

x86汇编指令具体解释

80x86指令系统 80x86指令系统,指令按功能可分为下面七个部分. (1) 数据传送指令. (2) 算术运算指令. (3) 逻辑运算指令. (4) 串操作指令. (5) 控制转移指令. (6) 处理器控制指令. (7) 保护方式指令. 3.3.1数据传送指令 数据传送指令包含:通用数据传送指令.地址传送指令.标志寄存器传送指令.符号扩展指令.扩展传送指令等. 一.通用数据传送指令 1传送指令 传送指令是使用最频繁的指令,格式:MOV DEST,SRC 功能:把一个字节,字或双字从源操作数S