汇编语言基本概念(续9)

前面学习了通用寄存器和段寄存器,这些寄存器设计在很多种类架构机器中都是类似的,可能名字不一样,但是它们的功能都是存放数据供ALU使用。还有一种寄存器叫标志寄存器,它不是干这活的,它是一个监工。它是专门用来对指令的处理结果进行记录分析的。这些分析反映在这个寄存器的特定位上,这些特定位是按二进制进行分配的。因此,这些特定位的不同值反映出前面指令处理的结果。因此,通过学习这些特定位,在编程时可以通过判断这些特定位信息更好的控制程序运行。下面就仔细看一下8086CPU的标志寄存器都有哪些特殊位。目前只用到9个位,其它7个没用到。

image

学习这几个标志位,有些比较难以理解,但是大部分都比较容易理解。我们知道计算机中通常用补码来表示有符号数据,计算机中的数据,通常是从现实意义上去理解的,对计算机上只知道一个字节有8位,每个位上是0或者1。至于一个字节合起来表示什么意义,这全靠开发编程的人去对应。也就是说用一个8位来表示一个十进制数,可以看成是有符号位的数据,也可以看成无符号的另个一个数据。比喻说00000001B,可以看成是无符号数据1,也可以认为是+1,同样,10000001B可以看成是无符号数129,也可以看成成有符号数-127。正因为计算机并不进行无符号与有符号区分,一切区分全都取决于我们如何看特这些数据。我们研究标志位时,也是这样,所谓标志位就是用来标记一些特殊含义的。我们前面也学习了一些常用的8086CPU的指令,这些指令有些是影响标志位,有些是不影响的。通常如一些计算类如add sub,div inc or and 等,还有一些如pop, mov,push是不影响标志位。因此通过这些标志位我们可以预测到一些信息。我们按照从右到左的顺序进行研究。

【1】CF标志 进位标志,适用于无符号运算,用于记录运算结果的最高有效位向更高位的进位值或者借位值。比喻说两个无符号数相加,结果超过了8位存储,需要进位。这个进位在8086中在前面寄存器中是丢弃的,但是保留在标志寄存器CF位。如下图所示,98h+98h=130H显然是超过了8位,1保留在CF上。

image

同理减法也是一样,如下图所示。

image

从上面过程我们可以看出,为什么我们这里说这个数是无符号数,因为当我们限定这个数据是无符号数时,我们可以通过CF位来看出两个数据的大小。

【2】PF标志 奇偶标志位,不分有符号与无符号数。记录相关指令执行后,其结果的所有位中1的个数是否是偶数,如果是,则pf=1,否则为0

image

【3】ZF标志,零标志位,记录相关指令执行后,其结果是否为0,如果为0,则zf=1,如果结果不为0,则zf=0.在计算机中1表示逻辑真,所以当结果为0时zf=1表示“结果是0”。

image

【4】SF标志 符号标志位,适用于符号数,记录相关指令执行后,结果是否为负,如果为负则sf=1,如果非负则sf=0。因此,SF标志是CPU对有符号数运算结果的一种记录,它记录数据的正负,如果把数据当作无符号数计算,则SF的值没有什么意义。比喻说,10000010B无符号数表示130,有符号数表示-126。 10000001B无符号数表示129,有符号表示-127。因此按有符号数据计算,会出现正值与负值。如下图:

image

【5】DF标志  方向标志位,这个方向指得是递增还递减,并且只能用在串指令中,控制每次操作的si、di的增减,并且也是这几个标志位中唯一个可以通过指令设置的标志位。因此学习这个标志位还需要学习如下几个指令:

1)movsb 是将ds:si指向的内存单元中的字节送入es:di中,然后根据df位置值,将si递增或递减。

image

2)movsw 是将ds:si指向的内存单元中的字送入es:di中,然后根据df位置值,将si和di递增或递减2.

3)rep movsb 或 rep movsw,相当于一个循环,因为前面是一个步骤,也就是单步,使用rep,根据cx的值,重复执行后面的串传送指令。

4)cld std指令。 cld指令是将标志寄存器的df位置设置0 std是设置1。

image

image

【6】OF标志 溢出标志位,一般情况下,OF记录了有符号数运算的结果是否发生了溢出,如果发生溢出,则OF=1,如果没有OF=0,同前CF区别就是CF是对无符号数,OF是有符号数据。溢出是相对于进位和借位来说。进行有符号计算时,运算结果超过了机器能表达的范围,则溢出。

image

有符号数因为前面还有一个符号位,因此默认范围会少一位,因此与CF看第N位不同,OF看的是第N-1位。因此,对计算机来说,实际上它并没有意识到指令中的数据是无符号还是有符号的。因此,CF和OF都是要根据前面所说的来进行更新的,CF与OF之间是没有直接关系的。如下所示:

image

你可能感兴趣的:(职场,寄存器,休闲,通用)