微机原理-03_指令系统_第1页
微机原理-03_指令系统_第2页
微机原理-03_指令系统_第3页
微机原理-03_指令系统_第4页
微机原理-03_指令系统_第5页
已阅读5页,还剩166页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第3章 指令系统,3.1 指令系统概述3.2 寻址方式3.3 8086指令系统3.4 80286、80386扩充指令,3.1 8086指令系统概述,一条指令需要指出两部分内容:1.要进行什么操作(由操作码指出)2.指令所涉及的操作数和操作结果存放的位置 例: ADD AL,5;(加法指令),3.2 寻址方式,操作数寻址 寻找指令中操作数所在地址的方法(指令中 关于如何计算操作数有效地址的方法)。 ADD AL, 5; (加法指令) ADD AL, BL;(加法指令)指令地址寻址 JMP next;,3.2 寻址方式,指令中可以直接给出所使用的操作数本身,或 者只给出操作数所在的寄存器,存储器或I/O端 口的地址或地址的计算方法。 计算机按照指令给出的寻址方式求出操作数的 有效地址和存取操作数的过程称为寻址操作。,3.2 寻址方式,存储器寻址,数据寻址方式,1.立即数寻址,操作数直接由指令给出 例如: MOV BL,60H ;(BL=60H) MOV AX,3100H ;(AX=3100H) 特点:不需要使用总线周期,速度比较快 说明:立即数可以是8位,也也可以是16位 只能为整数 只能作为源操作数,2.寄存器寻址,操作数在CPU内的寄存器中,指令中只给出寄存 器名 例如: MOV AX,BX ; 将BX内容传到AX 特点:不需要使用总线周期,执行速度快说明:16位寄存器为 AX,BX,CX,DX,SI,DI,SP,BP 8位寄存器为 AH,AL,BH,BL,CH,CL,DH,DL 源操作数、目的操作数同时可以使用寄存器 寻址,2.寄存器寻址,MOV SS, AX执行指令前:(AX)-3064H (SS)-1234H执行指令后:(SS)-3064H (AX) 保持不变,1234H,3064H,SS,AX,3064H,3064H,执行指令前:,执行指令后:,3.直接寻址,操作数在存储器中,存储单元的有效地址由指令直接给出。 例如: MOV AX, 3100H ( MOV AX,3100H ) 特点:需要1个总线周期。 说明:默认的段寄存器为DS,如果不是DS,则需要 用前缀指出。 MOV BX, ES:3100H 将ES段的3100H和3101H两单元的内容取到BX,MOV AX, 3100H物理地址:PA=16d(DS)+EA (DS)=6000H; PA=63100H; (63100)=3050H 执行指令后(AX)=3050H,DS,6000H,60000H+ 3100H 63100H,63100H,63101H,3.寄存器间接寻址,操作数在存储器中,存储单元的有效地址在寄存器中。 特点:需要1个以上总线周期。说明:寄存器可为BX,BP,SI,DI。 如果没有指明具体的段寄存器,默认的段寄存 器为DS;当寄存器为BP时,段寄存器为SS. 允许在指令中使用8位或16位的偏移量。,3.寄存器间接寻址,有效地址EA=,直接 3100H,3.寄存器间接寻址,(1)以SI,DI,BX为寄存器进行间接寻址。 默认段寄存器DS 操作数物理地址为: PA=16d(DS)+(BX) PA=16d(DS)+(SI) PA=16d(DS)+(DI) 若使用其它段寄存器,需要前缀指明,MOV BX, DI ( MOV BX,DI )假设 (DS)=6000H (DI)=2000H PA=62000H; (62000)= 50A0H (BX)= 50A0H,数据段,DS,6000H,60000H+ 2000H 62000H,62000H,DI,2000H,3.寄存器间接寻址,(2)以BP为寄存器进行间接寻址。 默认段寄存器SS 操作数物理地址为: PA=16d(SS)+(BP) 若使用其它段寄存器,需要前缀指明,MOV BP, AX假设:(SS)=1000H (BP)=3000H (AX)=1234H则 PA=13000H; (13000)=1234H,堆栈段,SS,1000H,10000H+ 3000H 13000H,13000H,BP,3000H,4.寄存器相对寻址,有效地址EA=,8位的位移量16位的位移量,+,假设:(SS)=5000H (BP)=3000H COUNT=2040H (AX)=1234H则 EA=5040H PA=55040H; (55040)=5548H (AX)=5548H,堆栈段,SS,5000H,50000H 3000H + 2040H 55040H,55040H,BP,3000H,MOV AX, COUNT BP (或MOV AX,BP+COUNT) (或MOV AX,BP+COUNT)其中COUNT为16位位移量,50000H,代码段,用途:,这种寻址方式一般用于表格处理。 表格首地址为COUNT,修改基址或变址寄存器来取得表格中其它元素的值 例如: 某数据表的首地址为COUNT 欲读取表中第n个数据,存放到(AL)中, 第n个数据的有效地址:EA=COUNT+(n-1) MOV SI, n-1 MOV AL, SI+COUNT,假设:(DS)=3200H (BX)=0456H (SI)=1094H (334EAH)=1234H则 EA=14EAH PA=334EAH (AX)=4567H,数据段,BX,0456H,32000H 0456H + 1094H 334EAH,334EAH,SI,1094H,MOV AX, BX SI 5. 基址变址寻址 MOV AX, BP DI,用途:,这种寻址方式也常用于数组或表格处理。 表格首地址位于基址寄存器中,用变址寄存器来访问数组中的元素。 二个寄存器都能修改,所以比直接变址方式更灵活。,假设:(DS)=3000H (BX)=1346H (DI)=0500H MASK=1234H (32A7AH)=4050H则 EA=2A7AH PA=32A7AH (AX)=4050H,数据段,32A7AH,MOV AX, MASK BX DI 6.基址变址相对寻址或 MOV AX, MASK BP SI,用途:,这种寻址方式为堆栈处理提供方便: BP为栈顶值(一般都是用BP指向栈顶);从栈顶到数组的首地址可用MASK表示;变址寄存器(SI)或(DI)指向数组中某个元素。,小结:,纵观8086/8088寻址方式,其操作数有3种类型: 立即操作数 寄存器操作数 存储器操作数,(1) 立即操作数,立即操作数只能作为源操作数,不能作为目的操作数 MOV AX, 3100H MOV 3100H, AX 指令中的立即操作数不能超过8位或16位的取值范围 MOV AL, 100H MOV AX, 20000H ,(2) 寄存器操作数,寄存器操作数可能存放在: 8088/8086的通用寄存器、地址指针或变址寄存器以及段寄存器中。 隐含寄存器操作数: 某些指令规定只能使用指定寄存器操作数,从指令形式上看,似乎没有指出操作数,实际上是隐含了某些特定寄存器操作数。 MUL CL ; AL*CL AX,(3)存储器操作数,存储器操作数类型可以为:字节、字、双字。 存储器操作数可以作为源操作数,也可以作为目的操作数。 但多数指令不允许源操作数、目的操作数 同时为存储器操作数。 MOV BX, 3100H ,课后练习:,1.若CS=5200H时,某指令的物理地址为5A230H, 则CS=7800H时,此时的物理地址是多少?2.设BX=637DH, SI=2A9BH,位移量为C237H,试确 定由这些寄存器和下列寻址方式产生的有效地址。 (1)直接寻址 (2)用BX的寄存器间接寻址 (3)用BX的相对寄存器间接寻址 (4)基址加变址寻址 (5)相对基址加变址寻址,3.2 寻址方式,转移地址的寻址方式,段内直接寻址 段内间接寻址 段间直接寻址 段间间接寻址,段内直接寻址段内直接寻址方式也称为相对寻址方式,转移的目标地址是当前IP内容和一个8位或16位的位移量DISP之和。即物理地址=CS16IPDISP,例:JMP DISP图3-10中,1000H是CPU读取这条指令的位移量50H后IP的内容。所以,该指令使CPU转向31050H去执行。,3.2.2 转移地址的寻址方式,段内直接寻址,这种寻址方式在段内进行,其转移的目标地址是16位寄存器或两个相邻的存储单元的内容,即以寄存器或存储器单元内容来更新IP的内容。如图3-11所示。 例:JMP CX JMP WORD PTR BX,段内间接寻址,段内间接寻址,在这种寻址方式中,指令码中将直接给出16位的段地址和16位的段内偏移地址。,3段间直接寻址,例:JMP FAR PTR DADD1,这种寻址方式和段内间接寻址相似。但是,由于确定转移地址需要32位信息,因此只适用于存贮器寻址方式。用这种寻址方式可计算出存放转移地址的存贮单元的首地址,与此相邻的4个单元中,前两个单元存放16位的段内偏移地址;而后两单元存放的是16位的段地址,如图3-13所示。 例:JMP DWORD PTR BP DI,段间间接寻址,段间间接寻址,3.3 8086指令系统,数据传送指令 算术运算指令 逻辑运算和位操作类指令 串操作指令 程序控制指令 处理器控制指令,3.3.1 数据传送类指令,1.通用数据传送指令2.地址传送指令3.标志寄存器传送指令,1.通用数据传送指令,(1)数据传送指令 指令格式: MOV dst,src 指令功能:(dst)(src) 实 现: 寄存器 寄存器 寄存器 内存 寄存器/内存 立即数 例如: MOV AX, BX; MOV AL, 1000H;,MOV指令注意事项,1.立即数只能作为源操作数,不能作为目的操作数。2.目的操作数与源操作数必须类型一致。3.两个操作数不能都是存储器操作数。 4.不能将任何数据传送给CS寄存器。5.指令指针IP不能作为操作数。6.段寄存器之间不能传送值。7.立即数不能直接传送到段寄存器,但可通过其他寄 存器或堆栈传送。8.不影响标志位。,MOV指令的数据传送方向,举例1,1. MOV AX,BH ;错误指令2. MOV 2000H,AX;错误指令3. MOV AL,2000H;错误指令4. 假设wbuf1、wbuf2是两个字变量 MOV wbuf1,wbuf2;错误指令,举例2,5. MOV CS,AX ;错误指令6. MOV AX,IP ;错误指令7. MOV DS,ES ;错误指令8. MOV DS,2000H;错误指令,举例3,MOV AL, BL ;MOV DH, CL ;MOV CX, AX ;MOV ES, AX ;MOV AX, 03FFH ;MOV SI, 057BH ;MOV AX, BX ;MOV DI, AX ;,MOV指令练习,将BH中的无符号数传送至AX 将字变量Wbuf2的内容传送至字变量Wbuf1 将ES的内容传送至DS 将段寄存器DS赋初值2000H 将立即数12H传送至偏移地址为2000H的内存单元,MOV指令练习答案(1),MOV AL,BHMOV AH,0 MOV AX,wbuf2MOV wbuf1,AXMOV AX,ESMOV DS,AXMOV AX,2000HMOV DS,AX,MOV指令练习答案(2),MOV BYTE PTR 2000H,12HMOV WORD PTR 2000H,12HWVAR DB ?;定义字节型变量 ;假设其偏移地址为2000HMOV WVAR,12H,1.通用数据传送指令,(2)堆栈操作指令 PUSH和POP 堆栈(Stack)是主存中开辟的用于暂时存放数据的一个特殊区域。按先进后出或后进先出的原则管理,类似于货舱中摞放货物。 堆栈段的段地址存放于段寄存器SS中,偏移地址存放于寄存器SP中。 进栈和出栈的操作伴随着堆栈指针SP的调整,SS:SP永远指向堆栈段的栈顶。,举例,假设(SS)=9000H, 堆栈段为64KB, (SP)=0E200H,则: 整个堆栈段的物理 地址范围为 90000H-9FFFFH 栈顶的物理地址 9E200H,堆栈段,物理地址,偏移地址,0000H,SP=E200H,00000H 低地址,FFFFH,90000H,9E2000H,9FFFFH,PUSH AX; 将AX内容压栈,堆栈段,SP,(SP)-2,(SP)-1,(1) (AX),堆栈段,SP,(SP)+2,(SP)+1,(2) (AX),(SP)(SP)-2,(SP) (AX),低地址,低地址,POP BX; 将栈顶内容弹出,堆栈段,SP,(SP)+2,(SP)+1,(1) (BX),堆栈段,SP,(SP)-2,(SP)-1,(2) (BX),(BX)(SP),(SP)(SP)+2,低地址,低地址,PUSH和POP指令说明,1.8086堆栈操作均为16位(字)操作;2.每推入一个字,SP减2,一个字的高字节放 在堆栈的较高地址,低字节放在堆栈的较低 地址;弹出一个字,SP加2。3.堆栈中的值按先进后出的次序进行传递。,堆栈操作练习,设AX=1234H,SP=2000H,执行PUSH AX指令后SP的值是多少? SS:SP指向的内存单元的内容是什么? 请利用堆栈将两个字变量A、B内容互换。,堆栈操作练习答案,设AX=1234H,SP=2000H,执行PUSH AX指令后SP=1FFEH;SS:SP=34H,SS:SP+1=12H。利用堆栈将两个字变量A、B内容互换。PUSH APUSH BPOP APOP B,1.通用数据传送指令,(3)数据交换指令 XCHG XCHG OPR1,OPR2; opr1 (opr2) 寄存器 寄存器 寄存器 内存,XCHG BL,AL ;,说明:1.可以字交换,也可以字节交换;2.目的和源操作数位数相同,8位或16位;3.段寄存器不能作为操作数;4.操作数不能同时为内存单元。,数据交换指令 举例,XCHG AL,CL;累加器低8位和通用寄存器CL之间交换XCHG AX,DI;累加器AX和通用寄存器DI之间交换XCHG BX,SI;通用寄存器BX和通用寄存器SI之间交换XCHG AX,BUFFER;累加器AX和BUFFER为首地址的两个单元交换XCHG BX,SI;通用寄存器BX和存储器SI和SI+1两个单元交换,XCHG指令练习,1.将字变量A、B的内容互换,MOV BX, AXCHG BX, BMOV A, BX,1.通用数据传送指令,(4)字节转换指令 XLAT ; 通过AL和BX寄存器进行表格查找,将8位数装入AL中。XLAT指令常用于查表操作,即BX寄存器含有表格的起始地址,而AL中的值是作进入表格中的偏移量,查出表格中的内容送入AL中。 AL BX+AL,XLAT指令 举例,假设 DS =2000H, AL=03H,BX=0010H 执行指令XLAT作用是: 将存储单元20013H的内容送入AL中。,XLAT指令 举例,例3-1 有一个表存放数字09的ASCII码,其表首 地址是0100H,找出7的ASCII码。 MOV BX,0100H ;0100BX MOV AL,7 ;7AL XLAT ;BX+AL AL,2.地址传送指令,8086有3条地址传送指令 LEA指令 取有效地址指令 LDS指令 地址指针装入DS指令 LES指令 地址指针装入ES指令,(1)取有效地址指令 LEA,功能:把源操作数的有效地址,即16位偏移地 址源传送到目标寄存器。源操作数必须是一个内存操作数,目的操作数 必须是一个16位的通用寄存器。 例如: LEA BX,2782H ;,(1)取有效地址指令 LEA,例3-2 设BX=2000H,DS=4000H, 42045H=21H, 42046H=38H,试比较以下两条指令单独执行 时的结果。 LEA BX,BX+45H MOV BX,BX+45H 结果:执行第一条指令后 BX=2045H;执行第 二条指令后 BX=3821H,(2)地址指针装入DS指令 LDS,指令功能:把两个字的地址指针,一个段地 址和一个偏移地址分别传送到DS和另一个指定的寄存器中。例如: LDS SI,2130H 2130, 2131单元中内容为偏移量,送SI; 2132, 2133单元中内容为段地址,送DS。,LDS指令 举例,例: 设DS=2000H, SI=0502H, 20502H=0666H, 20504H=0888H;执行 LDS BX,SI; 后 BX=? DS=? 。 答:BX=0666H,DS=0888H。,(3)地址指针装入ES指令 LES,指令功能:把两个字的地址指针,一个段地 址和一个偏移地址分别传送到ES和另一个指定的寄存器中。例如: LES SI,2130H 2130, 2131单元中内容为偏移量,送SI; 2132, 2133单元中内容为段地址,送ES。,3.标志寄存器传送指令,读出标志位,对标志位进行设置:(1)读标志指令 LAHF(2)设置标志指令 SAHF (3)标志入栈指令 PUSHF(4)标志出栈指令 POPF,(1)读标志指令 LAHF,指令功能:将标志寄存器低8位传送到AH。,(2)设置标志指令 SAHF,指令功能:与LAHF指令相反,执行时将AH寄 存器中的第7、6、4、2、0 位分别传送到标志 寄存器对应位的状态,但其余状态标志位即OF、DF、IF 和TF不受影响。,(3)标志入栈指令 PUSHF,指令功能:该指令将标志寄存器的值压入堆栈顶部,同时堆栈指针SP减2,即: SP(SP)-2; (SP)+l:(SP)(FLAG)这条指令对状态标志位没有影响。,(4)标志出栈指令POPF,指令功能:与PUSHF指令相反,执行时从堆栈栈顶弹出一个字送到标志寄存器,然后堆栈指针SP的值加2。即: FLAG(SP)+1,(SP) SP(SP)+2 这条指令对状态标志位产生影响。 常用于子程序及中断处理程序中保护标志 寄存器,3.3.2 算术运算类指令,1.加法指令2.减法指令3.乘法指令4.除法指令5.符号扩展指令,1.加法指令,(1)不带进位加法指令 ADD ADD dst,src (dst)(dst)+(src) 例如: ADD AL,21H ADD BX,1234H ADD AX,BX+2100H,例如: ADD AX,0CFA8H若指令执行前,(AX)=5623H,则指令执行后,(AX)=25CBH,且 CF=1,OF=0,SF=0, ZF=0,AF=0,PF=1。,ADD指令 举例,1.加法指令,(2)带进位加法指令 ADC ADC dst,src (dst)(dst)+(src)+(CF) 例如: ADC AX,SI ADC DI,AX 该指令多用于多字节加法运算,利用ADC指令实现多字节加法,例3-4 有两个4字节无符号数相加,两个数分别放在3000H和4000H开始的存储器单元中,低位在前,高位在后,进行运算后,得到的和放在4000H中。,利用ADC指令实现多字节加法,MOV SI, 3000H MOV AX, SI MOV DI, 4000H ADD AX, DI MOV DI, AX MOV AX, SI+2 ADC AX, DI+2 MOV DI+2,AX,1.加法指令,(3)加1指令 INC INC dst dst(dst)+1 例如: INC DL INC AX该指令影响SF、ZF、AF、PF、OF,但对CF没影 响。目标操作数可以是寄存器或存储器,但不能是段寄存器。该指令多用于循环程序的指针修改。,2.减法指令,(1)不带借位加法指令 SUB SUB dst,src (dst)(dst)-(src) 例如: SUB AL,20H SUB BX,SI SUB AX,1000H,2.减法指令,(2)带借位加法指令 SBB SBB dst,src (dst)(dst)-(src) -(CF) 例如: SBB BL,12H SBB BX,DI SBB用于多字节的减法运算中,2.减法指令,(3)减1指令 DEC DEC dst dstdst-1 例如: DEC BH DEC CX DEC BYTE PTR BP DEC WORD PTR BX,2.减法指令,(4)取补指令 NEG NEG dst dst0-dst 例如: NEG BH NEG AX影响6个状态标志位SF,ZF,AF,PF,CF和OF,通常总是使CF=1,除非操作数为0。当操作数为128(80H)或32768(8000H)时,操作数不变,但OF置1。,2.减法指令,(5)比较指令 CMP CMP dst,src dst-src 例如: CMP BL 23H CMP AX, 2000H比较后,两个操作数的内容均不变,但影响 标志位AF、CF、OF、PF、SF、ZF。,根据标志位判断比较结果,(1)ZF=1,则两个操作数相等。(2)对于两个无符号数, CF=0, 则 dstsrc CF=1, 则 dstsrc OFSF=1, 则 dst9或AF=1,则AL+6AL,1AF;若AL中的高4位9或CF=1,则AL+60AL,1CF。,BCD码调整指令 DAA,BCD码调整指令 举例,例3-5 求两个十进制数的和73+48=?先将被加数73和加数48以压缩BCD码形式分别存放在寄存器AL和BL中,然后进行相加,再用DAA指令进行调整。程序段如下: MOV AL,73H ;(AL)=73H MOV BL,48H ;(BL)=48H ADD AL,BL ;(AL)=BBH,AF=0, CF=0 DAA ; (AL)=C1H,AF=1,CF=1,(3)减法的BCD码调整指令 非压缩型BCD码调整指令 指令格式:AAS 指令功能:对在AL中两个非压缩型BCD码相 减的结果,调整成非压缩型BCD 压缩型BCD码调整指令 指令格式:DAS 指令功能:对在AL中两个压缩型BCD码相减 的结果,调整成压缩型BCD码在AL中。,BCD码调整指令 AAS DAS,BCD码调整指令 举例,例3-6 求两个十进制数的差87-38=? MOV AL,87H ;(AL)=87H MOV BL,38H ;(BL)=38H SUB AL,BL ;(AL)=4FH DAS ; (AL)=49H,(4)十进制乘法的BCD码调整指令 AAM 指令格式:AAM 指令功能:AX把AL中的积调整为非压 缩的BCD码格式。 这条指令之前必须执行MUL指令把两个非组合的BCD码相乘(此时要求其高4位为0),结果放在AL中。,BCD码调整指令 AAM,举例,例3-9 要进行以下十进制运算:5 7=? MOV AL, 05H ; (AL)=05H MOV BL, 07H ; (BL)=07H MUL BL ; (AX)=05H 07H=0023H AAM ; (AH)=03H,(AL)=05H,(5)十进制除法的BCD码调整指令 AAD 用在两位非压缩型BCD码之前,对AX内容进行调整,使两个未组合的十进制数相除之后可得到非组合的BCD码,商在AL中,余数在AH中。 例3-12:计算53/4=? MOV AX,0503H MOV BL,04H AAD DIV BL,BCD码调整指令 AAD,3.3.3 逻辑运算和移位指令,1.逻辑运算指令2.移位指令,1.逻辑运算指令,(1) 逻辑与 AND dst, src(2) 逻辑或 OR dst, src(3) 逻辑非 NOT dst(4) 逻辑异或 XOR dst, src(5) 测试指令 TEST dst, src,1.逻辑运算指令,(1) 逻辑与指令 AND AND dst, src 对两个操作数按位做逻辑与运算,结果送回目的操作数。 例如: AND BL,0FH,1.逻辑运算指令,(2) 逻辑或指令 OR OR dst, src 对两个操作数按位做逻辑或运算,结果送回目的操作数。 例如: OR AX,00FFH,1.逻辑运算指令,(3) 逻辑非指令 NOT NOT dst 对将指定的寄存器或存储单元的操作数按位取反。,1.逻辑运算指令,(4) 逻辑异或指令 XOR XOR dst, src 对两个操作数按位做逻辑异或运算,结果送回目的操作数。 例如:假设 BH= 10110011B XOR BH, 01011011B 执行后 BH= 11101000B,1.逻辑运算指令,(5) 测试指令 TEST TEST dst, src 对两个操作数按位做逻辑与运算,但不送回结果,只影响标志位。,逻辑运算指令注意事项,目的操作数不能为立即数。两操作数不能同时为存储器操作数。两操作数类型要一致。双操作数逻辑运算指令均置OF=CF=0,按定义影响SF、ZF和PF,对AF无定义。NOT指令不影响状态标志位。,逻辑运算指令特点,和0相“与”,结果为0;和1相“与”,结果不变。和1相“或”,结果为1;和0相“或”,结果不变。和1“异或”,结果取反;和0“异或”,结果不变。,逻辑运算指令练习,使AL最高位为“1”,其他位不变。使AX清0,同时清CF为0。使AL中的D7D4位不变,D3D0位取反。,逻辑运算指令练习答案,OR AL,80H;使AL最高位为“1”,其他位不变。XOR AX,AX ;使AX清0,同时清CF为0。XOR AL,0FH;D7D4位不变,D3D0位取反。,举例,例:(1)对操作数01101101的0、2、4位置0。,举例,例:(2)对操作数01101101的0、1、5位置1。,举例,例:(3) 将AL寄存器内容清0。 11010011 XOR 11010011 00000000,举例,例:(4) 测试AL的第0位的值。 0110110? test 00000001 0000000? 结果为0(ZF=1),则检测位为0 结果为不为0(ZF=0),则检测位为1,对逻辑运算的几点说明,1. 对应位进行相应的逻辑运算2. AND指令一般用于将指定位清03. OR指令一般用于将指定位置14. XOR指令一般用于将某个寄存器清05. TEST指令一般用于测试寄存器中的指定位是0还是1。后面常跟一条件转移指令。,2.移位指令,(1) 非循环移位SHL 逻辑左移 (Shift Left)SAL 算术左移 (ShiftArithmeticLeft)SHR 逻辑右移 (Shift Right)SAR 算术右移 (ShiftArithmeticRight),2.移位指令,(2) 循环移位指令ROL 循环左移 (RotateLeft) RCL带进位循环左移 (Rotate through CarryLeft)ROR 循环右移 (RotateRight)RCR 带进位循环右移 (RotateLeft),(1)非循环移位,SHR,SHL / SAL,SAR,(1)非循环移位指令,指令格式 SHL dst, 1 SHL dst, CL SHR dst, 1 SHR dst, CL SAL dst, 1 SAL dst, CL SAR dst, 1 SAR dst, CL,(1)非循环移位指令,例1: SHL AL,1 MOV CL,4 SHL AL,CL,(1)非循环移位指令,例2:MOV AH,5AH SAR AH,1 指令执行完后,(AH)=2DH,CF=0,(1)非循环移位指令,例3:MOV BL,4EH SHR BL,1 指令执行后,(BL)=27H,CF=0,(2)循环移位指令,例如:MOV AL,5BH ROL AL,1 指令执行完后,(AL)=B6H,CF=0,循环左移指令 ROL,(2)循环移位指令,例如:MOV AL,6BH ROR AL,1 指令执行完后,(AL)=B5H,CF=1,循环右移指令 ROR,(2)循环移位指令,例如:MOV AL,4CH RCL AL,1 指令执行后,(AL)=99H,CF=0,带进位循环左移指令 RCL,(2)循环移位指令,例如: MOV AL,5CH RCR AL,1 指令执行完后,(AL)=AEH,CF=0,带进位循环右移指令 RCR,3.3.4 串操作指令,用一条指令对存放在内存中的一段连续的字或字节的相同的操作,称为串操作。共同特点:(1)指令中常采用隐含寻址。源操作数一般在DS段中,SI寄存器寻址;目的操作数在ES段中,DI寄存器寻址。(2)同一段内实现数据传送时,应使DS=ES,SI和DI仍是源操作数和目的操作数的有效地址。,3.3.4 串操作指令,共同特点:(3)串指令前可加重复前缀REP是指令重复执行,重复次数由CX寄存器决定。(4)每一次操作后,地址指针SI,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论