汇编语言随笔(3) 您所在的位置:网站首页 8086汇编指令标志位变化的含义 汇编语言随笔(3)

汇编语言随笔(3)

2024-03-05 07:27| 来源: 网络整理| 查看: 265

标志寄存器

      标志寄存器通常具有以下三种作用:       1,用来存储相关指令的某些执行效果       2,用来为CPU执行相关指令提供行为依据       3,用来控制CPU的相关工作方式       8086CPU的flag寄存器结构如下图所示:

1514131211109876543210OFDFIFTFSFZFAFPFCF

      在8086的指令集中,运算指令的执行如:add、sub、mul、div、inc、or、and等都会影响标志寄存器;而传送指令的执行如:mov、push、pop都不会影响标志寄存器。       1,ZF标志       flag的第6位是ZF,零标志位。它记录了相关指令执行后,其结果是否为0,如果为0,那么ZF=1,否则,ZF=0。比如当:sub ax,ax执行后,结果为0,就会置ZF为1。       2,PF标志       flag的第2位是PF,奇偶标志位。它记录了相关指令执行后,其结果的所有bit位中1的个数是否为偶数。如果1的个数为偶数,PF=1,否则PF=0。如:sub ax,ax执行后,结果一共有0个1,0为偶数,因此会置ZF为1。       3,SF标志       flag的第7位是SF,符号标志位。它记录了相关指令执行后,其结果是否为负,如果为负,那么SF=1,否则,ZF=0。它会将操作数看作为有符号数(补码表示)的运算来记录结果的正负。如:mov al,10000001B   add al,1 执行后,结果为10000010B,SF为1。而:mov al,10000001B   add al,01111111B 执行后,-127+127=0,结果为0,它并不是一个负数,故SF为0。       4,CF标志位       flag的第0位是CF,进位标志位。一般情况下,在进行无符号数运算时,它记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值。       如:mov al,98H   add al,al   add al,al中第二条指令执行结果为98H+98H=130H,所以(al)=30H,CF=1,CF记录了从最高有效位向更高位的进位值。第三条指令执行结果为30H+30H=60H,所以(al)=60H,CF=0。       而当两个数据做减法时,有可能向更高位借位。       如:两个8位数据97H和98H做减法时,将产生借位,借位(置CF为1)后,97H-98H等价于197H-98H。       5,OF标志位       flag的第11位是OF,溢出标志位。一般情况下,OF记录了有符号数运算的结果是否发生了溢出,如果发生了溢出,OF=1,否则OF=0。       在进行有符号数运算的时候,如果结果超过了机器所能表示的范围称为溢出。8位有符号数补码的表示范围位-128-127。       对于 mov al,98   add al,99执行后,无符号数的结果为197,所以它不产生进位;但作为有符号数的运算,结果为197,它不在8位有符号数的表示范围内,故产生了溢出,其实它是-59的补码。所以OF=1,CF=0。       对于 mov al,0F0H   add al,88H执行后,无符号数的结果为178H(376D),它大于255D,所以它产生进位;但作为有符号数的运算,结果为-136,它不在8位有符号数的表示范围内,(且78H为正数,两个负数相加的结果得到了一个正数)故产生了溢出。所以OF=1,CF=1。       下面指令执行后,ZF、PF、SF、CF、OF标志位的值的变化情况。

sub al,alzf=1pf=1sf=0cf=0of=0结果为0,0个1,未进位,正数,未溢出mov al,10Hzf=1pf=1sf=0cf=0of=0-add al,90Hzf=0pf=1sf=1cf=0of=0结果非0,有2个1,未进位,有符号数结果为负,未溢出mov al,80Hzf=0pf=1sf=1cf=0of=0-add al,80Hzf=1pf=1sf=0cf=1of=1结果为0,0个1,正数,产生进位,两负数相加结果为0,(十进制结果-256(bx),则(ax)-(bx)不会产生借位,且不为0,所以:cf=0且zf=0;       若(ax)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有