标志寄存器

CPU内部的寄存器中,有一种特殊的寄存器具有以下3中作用:

  • 用来存储相关指令的某些执行结果
  • 用来为CPU执行的相关指令提供行为依据
  • 用来控制CPU的相关工作方式
    8086CPU的标志寄存器(以下简称flag)有16位,其中存储的信息通常被称为程序状态字(PSW)。
    flag和其他寄存器不一样,其他寄存器都是整个寄存器具有一个含义。而flag寄存器是按位起作用的,每一位有专门的含义,记录特定的信息

ZF标志

flag的第6位是ZF,零标志位。它记录相关指令执行后,其结果是否为0。如果结果为0,那么zf=1;结果不为0,zf=0。

mov ax,1
sub ax,1

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

影响标志寄存器的指令大都是运算指令(进行逻辑或算术运算);没有影响的大都是传送指令。

PF标志

flag的第2位是PF,奇偶标志位。它记录相关指令执行后,其结果的所有bit位中1的个数是否为偶数。若是,pf=1,如果为奇数,那么pf=0

mov al,1        ;0001H
add al,10       ;1010H

执行后,结果为00001011B,其中有3个1,则pf=0

SF标志

flag的第7位是SF,符号标志位。它记录相关指令执行后,其结果是否为负。如果结果为负,sf=1;结果非负,sf=0。
SF标志是CPU对有符号数运算结果的一种记录,它记录数据的正负。在我们将数据当作有符号数来运算的时候,可以通过它来得知结果的正负。如果我们将数据当作无符号数来运算,SF的值就没意义,虽然相关的指令影响了它的值。

mov al,10000001B
add al,1

执行后,结果为10000010B,sf=1,表示:如果指令进行的是有符号运算,那么结果为负。

CF标志

flag的第0位是CF,进位标志位。一般情况下,在进行无符号运算的时候,它记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值。
当两个数相加的时候,有可能产生从最高有效位向更高有效位的进位。CPU在运算的时候,并不丢弃这个进位值,而是记录在CF位上。

mov al,98H
add al,al

执行后:(al) = 30H,CF = 1,CF记录了从最高有效位向更高有效位的进位值

mov al,97H
sub al,98H

执行后,(al) = FFH,CF = 1,CF记录了向更高位的借位值

OF标志

flag的第11位是OF,溢出标志位。OF记录了有符号运算的结果是否发生了溢出。如果发生了溢出,OF = 1,没有发生溢出,OF = 0。
在进行有符号数运算的时候,如结果超过了机器所能表示的范围,称为溢出。
CF和OF的区别:CF是对无符号数运算有意义的标志位,而OF是对有符号数运算有意义的标志位。

mov al,98       ;01100010B
add al,99       ;01100011B

指令执行后,CF=0,OF=1
对于无符号数运算,98+99没有进位,CF=0
对于有符号数运算,98+99发生溢出,OF=1

adc指令

adc是带进位加法指令,它利用了CF位上记录的进位值。
指令格式:adc ax,bx
功能:(ax) = (ax) + (bx) + CF

mov ax,2
mov bx,1
sub bx,ax

下面的指令和add ax,bx具有相同的结果:

add al,bl
adc ah,bh

CPU提供adc指令的目的,就是用来进行加法的第二步运算的。adc指令和add指令相配合就可以对更大的数据进行加法运算。

sbb指令

sbb是带借位减法指令,它利用了CF位上记录的借位值。
指令格式:sbb ax,bx
功能:(ax) = (ax) - (bx) - CF

计算003E1000H - 00202000H

mov bx,1000H
mov ax,003EH
sub bx,2000H
sbb ax,0020H

cmp指令

cmp是比较指令,其功能相当于减法指令,但是不保存结果。cmp指令执行后,对标志寄存器产生影响。 其他指令通过识别这些被影响的标志寄存器位来得知比较结果。
指令格式:cmp ax,ax
功能:(ax) - (ax)

结果为0,但并不在ax中保存,仅影响flag的相关位。
指令执行后:zf=1,pf=1,sf=0,cf=0,of=0

检测比较结果的条件转移指令
所有条件转移指令的转移位移都是[-128,127]

  • 下面是常用的根据无符号数的比较结果进行转移的条件转移指令
    指令––含义––检测的相关标志位
    je------等于则转移----zf=1
    jne----不等于才转移--zf=0
    jb------低于则转移----cf=1
    jnb----不低于则转移--cf=0
    ja------高于才转移----cf=0且zf=0
    jna----不高于才转移--cf=1或zf=1

实现如下功能:
如果(ah)=(bh)则(ah) = (ah)+(ah),否则(ah)=(ah)+(bh)

    cmp ah,bh
    je s
    add ah,bh
    jmp short ok
s:  add ah,ah
ok: :

DF标志和串传送指令

flag的第10位是DF,方向标志位。
在串处理指令中,控制每次操作后si、di的增减。
– df=0 每次操作后si、di递增
– df=1 每次操作后si、di递减

串传送指令

  • movsb
    格式:movsb
    功能:将ds:si指向的内存单元中的字节送入es:di中,
    执行movsb指令相当于进行下面的几步操作
  1. ((es)*16+(di)) = ((di)*16+(si))
  2. 如果df=0则:
    (si)=(si)+1
    (di)=(di)+1
    如果df=1则:
    (si)=(si)-1
    (di)=(di)-1
  • movsw
    格式:movsw
    功能:将ds:si指向的内存单元中的字送入es:di中,
    执行movsb指令相当于进行下面的几步操作
    rep
    一般来说,movsb和movsw都和rep配合使用,格式如下:
    rep movsb

用汇编语法来描述就是:
s: movsb
loop s

可见,rep 的作用是根据cx的值,重复执行后面的串传送指令。

对df位进行设置

cld指令:将标志寄存器的df位置0
std指令:将标志寄存器的df位置1

pushf和popf

pushf的功能是将标志寄存器的值压栈,popf是从栈中弹出数据,送入标志寄存器中。
为直接访问标志寄存器提供了一种方法。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容