标志寄存器(学习汇编)

摘要:
22.pushf和popf提供了一种直接访问标志寄存器的方法。
1514131211109876543210
 NTIOPLOFDFIFTFSFZF AF PF CF

使



I/O
权限
标志
占2位




















使




使




使



1.CPU内部的寄存器中,有一种特殊的寄存器(对于不同的处理机,个数和结构都有可能不同)具有以下3种作用。
  (1)用来存储相关指令的某些执行结果;
  (2)用来为CPU执行相关指令提供行为依据;
  (3)用来控制CPU的相关工作方式。
  这种特殊的寄存器在8086CPU中,被称为标志寄存器.本章中的标志寄存器(以下简称flag)使我们学习的最后一个寄存器.
 
2.flag寄存器是按位起作用的,也就是说,它的每一个位都有专门的含义,记录特定的信息.
 
3.flag的1、3、5、12、13、14、15位在8086CPU中没有使用,不具有任何含义;0、2、4、6、7、8、9、10、11位都具有特殊的含义。
 
4.flat的第6位是ZF,零标志位。它记录相关指令执行后,结果是否为0.如果结果为0,那么ZF=1;如果结果不为0,那么ZF=0.
  比如,指令:
  mov ax,1
  sub ax,1
  执行后,结果为0,则ZF=1
  mov ax,2
  sub ax,1
  执行后,结果不为0,则ZF=0
 
5.8086CPU指令集中,大多数的运算指令(进行逻辑或算术运算)会影响标志寄存器,而大多数的传送指令则不会影响标志寄存器。
 
6.flag的第2位是PF,奇偶标志位。他记录指令执行后,其结果的所有bit位中1的个数是否为偶数。如果1的个数为偶数,则PF=1,反之PF=0.
  比如,指令:
  mov al,1
  add al,10
  执行后,结果为00001011B,其中有3(奇数)个1,则PF=0;
  mov al,1
  or al,2
  执行后,结果为00000011B,其中有2(偶数)个1,则PF=1;
  sub al,al
  执行后,结果为00000000B,其中有0(偶数)个1,则PF=1
 
7.flag的第7位是SF,符号标志位。它记录相关指令执行后,其结果是否为负,如果为负,SF=1;如果非负,SF=0;
 
8.计算机中的一个数据可以看作是有符号数,也可以看作是无符号数。
 
9.SF标志,就是CPU对有符号数运算结果的一种记录,他记录数据的正负。
 
10.CPU字执行add等指令时,是必然影响到SF标志位的值。
 
11.flag的第0位是CF,进位标志位。一般情况下,在进行无符号运算时,他记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值。
   比如,指令:
   mov al,98H
   add al,al ;执行后:(al)=30H,CF=1 CF记录了从最高有效位行更高位的进位值
   add al,al ;执行后:(al)=60H,CF=0 CF记录了从最高有效位行更高位的进位值
   
   mov al,97H
   sub,al,98H ;执行后:(al)=FFH,CF=1 CF记录了从最高位向更高位的借位值
   sub al,al  ;执行后:(al)=0,CF=0 CF记录了从最高位向更高位的借位值
 
12.在进行有符号运算的时候,如果超过了机器所能表示的范围称为溢出。
 
13.flag的第11位是OF,溢出标志位。一般情况下,OF记录了有符号数运算结果是否发生了溢出。如果发生了溢出,OF=1;反之,OF=0。
 
14.注意CF和OF的区别:CF是针对无符号数运算有意义的标志,而OF是针对有符号数运算有意义的标志。
 
15.adc是带进位加法指令,它利用CF位上记录的进位值。
   指令格式:adc 操作对象1,操作对象2
   功能:操作对象1=操作对象1+操作对象2+CF
   比如指令 adc ax,bx 实现的功能是:(ax)=(ax)+(bx)+CF
 
16.adc所使用的进位值受上一条指令影响,可利用adc执行对任意大数据的加法(通过循环),但注意循环内部不要影响到CF.
 
17.sbb是带借位减法指令,它利用CF位上记录的借位值
   指令格式:sbb 操作对象1,操作对象2
   功能:操作对象1=操作对象1-操作对象2-CF
   比如指令 adc ax,bx 实现的功能是:(ax)=(ax)-(bx)-CF
 
