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寄存器的更多相关文章

  1. DOS程序员手册(九)

    第14章参考手册概述     本书余下的章节将向读者们介绍BIOS.DOS各种各样API函数和服务,作为一名程 序员,了解和掌握这些知识是很有好处的.在所介绍的参考手册中,每部手册都汇集了大 量的资源 ...

  2. K60——寄存器

    (1)PTx_BASE_PTR为GPIO寄存器结构体基址指针(PTR即point to register,x=A/B/C/D/E) /* GPIO - Peripheral instance base ...

  3. JVM之PC寄存器(Program Counter Register)

    基本特性: 当前线程执行的字节码的行号指示器. Java虚拟机支持多个线程同时执行,每一个线程都有自己的pc寄存器. 任意时刻,一个线程都只会执行一个方法的代码,称为该线程的当前方法,对于非nativ ...

  4. 与或左移右移操作在ARM寄存器配置中的作用

    逻辑运算: 与运算&:与0清零  清零用与运算 或运算 |:或1置一  置一用或运算 异或 ^:不同为1  /*****单个寄存器清零置一*************************** ...

  5. 小议ARM寄存器

    ARM微处理器一共有37个32位寄存器,其中包括31个通用寄存器和6个状态寄存器,但是这些寄存处不能同时访问.但是通用寄存器R14 - R0 ,程序计数器PC(即R15),程序状态寄存器都是可以任何时 ...

  6. 汇编语言标记寄存器标记位_NV UP EI NG NZ AC PE CY

    在8086CPU中,有一种标记寄存器,长度为16bit: 其中存储的信息被称为程序状态字(Program Status Word,PSW),以下将该寄存器简称为flag. 功能:1)用来存储相关指令的 ...

  7. [转载]ARM协处理器CP15寄存器详解

    用于系统存储管理的协处理器CP15  原地址:http://blog.csdn.net/gameit/article/details/13169405 MCR{cond}     coproc,opc ...

  8. 2.3 ARM寄存器详解

    一共有37个寄存器 1. 31个通用寄存器 2. 6个状态寄存器 R13作为堆栈指针 R14链接寄存器 1.保存函数返回地址 2. 异常返回地址 R15程序计数器(PC指针) 程序状态寄存器 只有在异 ...

  9. 软件调试——IA-32 保护模式下寄存器一览

    最近在看张银奎先生的<调试软件>一书,想将关键的技术记录下来,以便日后查阅,也分享给想看之人吧. 1 通用寄存器 EAX,EBX,ECX,EDX:用于运算的通用寄存器,可以使用AX,BX等 ...

随机推荐

  1. Hibernate一对一双向关联(外键)

    网站上各种搜索,都是一些清晰或者不清晰的例子,但是用下来一是确实不给力,二是完全不知道所以然. 后来终于在书中查到了就在这里记一下. 首先要说明,这里只解释双向一对一只有一个表里面有外键的情况. 就以 ...

  2. Gartner 如何看 RASP 和 WAF?

    在这个计算机网络飞速发展的网络时代里,新兴的网络威胁正在不断「侵蚀」着的应用程序和核心数据的安全,各种繁杂的防护手段也随之接踵而来.众所周知,Gartner 是全球最具权威的 IT 研究与顾问咨询公司 ...

  3. 嵌入式C语言之---模块化编程

    当你在一个项目小组做一个相对较复杂的工程时,意味着你不再独自单干.你需要和你的小组成员分工合作,一起完成项目,这就要求小组成员各自负责一部分工程.比如你可能只是负责通讯或者显示这一块.这个时候,你就应 ...

  4. 抽象类 接口 虚函数(C++模拟,个人见解)

    1.抽象类里面可以有非抽象方法但接口里只能有抽象方法声明方法的存在而不去实现它的类被叫做抽像类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实 ...

  5. Android Density(密度)

    1.  什么是density 引用 1) density density表示每英寸有多少个显示点(逻辑值),它的单位是dpi:dot per inch,通常屏幕大时,density就大,屏幕小时,de ...

  6. ListView getView中放置多个item和getItemViewType的用法

    ListView 和 Adapter 的基础 工作原理: ListView 针对List中每个item,要求 adapter “给我一个视图” (getView). 一个新的视图被返回并显示 如果我们 ...

  7. java学习多线程之死锁

    形成死锁的前提是同步代码块嵌套. 什么是死锁?当一个线程拿到锁以后在这个锁内部的代码需要访问另一段的代码的时候另外一个程序的锁被另外一个线程拿到,这样的话,就造成了两个锁互不想让程序没法往下执行的这种 ...

  8. 无法使用以下搜索标准找到 X.509 证书: StoreName“My”、StoreLocation“LocalMachine”、FindType“FindBySubjectName”、FindValue“MyWebSite”。

    http://www.codeproject.com/Articles/96028/WCF-Service-with-custom-username-password-authenti 需要制作证书 ...

  9. Android推送通知指南

      Android推送通知指南 在开发Android和iPhone应用程序时,我们往往需要从服务器不定的向手机客户端即时推送各种通知消息,iPhone上已经有了比较简单的和完美的推送通知解决方案,可是 ...

  10. bzoj2553

    似乎挂精度了,不过这是一道好题 很明显看题知算法,知道这道题肯定是AC自动机上矩阵乘法 首先要明确一点,对一个字符串,怎样划分禁忌串最多 根据求最多不相交线段可知,从头到尾能划分出禁忌串就划分 根据这 ...