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

标志寄存器

时间:2018-07-22 12:54:51      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:upload   技术   指令   工作   简介   方法   依据   递增   str   

一、简介

标志寄存器用来存储相关指令的某些执行结果,这些结果可以为CPU执行相关指令提供行为依据,从而来控制CPU的相关工作方式。

技术分享图片


二、各种标志位介绍

1. ZF零标志位

功能:用来记录相关指令执行后,其结果是否为0。

  • 结果为0时,ZF=1;
  • 结果非0时,ZF=0。
mov ax,1
sub ax,1  ;ax中值为0。ZF标志位置为1

mov ax,2
sub ax,1  ;ax中值为1。ZF标志位置为0

2. PF奇偶标志位

功能:记录结果中的1的个数是否为偶数。

  • 结果中1的个数为奇,PF=0;
  • 结果中1的个数为偶,PF=1
mov al,1
add al,10
;结果为:00001011(3个1)
;所以PF=0
    
mov al,1
or al,2
;结果为:00000011(2个1)
;所以PF=1

3. SF符号标志位

功能:记录结果是否为负。是CPU对有符号数运算结果的一种记录。

  • 结果为负:SF=1
  • 结果非负:SF=0
mov al,10000001B
add al,1
;结果为:10000010B  SF = 1

4. CF进位标志位

功能:进行无符号运算的时候,记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值。

mov al,98H
add al,al
;结果为:ax=00000130h  al=30h  CF=1

两个数做减法的时候,可能借位:

mov al,97H
sub al,98H  ;al=FFH  CF=1
sub al,al   ;al=0    CF=0

4.1. adc指令

adc是带进位的加法指令,它利用的CF标志位上的进位值。
如:
adc ax,bx
则:ax=ax+bx+CF。

mov ax,2
mov bx,1
sub bx,ax
adc ax,1    ;ax=2+1+CF=2+1+1=4

;;;;;;;;;;;;;;;;;
mov ax,1
add ax,ax
adc ax,3    ;ax=2+3+0=5

4.2. sbb指令

带借位的减法指令,利用了CF标志位上记录的借位值。
sbb ax,bx
则:ax=ax-bx-CF


5. OF溢出标志位

功能:记录有符号数运算结果是否发生溢出。

  • 发生溢出,OF=1;
  • 未发生溢出,OF=0。
mov al,98
add al,99
;结果为:al=98+99=197  (-128 - 127)

OF和CF的区别:

CF是对无符号数运算有意义的标志位。
OF是对有符号数运算有意义的标志位。


6. DF方向标志位

功能:在串处理指令中,控制每次操作后si,di的增减。

  • DF=0,每次操作后,si、di递增;
  • DF=1,每次操作后,si、di递减。

cld指令:将df置0。
std指令:将df置1。


6.1.movsb指令

si和di递增1或递减1。

es*16+di = ds*16+si
df=0: si=si+1   inc si
      di=di+1   inc di
df=1: si=si-1   dec si
      di=di-1   dec di

6.2.movsw指令

si和di递增2或递减2。
movsb和movsw和rep配合。

rep movsb         rep movsw
(1)s:movsb          s: movsw
     loop s            loop s

7.pushf和popf指令

pushf:将标志位全部压栈。
popf: 将标志位全部弹出栈。

pushf和popf为直接访问标志位提供了一种方法。

标志寄存器

标签:upload   技术   指令   工作   简介   方法   依据   递增   str   

原文地址:https://www.cnblogs.com/coolcpp/p/flag-register.html

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