18.cmp是比较指令,功能相当于减法指令,只是不保存结果,但影响flag各个位,其他指令通过识别这些标志位来得知比较结果。
   指令格式:cmp 操作对象1,操作对象2
   功能:计算操作对象1-操作对象2,但并不保存结果,仅仅根据结果对标志位寄存器进行设置。
   比如:指令 cpp ax,ax,做(ax)-(ax)的运算,结果为0,但并不保存到ax中,进影响flag相关各位。指令执行后:ZF=1,PF=1,SF=0,CF=0,OF=0.
 
19.如果因为溢出导致实际结果为负,那么逻辑上真正的结果必然为正。
 
20.flah的第10位是DF,方向标志位.在串处理指令中,控制酶促操作后si,di上网增减.
   df=0 每次操作后si、di递增
   df=1 每次操作后si、di递减
   格式:movsb
   功能:执行movsb指令相当于进行下面几部操作
   (1)((es)*16+(di))=((ds)*16)+(si))
   (2)如果df=0 则:    (si)=(si)+1
                      (di)=(di)+1
      如果df=1 则:    (si)=(si)-1
                      (di)=(di)-1
  例如,用串传送指令进行数据传送。
assume CS:code
data SEGMENT
     DB 'Welcome to masn!'
     DB 16 dup (0)
data ENDS
code SEGMENT
   s:MOV AX,data
     MOV DS,AX
     MOV SI,0        ;ds:si指向data:0
     MOV ES,AX
     MOV DI,16       ;es:di指向data:0010
     MOV CX,16       ;(cx)=16,rep循环16次
     CLD             ;设置df=0,正向传送
     REP MOVSB
     MOV AX,4c00h
     INT 21
code ENDS
END  s
 
21.pushf的功能是将标志寄存器的值压栈,而popf是从栈中弹出数据,送入标志寄存器中。
 
22.pushf和popf,为直接访问标志寄存器提供了一种方法。

免责声明:文章转载自《标志寄存器(学习汇编)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇vue-构建app项目敏捷软件开发:原则、模式与实践——第1章 敏捷实践下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【转】针对Android上的ROP攻击剖析

引言ROP(Return-oriented programming),即“返回导向编程技术”。其核心思想是在整个进程空间内现存的函数中寻找适合指令片断(gadget),并通过精心设计返回堆栈把各个gadget拼接起来,从而达到恶意攻击的目的。构造ROP攻击的难点在于,我们需要在整个进程空间中搜索我们需要的gadgets,这需要花费相当长的时间。但一旦完成了...

[虚拟化/云][全栈demo] 为qemu增加一个PCI的watchdog外设(五)

目的: 1. 了解PCI的基本知识,为完成watchdog的设备做准备。 准备知识: 简单的说,PCI 设备分3个空间。 配置空间,IO空间,内存地址空间。 PCI设备厂家决定了外设是使用IO空间还是IO内存空间。 我们通过读取配置空间的bar寄存器的最低位bit0来决定是该设备使用的是IO空间还是内存地址空间。 计算机一启动,bois或者linux会根据...

Intel 8086 常用汇编指令表

一、数据传输指令   它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.   1. 通用数据传送指令.     MOV  传送字或字节.     MOVSX 先符号扩展,再传送.     MOVZX 先零扩展,再传送.     PUSH  把字压入堆栈.     POP  把字弹出堆栈.     PUSHA 把AX,CX,DX,BX,SP,BP,SI...

smali 语言语法

Androidkiller 可以反编译Android的apk,生成一种.smali代码。(这理解好像不对) 网上找了一篇smali的语法手册,可以方便查找,文章名《Smali文件语法参考》 手册地址:http://blog.csdn.net/litton_van/article/details/7843490 网上有一篇smali的语法讲解(java与sm...

X86/X64处理器体系结构及寻址模式

由8086/8088、x86、Pentium发展到core系列短短40多年间,处理器的时钟频率差点儿已接近极限。尽管如此,自从86年Intel推出386至今除了添加一些有关流媒体的指令如mmx/sse之外。其它新增的大多数指令都能够从最初的指令集中组合实现相同的功能,整个编程模型维持了约有20多年。 1. 处理器体系结构 1.1. 处理器简要结构 我们都...

STM32学习笔记——定时器中断(向原子哥学习)

定时器中断 STM32的定时器功能十分强大,有TIME1和TIME8等高级定时器,也有TIME2~TIME5等通用定时器,还有TIME6和TIME7等基本定时器。在本章中,我们将利用TIM3的定时器中断来控制DS1的翻转,在主函数用DS0的翻转来提示程序正在运行。选择难度适中的通用定时器来介绍。 1、STM32通用定时器简介 STM32的通用定时器是一个通...