码迷,mamicode.com
首页 > 其他好文 > 详细

第11章标志寄存器 其一

时间:2020-05-25 12:04:09      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:技术   就是   font   alt   存储   二进制   算数运算   逻辑   span   

8086cpu的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW)。

我们已经使用过8086cpu的ax、bx、cx、dx、si、di、bp、sp、ip、cs、ss、ds、es等13个寄存器了。

本章中的标志寄存器(以下简称flag)是我们要学习的最后一个寄存器。

flag和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义。

而flag寄存器是按位起作用的,也就是说,他的每一位都有专门的含义,记录特定的信息。

技术图片

 

 

在这一章中,我们学习标志寄存器中的cf、pf、zf、sf、of、df标志位,和一些与其相关的典型指令。

 

11.1zf标志位

flag 的第6位是zf,零标志位。它记录相关指令执行后,

结果为0,zf=1

结果不为0,zf=0

比如:

mov  ax,1

sub  ax,1

指令执行后,结果为0,则zf=1.

mov  ax,2

sub  ax,1

指令执行后,结果为1,则zf=0

 

对于zf的值,我们可以这样来看,zf标记相关指令的计算结果是否为0,如果为0,则在zf要记录下  是0  这样的肯定信息。

 

注意:

在8086cpu的指令集中,有的指令的执行是影响标志寄存器的,比如:

add、sub、mul、div、inc、or、and等,他们大都是运算指令(进行逻辑或算数运算)

有的指令的执行对标志寄存器没有影响,比如:mov,push、pop等,他们大都是传送指令。

 

11.2  pf标志

flag的第二位是pf,奇偶标志位。他记录指令执行后,结果的所有二进制位中1的个数;

为偶数,pf=1

为奇数,pf=0.

 

示例:

指令:

mov  al,1

add al,10

执行后,结果为00001011b,其中有3(奇数)个1,则pf=0

指令:

mov al,1

or al,10

执行后,结果为00000011b,其中有2(偶数)个1,则pf=1;

 

11.3  sf标志位

flag的第7位是sf,符号标志位。

它记录指令执行后,

结果为负,sf=1.

结果为正,sf=0.

 

示例:

mov  al,10000001b

add al,1

结果:al=10000010b

 

我们可以将add指令进行的运算当作无符号数的运算,那么add指令相当于计算129+1,结果为130(10000010b)

也可以将add指令进行的运算当作有符号数的运算,那么add指令相当于计算-127+1,结果为-126(10000010b)

不管我们如何看待,cpu在执行add指令的时候,就已经包含了两种含义,也将得到用同一种信息来记录的两种结果

关键在于我们的程序需要哪一种结果

sf标志

 

第11章标志寄存器 其一

标签:技术   就是   font   alt   存储   二进制   算数运算   逻辑   span   

原文地址:https://www.cnblogs.com/fate-/p/12955853.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!