汇编语言白晓明.ppt
1,第2章 寻址方式和指令(续),汇编语言程序设计,2,2.3 80X86的几类基本指令,2.3.1 传送指令2.3.2 加减法指令2.3.3 逻辑运算和移位指令2.3.4 处理机控制类指令,3,本节教学要求,重点掌握常用指令功能及应用常用传送指令加减法指令逻辑运算和移位指令处理机控制类指令,4,8086指令系统概述,Intel 8086指令系统共有117条基本指令,可分成6个功能组 数据传送类指令 算术运算类指令 位操作类指令 串操作类指令 控制转移类指令 处理机控制类指令,如何学习,5,学习指令的注意事项,指令的功能该指令能够实现何种操作。通常指令助记符就是指令功能的英文单词或其缩写形式指令支持的寻址方式该指令中的操作数可以采用何种寻址方式指令对标志的影响该指令执行后是否对各个标志位有影响,以及如何影响其他方面该指令其他需要特别注意的地方,如指令执行时的约定设置、必须预置的参数、隐含使用的寄存器等,6,2.3.1 数据传送类指令,数据传送是计算机中最基本、最重要的一种操作传送指令也是最常使用的一类指令传送指令把数据从一个位置传送到另一个位置除标志寄存器传送指令外,均不影响标志位重点掌握MOV、XCHG、XLAT、PUSH、POP、LEA,7,一、通用数据传送指令,提供方便灵活的通用传送操作有3条指令MOVXCHGXLAT,MOV,XCHG,XLAT,8,1.传送指令MOV(move),把一个字节或字的操作数从源地址传送至目的地址,MOV reg/mem,imm;立即数送寄存器或主存,MOV,例题2.3-1,MOV reg/mem/seg,reg;寄存器送(段)寄存器或主存,例题2.3-2,MOV reg/seg,mem;主存送(段)寄存器,例题2.3-3,MOV reg/mem,seg;段寄存器送寄存器或主存,例题2.3-4,9,例2.3-1 立即数传送,mov al,4;al4,字节传送mov cx,0ffh;cx00ffh,字传送mov si,200h;si0200h,字传送mov byte ptr si,0ah;byte ptr 说明是字节操作mov word ptr si+2,0bh;word ptr 说明是字操作,注意立即数是字节量还是字量 明确指令是字节操作还是字操作,MOV,10,例2.3-2 寄存器传送,mov ax,bx;axbx,字传送mov ah,al;ahal,字节传送mov ds,ax;dsax,字传送mov bx,al;bxal,字节传送,MOV,11,例2.3-3 存储器传送,mov al,bxmov dx,bp;dxss:bpmov es,si;esds:si,不存在存储器向存储器的传送指令,MOV,12,例2.3-4 段寄存器传送,mov si,dsmov ax,es;axesmov ds,ax;dsaxes,对段寄存器的操作有一些限制,MOV,13,MOV指令传送功能,MOV也并非任意传送,14,非法传送种种,两个操作数的类型不一致例如源操作数是字节,而目的操作数是字;或相反两个操作数不能都是存储器传送指令很灵活,但主存之间的直接传送却不允许段寄存器的操作有一些限制段寄存器属专用寄存器,对他们的操作能力有限,示例,示例,示例,15,两个操作数的类型要一致,绝大多数双操作数指令,除非特别说明,目的操作数与源操作数必须类型一致,否则为非法指令MOV AL,050AH;非法指令:050Ah为字,而AL为字节寄存器有明确的字节或字类型,有寄存器参与的指令其操作数类型就是寄存器的类型对于存储器单元与立即数同时作为操作数的情况,必须显式指明;byte ptr指示字节类型,word ptr指示字类型,16,两个操作数不能都是存储器,8086指令系统不允许两个操作数都是存储单元(除串操作指令),要实现这种传送,可通过寄存器间接实现mov ax,buffer1;axbuffer1(将buffer1内容送ax)mov buffer2,ax;buffer2ax;这里buffer1和buffer2是两个字变量;实际表示直接寻址方式,17,要小心段寄存器的操作,不允许立即数传送给段寄存器MOV DS,100H;非法指令:立即数不能传送段寄存器不允许直接改变CS值MOV CS,SI;不允许使用的指令不允许段寄存器之间的直接数据传送MOV DS,ES;非法指令:不允许段寄存器间传送,18,2.交换指令XCHG(exchange),把两个地方的数据进行互换,寄存器与寄存器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据,XCHG,XCHG reg,reg/mem;reg reg/mem,例题2.3-7,例题2.3-6,19,例2.3-6 寄存器间交换,mov ax,1234h;ax=1234hmov bx,5678h;bx=5678hxchg ax,bx;ax=5678h,bx=1234hxchg ah,al;ax=7856h,XCHG,20,例2.3-7 寄存器与存储器交换,xchg ax,2000h;字交换;等同于 xchg 2000h,axxchg al,2000h;字节交换;等同于 xchg 2000h,al,XCHG,21,换码指令执行前:在主存建立一个字节量表格,内含要转换成的目的代码表格首地址存放于BX,AL存放相对表格首地址的位移量换码指令执行后:将AL寄存器的内容转换为目标代码,3.换码指令XLAT(translate),将BX指定的缓冲区中、AL指定的位移处的一个字节数据取出赋给AL,XLAT,XLAT;alds:bx+al,例题2.3-8,22,例2.3-8 代码转换,mov bx,100hmov al,03hxlat,换码指令没有显式的操作数,但使用了BX和AL;因为换码指令使用了隐含寻址方式采用默认操作数,XLAT,23,二、堆栈操作指令,堆栈是一个“后进先出FILO”(或说“先进后出FILO”)的主存区域,位于堆栈段中;SS段寄存器记录其段地址堆栈只有一个出口,即当前栈顶;用堆栈指针寄存器SP指定栈顶是地址较小的一端(低端),栈底不变,24,堆栈和队列,堆栈:按照后进先出(LIFO)的原则组织的存储器空间(栈)队列:按照先进先出(FIFO)的原则组织的存储器空间,25,堆栈的操作,堆栈只有两种基本操作:进栈和出栈,对应两条指令PUSH和POP,PUSH;进栈指令先使堆栈指针SP减2,然后把一个字操作数存入堆栈顶部,POP;出栈指令把栈顶的一个字传送至指定的目的操作数,然后堆栈指针SP加2,26,1.进栈指令PUSH,PUSH,push axpush 2000h,PUSH r16/m16/seg;SPSP2;SS:SPr16/m16/seg,27,2.出栈指令POP,pop axpop 2000h,POP r16/m16/seg;r16/m16/segSS:SP;SPSP2,POP,28,堆栈的特点,堆栈操作的单位是字,进栈和出栈只对字量字量数据从栈顶压入和弹出时,都是低地址字节送低字节,高地址字节送高字节堆栈操作遵循先进后出原则,但可用存储器寻址方式随机存取堆栈中的数据堆栈常用来临时存放数据传递参数保存和恢复寄存器,例题2.3-9,29,例2.3-9 现场保护恢复,push ax;进入子程序后push bxpush ds.pop ds;返回主程序前pop bxpop ax,30,三、标志传送指令,标志寄存器传送指令用来传送标志寄存器FLAGS的内容标志位操作指令直接对CF、DF、IF标志进行复位或置位,31,1.标志寄存器传送,标志寄存器传送指令用来传送标志寄存器FLAGS的内容,方便进行对各个标志位的直接操作有2对4条指令低8位传送:LAHF和SAHF16位传送:PUSHF和POPF,32,标志低字节进出AH指令,LAHF;AHFLAGS的低字节LAHF指令将标志寄存器的低字节送寄存器AHSF/ZF/AF/PF/CF状态标志位分别送入AH的第7/6/4/2/0位,而AH的第5/3/1位任意,SAHF;FLAGS的低字节AHSAHF将AH寄存器内容送FLAGS的低字节用AH的第7/6/4/2/0位相应设置SF/ZF/AF/PF/CF标志,33,标志寄存器进出堆栈指令,PUSHF;SPSP2;SS:SPFLAGSPUSHF指令将标志寄存器的内容压入堆栈,同时栈顶指针SP减2,POPF;FLAGSSS:SP;SPSP2POPF指令将栈顶字单元内容送标志寄存器,同时栈顶指针SP加2,例题2.3-10,34,例2.3-10 置位单步标志,pushf;保存全部标志到堆栈pop ax;从堆栈中取出全部标志or ax,0100h;设置D8=TF=1,;ax其他位不变push ax;将ax压入堆栈popf;FLAGSAX;将堆栈内容取到标志寄存器,35,2.标志位操作,标志位操作指令直接对CF、DF、IF标志进行复位或置位,常用于特定的情况对标志位进行设置的指令CLC STC CMCCLD STDCLI STI,36,用于任意设置进位标志 CLC;复位进位标志:CF0 STC;置位进位标志:CF1 CMC;求反进位标志:CFCF,串操作指令中,需要使用 CLD;复位方向标志:DF0 STD;置位方向标志:DF1,在编写中断服务程序时,需要控制可屏蔽中断的允许和禁止 CLI;复位中断标志:DF0 STI;置位中断标志:DF1,37,四、地址传送指令,地址传送指令将存储器单元的逻辑地址送至指定的寄存器有效地址传送指令 LEA指针传送指令 LDS和LES注意不是获取存储器单元的内容,38,有效地址传送指令LEA(load EA),将存储器操作数的有效地址传送至指定的16位寄存器中,例题2.3-11,LEA r16,mem;r16mem的有效地址EA,LEA,39,例2.3-11 获取有效地址,mov bx,0400hmov si,3chlea bx,bx+si+0f62h;BX0400h003ch0f62h139EH,获得主存单元的有效地址;不是物理地址,也不是该单元的内容 可以实现计算功能,LEA,40,指针传送指令,LDS r16,mem;r16mem,;DSmem+2LDS指令将主存中mem指定的字送至r16,并将mem的下一字送DS寄存器,LES r16,mem;r16mem,;ESmem+2LES指令将主存中mem指定的字送至r16,并将mem的下一字送ES寄存器,例题2.3-12,41,例2.3-12 地址指针传送,mov word ptr 3060h,0100hmov word ptr 3062h,1450hles di,3060h;es=1450h,di=0100hlds si,3060h;ds=1450h,si=0100h,mem指定主存的连续4个字节作为逻辑地址(32位的地址指针),送入DS:r16或ES:r16,42,XLAT指令,43,XCHG指令,44,44,45,2.3.2 算术运算类指令,四则运算是计算机经常进行的一种操作。算术运算指令实现二进制(和十进制)数据的四则运算请注意算术运算类指令对标志的影响掌握:ADD/ADC/INC、SUB/SBB/DEC/NEG/CMP熟悉:MUL/IMUL、DIV/IDIV理解:CBW/CWD、DAA/DAS、AAA/AAS/AAM/AAD,46,加法指令ADD,ADD指令将源与目的操作数相加,结果送到目的操作数ADD指令按状态标志的定义相应设置,ADD,ADD reg,imm/reg/mem;regregimm/reg/memADD mem,imm/reg;memmemimm/reg,例题2.3-13,47,例2.3-13 加法运算,mov al,0fbh;al=0fbhadd al,07h;al=02hmov word ptr 200h,4652h;200h=4652hmov bx,1feh;bx=1fehadd al,bl;al=00hadd word ptr bx+2,0f0f0h;200h=3742h,ADD,48,带进位加法指令ADC,ADC指令将源与目的操作数相加,再加上进位CF标志,结果送到目的操作数ADC指令按状态标志的定义相应设置ADC指令主要与ADD配合,实现多精度加法运算,ADC,ADC reg,imm/reg/mem;regregimm/reg/memCFADC mem,imm/reg;memmemimm/regCF,例题2.3-14,49,例2.3-14 双字加法,mov ax,4652h;ax=4652hadd ax,0f0f0h;ax=3742h,CF=1mov dx,0234h;dx=0234hadc dx,0f0f0h;dx=f325h,CF=0;DX.AX0234 4652H F0F0 F0F0H F325 3742H,ADC,50,增量指令INC(increment),INC指令对操作数加1(增量)INC指令不影响进位CF标志,按定义设置其他状态标志,INC,INC reg/mem;reg/memreg/mem1,inc bxinc byte ptr bx,51,减法指令SUB(subtract),SUB指令将目的操作数减去源操作数,结果送到目的操作数SUB指令按照定义相应设置状态标志,SUB,SUB reg,imm/reg/mem;regregimm/reg/memSUB mem,imm/reg;memmemimm/reg,例题2.3-15,52,例2.3-15 减法运算,mov al,0fbh;al=0fbhsub al,07h;al=0f4h,CF0mov word ptr 200h,4652h;200h=4652hmov bx,1feh;bx=1fehsub al,bl;al=0f6hsub word ptr bx+2,0f0f0h;200h=5562h,CF1,SUB,53,带借位减法指令SBB,SBB指令将目的操作数减去源操作数,再减去借位CF(进位),结果送到目的操作数。SBB指令按照定义相应设置状态标志SBB指令主要与SUB配合,实现多精度减法运算,SBB,SBB reg,imm/reg/mem;regregimm/reg/memCFSBB mem,imm/reg;memmemimm/regCF,例题2.3-16,54,例2.3-16 双字减法,mov ax,4652h;ax=4652hsub ax,0f0f0h;ax=5562h,CF=1mov dx,0234h;dx=0234hsbb dx,0f0f0h;dx=1143h,CF=1;DX.AX0234 4652H F0F0 F0F0H 1143 5562H,SBB,55,减量指令DEC(decrement),DEC指令对操作数减1(减量)DEC指令不影响进位CF标志,按定义设置其他状态标志,DEC,DEC reg/mem;reg/memreg/mem1,dec cxdec word ptr si,INC指令和DEC指令都是单操作数指令 主要用于对计数器和地址指针的调整,56,求补指令NEG(negative),NEG指令对操作数执行求补运算:用零减去操作数,然后结果返回操作数求补运算也可以表达成:将操作数按位取反后加1NEG指令对标志的影响与用零作减法的SUB指令一样,NEG,NEG reg/mem;reg/mem0reg/mem,例题2.3-17,57,例2.3-17 求补运算,mov ax,0ff64hneg al;ax=ff9ch,OF=0、SF=1、ZF=0、PF=1、CF=1sub al,9dh;ax=ffffh,OF=0、SF=1、ZF=0、PF=1、CF=1neg ax;ax=0001h,OF=0、SF=0、ZF=0、PF=0、CF=1dec al;ax=0000h,OF=0、SF=0、ZF=1、PF=1、CF=1neg ax;ax=0000h,OF=0、SF=0、ZF=1、PF=1、CF=0,NEG,58,比较指令CMP(compare),CMP指令将目的操作数减去源操作数,按照定义相应设置状态标志CMP指令执行的功能与SUB指令,但结果不回送目的操作数,CMP reg,imm/reg/mem;regimm/reg/memCMP mem,imm/reg;memimm/reg,例题2.3-18,CMP,59,例2.3-18 比较AL与100,cmp al,100;al-100jb below;al100,跳转到below执行sub al,100;al100,alal-100inc ah;ahah+1below:.,执行比较指令之后,可以根据标志判断两个数是否相等、大小关系等,CMP,60,乘法指令,MUL r8/m8;无符号字节乘法;AXALr8/m8MUL r16/m16;无符号字乘法;DX.AXAXr16/m16,IMUL r8/m8;有符号字节乘法;AXALr8/m8IMUL r16/m16;有符号字乘法;DX.AXAXr16/m16,例题 2.3-19,说明,61,乘法指令的功能,乘法指令分无符号和有符号乘法指令乘法指令的源操作数显式给出,隐含使用另一个操作数AX和DX字节量相乘:AL与r8/m8相乘,得到16位的结果,存入AX字量相乘:AX与r16/m16相乘,得到32位的结果,其高字存入DX,低字存入AX乘法指令利用OF和CF判断乘积的高一半是否具有有效数值,62,乘法指令对标志的影响,乘法指令如下影响OF和CF标志:MUL指令若乘积的高一半(AH或DX)为0,则OF=CF=0;否则OF=CF=1IMUL指令若乘积的高一半是低一半的符号扩展,则OF=CF=0;否则均为1乘法指令对其他状态标志没有定义,对标志没有定义:指令执行后这些标志是任意的、不可预测(就是谁也不知道是0还是1)对标志没有影响:指令执行不改变标志状态,63,例2.3-19 乘法运算,mov al,0b4h;al=b4h=180mov bl,11h;bl=11h=17mul bl;ax=Obf4h=3060;OF=CF=1,AX高8位不为0mov al,0b4h;al=b4h=76mov bl,11h;bl=11h=17imul bl;ax=faf4h=1292;OF=CF=1,AX高8位含有效数字,64,除法指令,DIV r8/m8;无符号字节除法:ALAXr8/m8的商,AhAXr8/m8的余数DIV r16/m16;无符号字除法:;AXDX.AXr16/m16的商,DXDX.AXr16/m16的余数,IDIV r8/m8;有符号字节除法:ALAXr8/m8的商,AhAXr8/m8的余数IDIV r16/m16;有符号字除法:;AXDX.AXr16/m16的商,DXDX.AXr16/m16的余数,例题2.3-20,说明,65,除法指令的功能,除法指令分无符号和有符号除法指令除法指令的除数显式给出,隐含使用另一个操作数AX和DX作为被除数字节量除法:AX除以r8/m8,8位商存入AL,8位余数存入AH字量除法:DX.AX除以r16/m16,16位商存入AX,16位余数存入DX除法指令对标志没有定义除法指令会产生结果溢出,66,除法错中断,当被除数远大于除数时,所得的商就有可能超出它所能表达的范围。如果存放商的寄存器AL/AX不能表达,便产生溢出,8086CPU中就产生编号为0的内部中断除法错中断对DIV指令,除数为0,或者在字节除时商超过8位,或者在字除时商超过16位,则发生除法溢出对IDIV指令,除数为0,或者在字节除时商不在-128127范围内,或者在字除时商不在-3276832767范围内,则发生除法溢出,67,例2.3-20 除法运算,mov ax,0400h;ax=400h=1024mov bl,0b4h;bl=b4h=180div bl;商al05h5;余数ah7ch124mov ax,0400h;ax=400h=1024mov bl,0b4h;bl=b4h=76idiv bl;商alf3h13;余数ah24h36,68,符号扩展指令,CBW;AL的符号扩展至AH;如AL的最高有效位是0,则AH00;AL的最高有效位为1,则AHFFH。AL不变,CWD;AX的符号扩展至DX;如AX的最高有效位是0,则DX00;AX的最高有效位为1,则DXFFFFH。AX不变,什么是符号扩展符号扩展指令常用于获得倍长的数据,不影响标志位,例题2.3-21,例题2.3-22,69,符号扩展的概念,符号扩展是指用一个操作数的符号位(即最高位)形成另一个操作数,后一个操作数的各位是全0(正数)或全1(负数)。符号扩展不改变数据大小对于数据64H(表示数据100),其最高位D7为0,符号扩展后高8位都是0,成为0064H(仍表示数据100)对于数据ff00H(表示有符号数256),其最高位D15为1,符号扩展后高16位都是1,成为ffffff00H(仍表示有符号数256),70,例2.3-21 符号扩展,mov al,80h;al=80hcbw;ax=ff80hadd al,255;al=7fhcbw;ax=007fh,71,例2.3-22 AXBX,cwd;DX.AXAXidiv bx;AXDX.AXBX,利用符号扩展指令得到除法指令所需要的倍长于除数的被除数 对无符号数除法应该采用直接使高8位或高16位清0的方法,获得倍长的被除数,72,例题,设X、Y、Z、V均为16位带符号数,分别存放在X、Y、Z、V存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处?,XYZV,65F302 0024E00500,73,mov ax,Ximul Y;DX.AXXYmov cx,axmov bx,dx;BX.CXXYmov ax,Zcwdadd cx,axadc bx,dx;BX.CXXYZ,例题,74,例题,sub cx,540sbb bx,0;BX.CXXYZ540mov ax,Vcwdsub ax,cxsbb dx,bx;DX.AXV(XYZ540)idiv X;DX.AX(V(XYZ540)X,75,加法指令,76,减法指令,77,2.3.3 逻辑指令,位操作类指令以二进制位为基本单位进行数据的操作;这是一类常用的指令,都应该特别掌握注意这些指令对标志位的影响1、逻辑运算指令 AND OR XOR NOT TEST2、移位指令 SHL SHR SAR3、循环移位指令 ROL ROR RCL RCR,78,逻辑与指令AND,对两个操作数执行逻辑与运算,结果送到目的操作数,AND指令设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义,只有相“与”的两位都是1,结果才是1;否则,“与”的结果为0,AND,79,逻辑或指令OR,对两个操作数执行逻辑或运算,结果送到目的操作数,OR指令设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义,只要相“或”的两位有一位是1,结果就是1;否则,结果为0,OR,80,逻辑异或指令XOR,对两个操作数执行逻辑异或运算,结果送到目的操作数,XOR指令设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义,只有相“异或”的两位不相同,结果才是1;否则,结果为0,XOR,81,逻辑非指令NOT,对一个操作数执行逻辑非运算,NOT指令是一个单操作数指令NOT指令不影响标志位,NOT reg/mem;reg/memreg/mem,按位取反,原来是“0”的位变为“1”;原来是“1”的位变为“0”,NOT,82,例题:逻辑运算,mov al,45h;逻辑与 al=01hand al,31h;CF=OF=0,SF=0、ZF=0、PF=0mov al,45h;逻辑或 al=75hor al,31h;CF=OF=0,SF=0、ZF=0、PF=0mov al,45h;逻辑异或 al=74hxor al,31h;CF=OF=0,SF=0、ZF=0、PF=1mov al,45h;逻辑非 al=0bahnot al;标志不变,83,例题:逻辑指令应用,;AND指令可用于复位某些位(同0相与),不影响其他位:将BL中D3和D0位清0,其他位不变and bl,11110110B;OR指令可用于置位某些位(同1相或),不影响其他位:将BL中D3和D0位置1,其他位不变or bl,00001001B;XOR指令可用于求反某些位(同1相异或),不影响其他位:将BL中D3和D0位求反,其他不变xor bl,00001001B,84,测试指令TEST,对两个操作数执行逻辑与运算,结果不回送到目的操作数,AND指令设置CF=OF=0,根据结果设置SF、ZF和PF状态,而对AF未定义,只有相“与”的两位都是1,结果才是1;否则,“与”的结果为0,TEST,85,例题:测试为0或1,test al,01h;测试AL的最低位D0jnz there;标志ZF=0,即D0=1;则程序转移到there.;否则ZF=1,即D0=0,顺序执行there:.,TEST指令通常用于检测一些条件是否满足,但又不希望改变原操作数的情况,TEST,86,移位指令(shift),将操作数移动一位或多位,分成逻辑移位和算术移位,分别具有左移或右移操作,SHL reg/mem,1/CL;逻辑左移,最高位进入CF,最低位补0,SHR reg/mem,1/CL;逻辑右移,最低位进入CF,最高位补0,SAL reg/mem,1/CL;算术左移,最高位进入CF,最低位补0,SAR reg/mem,1/CL;算术右移,最低位进入CF,最高位不变,SAL与SHL相同,演示,演示,演示,87,移位指令的操作数,移位指令的第一个操作数是指定的被移位的操作数,可以是寄存器或存储单元后一个操作数表示移位位数,该操作数为1,表示移动一位;当移位位数大于1时,则用CL寄存器值表示,该操作数表达为CL,88,移位指令对标志的影响,按照移入的位设置进位标志CF根据移位后的结果影响SF、ZF、PF对AF没有定义如果进行一位移动,则按照操作数的最高符号位是否改变,相应设置溢出标志OF:如果移位前的操作数最高位与移位后操作数的最高位不同(有变化),则OF=1;否则OF=0。当移位次数大于1时,OF不确定,89,例题 移位指令,mov cl,4mov al,0f0h;al=f0hshl al,1;al=e0h;CF=1,SF=1、ZF=0、PF=0,OF=0shr al,1;al=70h;CF=0,SF=0、ZF=0、PF=0、OF=1sar al,1;al=38h;CF=0,SF=0、ZF=0、PF=0、OF=0sar al,cl;al=03h;CF=1,SF=0、ZF=0、PF=1,90,例题:移位实现乘,mov si,axshl si,1;si2axadd si,ax;si3axmov dx,bxmov cl,03hshl dx,cl;dx8bxsub dx,bx;dx7bxadd dx,si;dx7bx3ax,逻辑左移一位相当于无符号数乘以2 逻辑右移一位相当于无符号数除以2,91,循环移位指令(rotate),将操作数从一端移出的位返回到另一端形成循环,分成不带进位和带进位,分别具有左移或右移操作,ROL reg/mem,1/CL;不带进位循环左移,ROR reg/mem,1/CL;不带进位循环右移,RCL reg/mem,1/CL;带进位循环左移,RCR reg/mem,1/CL;带进位循环右移,演示,演示,演示,演示,92,循环移位指令对标志的影响,按照指令功能设置进位标志CF不影响SF、ZF、PF、AF如果进行一位移动,则按照操作数的最高符号位是否改变,相应设置溢出标志OF:如果移位前的操作数最高位与移位后操作数的最高位不同(有变化),则OF=1;否则OF=0。当移位次数大于1时,OF不确定,93,例题 32位数移位,;将DX.AX中32位数值左移一位shl ax,1rcl dx,1,94,例题:位传送,;把AL最低位送BL最低位,保持AL不变ror bl,1ror al,1rcl bl,1rol al,1,AL之D0,95,2.3.4 处理机控制类指令 NOP 无操作(机器码占一个字节)HLT 暂停机(等待一次外中断,之后继续执行程序)WAIT 等待(等待外中断,之后仍继续等待)ESC 换码 LOCK 封锁(维持总线的锁存信号,直到其后的指令 执行完)注意:*不影响条件标志,96,SHL/SAL指令,97,SHR指令,98,SAR指令,99,ROL指令,100,ROR指令,101,RCL指令,102,RCR指令,103,逻辑运算指令,104,本章小结,1.80X86指令系统概述,介绍了指令系统的基本概念和有关指令系统在完备性、有效性、规整性和兼容性等方面的要求,介绍了80X86指令系统的指令种类和指令格式。280X86指令操作数的寻址,介绍了80X86的三种主要数据类型:立即数、寄存器操作数和存储器操作数,并详细介绍了80X86针对这三种数据类型的寻址方式。380X86的几类基本指令,主要介绍了80X86的数据传送指令、算术运算指令、逻辑运算指令和处理机控制指令等,另外还有一些类别的80X86指令将结合相关内容在后续章节中介绍,便于读者循序渐进学习80X86指令和编程。,熟悉上述内容后,就可以进入下一章,