王爽 《汇编语言》 读书笔记 十一 标志寄存器

第十一章 标志寄存器


标志寄存器

1)用来存储相关指令的某些执行结果

2)用来为cpu执行的相关指令提供行为依据

3)用来控制cpu的相关工作方式


标志寄存器flag存储程序状态字(PSW)


8086点flag寄存器各位有不同的含义

CF,PF,AF,ZF,SF,TF,IF,DF,OF


11.1 ZF标志


flag的第六位是ZF,0标志位。记录相关指令执行后,其结果是否为0.如果为0则ZF = 1

例如

mov ax, 1

sub ax, 1

执行以后结果为0 zf = 1


mov ax, 2

sub ax, 1

执行后结果不为0,zf = 0

有些指令会影响zf的比如add, sub, mil, div, inc, or, and等运算指令

mov, push, pop对ZF没有影响不会修改其值,保留原值


11.2 PF标志

奇偶标志位,表示进行相关运算以后,其结果所含的bit为重1的个数是否为偶数,

如果1的个数为偶数则PF=1,如果为奇数,则PF=0


mov al, 1

add al, 10

执行结果为00001011B  含有奇数个1  PF = 0


mov al, 1

or al, 2

执行结果为00000011B 含有偶数个1 则PF = 1


11.3 SF标志

表明相关指令执行后,结果是否为负。如果为负sf=1,如果非负,sf=0

有些指令会影响flag的多个标记为

例如sub al, al

ZF, PF, SF都要收到影响  分别是 1, 1, 0


11.4 CF标志

进行无符号运算的时候,最高位是否进位,或者从更高位借位。

mov al, 98h

add al, all   执行后  al=30h, cf=1,cf记录了从最高有效位向更高位的进位值。

add al, al   执行后 al = 60h, cf = 0

当两个数执行减法的时候,有可能向更高位借位。比如,两个8位数据:97h - 98h CF也记录了这个借位值。

mov al, 97h

sub al, 98h   ; 执行后al = ffh, CF = 1 ,CF记录了向更高位借位值

sub al, al    ;执行后al=0, cf=0


11.5 OF标志

记录了有符号运算的结果是否发生了溢出。如果发生了溢出则OF=1 如果没有OF = 0


CF是对无符号数有意义的标志位,而OF是对有符号数有意义的标志位(判断两个操作数的符号,和结果的符号。如果两个操作数符号不同则OF必位0.如果结果的符号和两个操作数的符号不同则结果必为1)

SF记录结果的符号


11.6 adc指令

带进位的加法指令,利用了CF位上记录的进位值(可以扩展成32位,64位加法使用)

指令格式  adc 操作对象1, 操作对象2

功能: 操作对象1 = 操作对象1 + 操作对象2 + CF

比如 adc ax, bx     (ax) = (ax) + (bx) + CF

mov ax, 2

mov bx, 1

sub bx, ax  ;  bx = 0ffh, cf = 1

add ax, 1 ;  ax = 2 + 1 + 1(CF) = 4


mov ax, 1

add ax, ax ; ax = 2, cf = 0

add ax, 3 ; ax = 5 ,cf = 0


mov al, 98H

add al, al ; al = 30h, cf = 1, of = 1

add al, 3 ; al = 30h+3+1 = 34h


以下指令具有和add ax, bx相同的效果

add al, bl

add ah, bh


例如计算 1ef000h + 201000h 结果放在ax(高16bit)和bx(低16bit)中

		mov ax, 001eh
		mov bx, 0f000h
		add bx, 1000h
		adc ax, 0020h

adc也可能产生进位CF

计算 1E F000 1000 H  + 20 10000 1EF0H  结果放在ax(最高16), bx(次高16), cx(低16位)

		mov ax, 001eh
		mov bx, 0f000h
		mov cx, 1000h
		add cx, 1ef0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值