王爽老师汇编语言第四版十一章标志寄存器11.6-11.n

11.6 adc指令

adc 代位加法指令,利用了CF记录的进位值

adc ax,bx->(ax)+(bx)+CF

mov ax,
mov bx,1
sub bx,ax
adc ax,1

结果ax=4

11.7 sbb指令

abb是带借位减法指令

abb ax,bx ->(ax)=(ax)-(bx)-CF

类似于adc指令

11.8 cmp指令

cmp是比较指令,相当于减法,只是不保存结果,执行结束后将对标志寄存器产生影响。其他指令通过标志寄存器得知比较结果。

cmp 操作对象1,操作对象2

功能:对1-对2

对于无符号

对于有符号

以下图片来自王爽老师汇编语言第四版:

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

“转移"指的是他能够修改IP

条件指的是它可以根据某种条件决定是否修改IP

jcxz就是一种条件转移指令

所有条件转移指令转移的范围都是[-128,127]

大多数转移指令都检测标志寄存器的相关标志位,他们通常和cmp结合使用,好比call

和ret一样的关系

一下图片来自王爽老师汇编语言第四版若有侵权联系删除

助记:

有符号的话只是检测结果不同而已,实际上含义是不变的。

在写这类判断代码的时候往往用反向思维比较便捷

另外,判断转移指指令仅仅只是对标志寄存器相应位进行判断。如果通过其他指令改变寄存器也可以达到指令的转移。

11.10 DF标志寄和串传送指令

flag的第十位,DF,方向标志位。在串处理指令中,控制每次操作后的si,di的增减

df=0 每次操作后si,di递增

df=1 每次操作后si,di递减

串传送指令:movsb

相当于mov es:[di],byte ptr ds:[si]//cpu不支持哈只是一种描述

其实就是将ds:[si]中的数据传送到es:[di]中

然后:

根据DF中的值

0+ 1-

inc di/dec di

inc si/dic si

还可以进行字的传送

命令如下

movsw

它的功能是将ds:[si]中的字数据传送到es:[di]中

如果df=0

然后add si,2

add di,2

如果df=1

sub si,2

sub di,2

movsb/movsw通常和rep结合使用,格式如下

rep movsb
rep movsw

用汇编相当于

mov cx,(要传送的次数)
s:movsb/w
  loop s
 

那么我们应该怎样决定它是向前传送还是向后传送呢?

伟大的CPU制作者给我们发明了两个指令:

cld指令:令df=0,也就是说执行完命令后让si和di加

std指令:令df=1,也就是说执行完命令后让si和di减

11.11 pushf和popf

这俩指令的操作是让flag标志寄存器中的值入栈和出栈

11.12标志寄存器在debug中的位置

dosbox中标志寄存器中位置以及含义

标志

OF(溢出标志位)

DF(方向标志位)

SF(符号标志为)

ZF(零标志位)

PF(奇偶标志位)

CF(进位标志位)

值为1(真)

OV(over flow 溢出)

DN(down减)

NG(negative 复数)

ZR(zero 零)

PE(plus 加起来 even 偶数)

CY (carry yes 有进位)

值为0(假)

NV(not over 没有溢出)

UP(up加)

PL(plus 正数)

NZ(not zero 非零)

PO(plus 加起来 odd 奇数)

NC(not varry 没有进位)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

y6y6y666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值