您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 《汇编语言》讲稿_11
《汇编语言》课件王爽著-清华大学出版社制作工具:MicrosoftPowerPoint2003本课件由汇编网()制作提供本课件由汇编网()制作提供第11章标志寄存器11.1ZF标志11.2PF标志11.3SF标志11.4CF标志11.5OF标志11.6adc指令11.7sbb指令11.8cmp指令11.9检测比较结果的条件转移指令11.10DF标志和串传送指令11.11pushf和popf11.12标志寄存器在Debug中的表示本课件由汇编网()制作提供引言8086CPU的标志寄存器有16位,其中存储的信息通常被称为程序状态字(PSW)。我们己经使用过8086CPU的ax、bx、cx、dx、si、di、bp、sp、ip、cs、ss、ds、es等13个寄存器了。本章中的标志寄存器(以下简称为flag)是我们要学习的最后一个寄存器。本课件由汇编网()制作提供引言flag和其他寄存器不一样,其他寄存器是用来存放数据的,都是整个寄存器具有一个含义。而flag寄存器是按位起作用的,也就是说,它的每一位都有专门的含义,记录特定的信息。本课件由汇编网()制作提供引言8086CPU的flag寄存器的结构:flag的1、3、5、12、13、14、15位在8086CPU中没有使用,不具有任何含义。而0、2、4、6、7、8、9、10、11位都具有特殊的含义。本课件由汇编网()制作提供引言在这一章中,我们学习标志寄存器中的CF、PF、ZF、SF、OF、DF标志位,和一些与其相关的典型指令。本课件由汇编网()制作提供11.1ZF标志flag的第6位是ZF,零标志位。它记录相关指令执行后,结果为0,ZF=1结果不为0,ZF=0示例本课件由汇编网()制作提供11.1ZF标志比如:movax,1subax,1指令执行后,结果为0,则ZF=1。movax,2subax,1指令执行后,结果为1,则ZF=0。本课件由汇编网()制作提供11.1ZF标志对于ZF的值,我们可以这样来看,ZF标记相关指令的计算结果是否为0,如果为0,则在ZF要记录下“是0”这样的肯定信息。在计算机中1表示逻辑真,表示肯定,所以当结果为0的时候ZF=1,表示“结果是0”。如果结果不为0,则ZF要记录下“不是0”这样的否定信息。在计算机中0表示逻辑假,表示否定,所以当结果不为0的时候ZF=0,表示“结果不是0”。示例本课件由汇编网()制作提供11.1ZF标志示例指令:movax,1andax,0执行后,结果为0,则ZF=1,表示“结果是0”。指令:movax,1orax,0执行后,结果不为0,则ZF=0,表示“结果非0”。本课件由汇编网()制作提供11.1ZF标志注意:在8086CPU的指令集中,有的指令的执行是影响标志寄存器的,比如:add、sub、mul、div、inc、or、and等,它们大都是运算指令(进行逻辑或算术运算);有的指令的执行对标志寄存器没有影响,比如:mov、push、pop等,它们大都是传送指令。本课件由汇编网()制作提供11.1ZF标志注意:我们在使用一条指令的时候,要注意这条指令的全部功能,其中包括,执行结果对标记寄存器的哪些标志位造成影响。本课件由汇编网()制作提供11.2PF标志flag的第2位是PF,奇偶标志位。它记录指令执行后,结果的所有二进制位中1的个数:为偶数,PF=1;为奇数,PF=0。示例本课件由汇编网()制作提供11.2PF标志示例指令:moval,1addal,10执行后,结果为00001011B,其中有3(奇数)个1,则PF=0;指令:moval,1oral,10执行后,结果为00000011B,其中有2(偶数)个1,则PF=1;本课件由汇编网()制作提供11.3SF标志flag的第7位是SF,符号标志位。它记录指令执行后,结果为负,SF=1;结果为正,SF=0。有符号数与补码示例moval,10000001Baddal,1结果:(al)=10000010B本课件由汇编网()制作提供11.3SF标志我们可以将add指令进行的运算当作无符号数的运算,那么add指令相当于计算129+1,结果为130(10000010B);也可以将add指令进行的运算当作有符号数的运算,那么add指令相当于计算-127+1,结果为-126(10000010B)。本课件由汇编网()制作提供11.3SF标志不管我们如何看待,CPU在执行add等指令的时候,就已经包含了两种含义,也将得到用同一种信息来记录的两种结果。关键在于我们的程序需要哪一种结果。本课件由汇编网()制作提供11.3SF标志SF标志,就是CPU对有符号数运算结果的一种记录,它记录数据的正负。在我们将数据当作有符号数来运算的时候,可以通过它来得知结果的正负。如果我们将数据当作无符号数来运算,SF的值则没有意义,虽然相关的指令影响了它的值。本课件由汇编网()制作提供11.3SF标志这也就是说,CPU在执行add等指令时,是必然要影响到SF标志位的值的。至于我们需不需要这种影响,那就看我们如何看待指令所进行的运算了。本课件由汇编网()制作提供11.3SF标志比如:moval,10000001Baddal,1执行后,结果为10000010B,SF=1,表示:如果指令进行的是有符号数运算,那么结果为负;本课件由汇编网()制作提供11.3SF标志再比如:moval,10000001Baddal,01111111B执行后,结果为0,SF=0,表示:如果指令进行的是有符号数运算,那么结果为非负。本课件由汇编网()制作提供11.3SF标志某此指令将影响标志寄存器中的多个标志位,这些被影响的标记位比较全面地记录了指令的执行结果,为相关的处理提供了所需的依据。比如指令subal,al执行后,ZF、PF、SF等标志位都要受到影响,它们分别为:1、1、0。本课件由汇编网()制作提供特别提示检测点11.1(p205)没有完成此检测点,请不要向下进行。本课件由汇编网()制作提供11.4CF标志flag的第0位是CF,进位标志位。一般情况下,在进行无符号数运算的时候,它记录了运算结果的最高有效位向更高位的进位值,或从更高位的借位值。本课件由汇编网()制作提供11.4CF标志对于位数为N的无符号数来说,其对应的二进制信息的最高位,即第N-1位,的最高有效位,而假想存在的第N位,就是相对于最高有效位的更高位。本课件由汇编网()制作提供11.4CF标志我们知道,当两个数据相加的时候,有可能产生从最高有效位向更高位的进位。比如,两个8位数据:98H+98H,将产生进位。由于这个进位值在8位数中无法保存,我们在前面的课程中,就只是简单地说这个进位值丢失了。本课件由汇编网()制作提供11.4CF标志其实CPU在运算的时候,并不丢弃这个进位值,而是记录在一个特殊的寄存器的某一位上。8086CPU就用flag的CF位来记录这个进位值。本课件由汇编网()制作提供11.4CF标志比如,下面的指令:moval,98Haddal,al;执行后:(al)=30H,CF=1,;CF记录了最高有效位向更高位的进位值addal,al;执行后:(al)=30H,CF=1,;CF记录了最高有效位向更高位的进位值本课件由汇编网()制作提供11.4CF标志而当两个数据做减法的时候,有可能向更高位借位。比如,两个8位数据:97H-98H,将产生借位,借位后,相当于计算197H-98H。而flag的CF位也可以用来记录这个借位值。本课件由汇编网()制作提供11.4CF标志比如,下面的指令:moval,98Haddal,al;执行后:(al)=30H,CF=1,;CF记录了最高有效位向更高位的进位值addal,al;执行后:(al)=30H,CF=1,;CF记录了最高有效位向更高位的进位值本课件由汇编网()制作提供11.5OF标志我们先来谈谈溢出的问题。在进行有符号数运算的时候,如结果超过了机器所能表示的范围称为溢出。那么,什么是机器所能表示的范围呢?本课件由汇编网()制作提供11.5OF标志比如说,指令运算的结果用8位寄存器或内存单元来存放。比如:addal,3,那么对于8位的有符号数据,机器所能表示的范围就是-128~127。同理,对于16位有符号数,机器所能表示的范围是-32768~32767。本课件由汇编网()制作提供11.5OF标志如果运算结果超出了机器所能表达的范围,将产生溢出。注意,这里所讲的溢出,只是对有符号数运算而言。下面我们看两个溢出的例子。本课件由汇编网()制作提供11.5OF标志示例指令moval,98addal,99执行后将产生溢出。因为addal,99进行的有符号数运算是:(al)=(al)+99=98+99=197而结果197超出了机器所能表示的8位有符号数的范围:-128~127。本课件由汇编网()制作提供11.5OF标志示例指令:moval,0F0H;0F0H,为有符号数-16的补码addal,88H;88H,为有符号数-120的补码执行后将产生溢出。因为addal,88H进行的有符号数运算是:(al)=(al)+(-120)=(-16)+(-120)=-136而结果-136超出了机器所能表示的8位有符号数的范围:-128~127。本课件由汇编网()制作提供11.5OF标志如果在进行有符号数运算时发生溢出,那么运算的结果将不正确。就上面的两个例子来说:moval,98addal,99add指令运算的结果是(al)=0C5H,因为进行的是有符号数运算,所以al中存储的是有符号数,而0C5H是有符号数-59的补码。本课件由汇编网()制作提供11.5OF标志如果我们用add指令进行的是有符号数运算,则98+99=-59这样的结果让人无法接受。造成这种情况的原因,就是实际的结果197,作为一个有符号数,在8位寄存器al中存放不下。本课件由汇编网()制作提供11.5OF标志同样,对于:moval,0F0H;0F0H,为有符号数-16的补码addal,88H;88H,为有符号数-120的补码add指令运算的结果是(al)=78H,因为进行的是有符号数运算,所以al中存储的是有符号数,而78H表示有符号数120。本课件由汇编网()制作提供11.5OF标志如果我们用add指令进行的是有符号数运算,则-16-120=120这样的结果显然不正确。造成这种情况的原因,就是实际的结果-136,作为一个有符号数,在8位寄存器al中存放不下。本课件由汇编网()制作提供11.5OF标志由于在
本文标题:《汇编语言》讲稿_11
链接地址:https://www.777doc.com/doc-610803 .html