8086FLAG寄存器
8086中的FLAG寄存器也就是状态标志位寄存器。它用来存储一些指令的计算结果,比如加法减法中的进位;为CPU运行某些命令提供根据,比如DF它决定是往前走指针还是向后走指针;总之状态寄存器存放的被称为程序状态字(PSW)。
8086中的寄存器一共同拥有例如以下所看到的:
1 ZF(0标志)
指令的运行结果为0,就ZF=1,否则ZF为0。
MOV AX, 1
SUB AX, 1;ZF = 1
MOV AX, 2
SUB AX, 1;ZF= 0
2 PF(奇偶标志)
结果中个1的个数为偶数则PF=1,否则PF = 0。
MOV AL, 1
ADD AL, 10;运行结果为:1011B。PF =0
MOV AL, 1
OR AL, 2;运行结果为:0011B,PF = 1
3 SF(符号标志位)
运行指令后。假设结果为负,则SF=1。否则SF=0
SF是针对有符号数来讲的,它记录数据的正负,当我们把数据当做带符号的时候,只SF来推断结果的正负
<1> 有无符号的区分
汇编中的带符号数和无符号数:在汇编中事实上没有针对有无符号做出区分和标志,区不区分是人的主观看待的。比如:
MOV AX 1000 0001B
ADD AX, 1;
当我们把运算当做无符号数来计算的时候,1000 0001B = 129,129 + 1 = 130;130的二进制表示1000 0010B。
当我们把运算当做有符号数来计算的时候。1000 0001B = -127,-127 + 1 = -126.-126的补码是
1000 0010B。
可见无论怎么当做什么,最后的结构都表示都是一样的,仅仅只是是当做是无符号数的时候,你不必去把补码转换成原码,由于当做无符号数的时候,相当于给最高位前面加了1位。而且这位值是0;当做是符号位的时候,你自然要依据最后的补码再转换成原码了。
<2> 溢出的问题
关于符号位的计算,当我们计算加法的时候,最高位是符号位。问题是符号位參与运算没?
答案是參与了。补码的的范围不包括符号位,可是补码相加后会产生进位,进位会与符号位參与运算,运算结果决定了终于的符号位。
4 CF(进位标志)
这个是针对无符号的运算的。表示加法的进位以及减法的借位。
5 OF(溢出标志)
这个标志是针对符号位的,当进行有符号的运算的时候。假设计算的范围超过了规定的范围。那么就会产生溢出。
6 adc指令
Adc指令是加法指令,它和add类似,仅仅只是是把进位值也相加了。
利用adc指令能够非常方便的进行多进制数的叠加,仅仅须要開始的时候进位制设为0,然后就每次相加16位。就这样子非常easy。
7 sbb指令
带进位的减法。它的功能是:操作数1 – 操作数2 – 进位值(借位)
8 CMP指令
它运行的是:操作数1 – 操作数2;依据计算结果对寄存器进行设置,可是不保存结果。
可是不能只sf的值去推断结果去推断比較结果的大小。
由于sf是针对有符号的数字来说的,假设在进行计算的时候发生了溢出。就不能简简单单依据sf的值推断正负了,所以要依据溢出标志of和符号标志sf去综合推断。
如: 34 –(-96) = 130,这时候of=1。sf=1。不能说明34< -96
<1> sf = 1,of =0,说明A<B
<2>sf = 1,of = 1,说明A>B
<3>sf = 0,of = 0,说明A>B
<4>sf = 0,of = 1,说明A<B
9 依据比較结果的转移指令
运行cmp指令后。会影响zf,pf,sf。cf。of,依据这些值的大小会有对应的跳转指令。
Je, zf =1,等于跳转
Jne。 zf=0,不等于跳转
Jb, cf=1,低于跳转
Jnb, cf=0,不低于跳转
Ja。 cf=0,且zf=0,高于则跳转
Jna。 cf=1活zf=1,不高于则跳转
10 DF(方向标志)
它的值决定每次运行后si。di的值是递增还是递减
有下面两个指令movsb,movsw。
<1>movsb
( (es)*16 + (di) ) = ( (ds)*16 +(si) )
假设df =0,(si) = (si) + 1,(di) = (di) + 1
假设df=1。(si) = (si) -1,(di) = (di) – 1
<2>movsw
( (es)*16 + (di) ) = ( (ds)*16 +(si) )
假设df =0,(si) = (si) + 2,(di) = (di) + 2
假设df=1。(si) = (si) -2,(di) = (di) – 2
<3>rep
这个表示反复的意思,有两种格式了
Rep movsb。
Rep movsw;
分别相当于:
S:movsb
Loop S;
S:movsw
Loop S;
<4>cld,std
Cld,将标志位的df置0。std。将标志位的df置1.
以下这个程序实现的是将ds中的字节的复制。
MOV AX,DATA
MOV DS,AX
MOV SI,0
MOV ES,AX
MOV DI,16
CLD
REP MOVSB
11 pushf和popf
这个是将标志寄存器中的各位压栈和出栈
8086FLAG寄存器的更多相关文章
- DOS程序员手册(九)
第14章参考手册概述 本书余下的章节将向读者们介绍BIOS.DOS各种各样API函数和服务,作为一名程 序员,了解和掌握这些知识是很有好处的.在所介绍的参考手册中,每部手册都汇集了大 量的资源 ...
- K60——寄存器
(1)PTx_BASE_PTR为GPIO寄存器结构体基址指针(PTR即point to register,x=A/B/C/D/E) /* GPIO - Peripheral instance base ...
- JVM之PC寄存器(Program Counter Register)
基本特性: 当前线程执行的字节码的行号指示器. Java虚拟机支持多个线程同时执行,每一个线程都有自己的pc寄存器. 任意时刻,一个线程都只会执行一个方法的代码,称为该线程的当前方法,对于非nativ ...
- 与或左移右移操作在ARM寄存器配置中的作用
逻辑运算: 与运算&:与0清零 清零用与运算 或运算 |:或1置一 置一用或运算 异或 ^:不同为1 /*****单个寄存器清零置一*************************** ...
- 小议ARM寄存器
ARM微处理器一共有37个32位寄存器,其中包括31个通用寄存器和6个状态寄存器,但是这些寄存处不能同时访问.但是通用寄存器R14 - R0 ,程序计数器PC(即R15),程序状态寄存器都是可以任何时 ...
- 汇编语言标记寄存器标记位_NV UP EI NG NZ AC PE CY
在8086CPU中,有一种标记寄存器,长度为16bit: 其中存储的信息被称为程序状态字(Program Status Word,PSW),以下将该寄存器简称为flag. 功能:1)用来存储相关指令的 ...
- [转载]ARM协处理器CP15寄存器详解
用于系统存储管理的协处理器CP15 原地址:http://blog.csdn.net/gameit/article/details/13169405 MCR{cond} coproc,opc ...
- 2.3 ARM寄存器详解
一共有37个寄存器 1. 31个通用寄存器 2. 6个状态寄存器 R13作为堆栈指针 R14链接寄存器 1.保存函数返回地址 2. 异常返回地址 R15程序计数器(PC指针) 程序状态寄存器 只有在异 ...
- 软件调试——IA-32 保护模式下寄存器一览
最近在看张银奎先生的<调试软件>一书,想将关键的技术记录下来,以便日后查阅,也分享给想看之人吧. 1 通用寄存器 EAX,EBX,ECX,EDX:用于运算的通用寄存器,可以使用AX,BX等 ...
随机推荐
- struts2简介
MVC框架.不过有一点需要注意的是:struts2和struts2虽然名字很相似,但是在两者在代码编写风格上几乎是不一样的.那么既然有了struts1,为什么还要推出struts2.主要的原因是str ...
- Python join()方法
描述 Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. 语法 join()方法语法: str.join(sequence) 参数 sequence -- 要连接的 ...
- [刷机教程] 三星Note8 N5100不卡屏的唯一解决办法--落雨刷机教程
首先我自己写了一个word,在附件里.大概23页,图文并茂.附带三星NOTE8 N5100 MD2下载包 刷机要谨慎啊,小伙伴们. 刷机教程已经上传到我本人的网站:点击进入去看吧.和word一样. h ...
- 【HDU 3810】 Magina (01背包,优先队列优化,并查集)
Magina Problem Description Magina, also known as Anti-Mage, is a very cool hero in DotA (Defense of ...
- FFMPEG-数据结构解释(AVCodecContext,AVStream,AVFormatContext)
http://blog.csdn.net/yuan892173701/article/details/8702333 AVCodecContext 这是一个描述编解码器上下文的数据结构,包含了众多编 ...
- Github上更新自己Fork的代码
一.前提本文的前提是你已经在github上fork了别人的分支,并且弄好了跟github的ssh连接.相关配置详情参考:https://help.github.com二.详细操作 检出自己在githu ...
- INFORMATION_SCHEMA.INNODB_LOCKS
INNODB_LOCKS Table: INNODB_LOCKS 表 包含信息关于每个锁 一个InnoDB 事务已经请求 但是没有获得锁, 每个lock 一个事务持有是堵塞另外一个事务 centos6 ...
- 织梦内容管理系统(DedeCms) 小说模块insert注入漏洞
漏洞版本: Dedecms 漏洞描述: DedeCms是免费的PHP网站内容管理系统. 织梦内容管理系统(DedeCms) 以简单.实用.开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用用户 ...
- NOI2005瑰丽华尔兹
1499: [NOI2005]瑰丽华尔兹 Time Limit: 3 Sec Memory Limit: 64 MBSubmit: 893 Solved: 508[Submit][Status] ...
- 【转】为ListView每个Item上面的按钮添加事件
原文网址:http://blog.csdn.net/qq435757399/article/details/8256453 1.先看下效果图: 在这里仅供测试,我把数据都写死了,根据需要 ...