汇编语言读书笔记(11.标志寄存器)

汇编语言(第三版,王爽)读书笔记

标志寄存器

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

  1. 用来储存相关指令的某些执行结果
  2. 用来为cpu执行相关指令提供行为依据
  3. 用来控制cpu的相关工作方式
    这些寄存器在8086cpu中被称为标志寄存器(flag)。标志寄存器有16位,其中储存的信息通常被称为程序状态字(PSW)
    标志寄存器按位起作用,每一位都有专门的含义
1514131211109876543210
OFDFIFTFSFZFAFPFCF

flag中的1,3,5,12,13,14,15位在8086cpu中没有使用

ZF标志

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

PF标志

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

SF标志

符号标志位,它记录相关指令执行后,其结果是否为负。如果为负,sf=1;如果非负,sf=0

CF标志

进位标志位,在进行无符号数运算的时候,它记录了运算结果的最高有效位向更高位的进位值,或借位值。

OF标志

溢出标志位,有符号数运算溢出的记录

adc指令

adc是带进位加法指令,它利用了cf位上记录的进位值。
指令格式:adc 操作对象1,操作对象2
功能:操作对象1=操作对象1+操作对象2+CF
比如指令 adc ax,bx 实现的功能是:(ax)=(ax)+(bx)+CF
意义:在执行adc指令的时候加上cf的值的含义,是由adc指令前面的指令决定的(如果前面的指令是sub那么cf就是借位值,如果是add就是进位值),adc和add指令配合就可以对更大的数据(大于16位)进行加法运算

sbb指令

sbb是带借位减法指令,利用了cf上记录的借位值。
sbb和adc是基于同样的思想设计的两条指令。

cmp指令

cmp是比较指令,cmp的功能相当于减法指令,只是不保存结果。cmp指令执行后,将对标志寄存器产生影响。
指令格式:cmp 操作对象1,操作对象2
功能:计算操作对象1-操作对象2但不保存结果,仅根据结果对标志寄存器进行设置
cmp ax,bx
如果(ax)>(bx) 则(ax)-(bx)既不必借位,结果也不为0,所以cf=0且zf=0
如果(ax)≤(bx) 则(ax)-(bx)既可能借位,结果也可能0,所以cf=1或zf=1

检测比较结果的条件转移指令

“转移”指的是它能够修改ip,而“条件”指的是它可以根据某种条件决定是否修改ip
jcxz就是一个条件转移指令,除了jcxz之外,cpu还提供了其他条件转移指令:

指令含义检测的相关标志位
je等于则转移zf=1
jne不等于则转移zf=0
jb低于则转移cf=1
jnb不低于则转移cf=0
ja高于则转移cf=0且zf=0
jna不高于则转移cf=1或zf=1

DF标志和串传送指令

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

串传送指令:
格式:movsb
功能:

  1. ((es)* 16+(di))=((ds)* 16+(si))
  2. 如果df=0,则(si)=(si)+1,(di)=(di)+1
  3. 如果df=1,则(si)=(si)- 1,(di)=(di)- 1

pushf和popf

pushf的功能是将标志寄存器的值压入栈中,popf是从栈中弹出数据,送入标志寄存器

标志寄存器在debug中

在debug中我们可以看到:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值