《微机原理与接口技术的课件_第3章1.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术的课件_第3章1.ppt(94页珍藏版)》请在三一办公上搜索。
1、1,第3章 指令系统,2,主要内容:,指令系统的一般概念对操作数的寻址方式六大类指令的操作原理:,操作码的含义指令对操作数的要求指令执行的结果,3,3.1 概述,4,了解:,指令及指令系统;指令的格式;指令中的操作数类型;指令字长与机器字长;指令的执行时间CISC和RISC指令系统,5,一、指令与指令系统,指令:控制计算机完成某种操作的命令指令系统:处理器所能识别的所有指令的集合指令的兼容性:同一系列机的指令都是兼容的。,6,二、指令格式,指令中应包含的信息:,运算数据的来源运算结果的去向执行的操作,7,指令格式,操作码 操作数,操作数,指令的功能(即执行何种操作),目标操作数,源操作数,指令
2、的操作对象,指明参加操作的数据或数据存放的地址,8,指令格式:,零操作数指令:操作码 单操作数指令:操作码 操作数双操作数指令:操作码 操作数,操作数多操作数指令:三操作数及以上,9,三、指令中的操作数类型,立即数操作数寄存器操作数存储器操作数,表征参加操作的数据本身,表征数据存放的地址,10,立即数操作数,立即数只能作为源操作数。其本身是参加操作的数据,可以是8位或16位。例:MOV AX,1234H MOV BL,22H立即数无法作为目标操作数立即数可以是无符号或带符号数,其数值应在可取值范围内。,11,寄存器操作数:,参加运算的数存放在指令给出的寄存器中,可以是16位或8位。例:MOV
3、AX,BX MOV DL,CH,12,存储器操作数,参加运算的数存放在存储器的某一个或某两个单元中。表现形式:,立即数或寄存器,13,存储器操作数例,例:MOV AX,1200H MOV AL,1200H,22H,11H,1200H,偏移地址,AH AL,14,四、指令字长与机器字长,指令字长:由操作码的长度、操作数地址长度、操作数个数决定;机器字长:计算机能够直接处理的二进制数的位数。,15,五、指令的执行速度,指令的字长影响指令的执行速度。(常用指令的执行时间见表3-4)对不同的操作数,指令执行的时间不同:存储器,快!,立即数,寄存器,16,六、CISC和RISC指令系统,CISC(复杂)
4、指令系统指令的功能强,种类多,高级语言和机器语言间的距离缩小;指令系统复杂,难使用。RISC(精简)指令系统指令功能较弱,种类少,格式简单;多数指令在一个计算机周期内完成;对存储器的结构和存取速度要求较高。,17,3.2 寻址方式,18,寻址方式,寻找操作数所在地址的方法 寻找转移地址的方法,本节,19,一、立即寻址,指令中的源操作数是立即数,即源操作数是参加操作的数据本身。主要用于给寄存器或存储单元赋初值。例:MOV AX,1200H,12H,00H,AH AL,MOV,代码段,20,二、直接寻址,操作数在内存中,指令中直接给出操作数的偏移地址。操作数一般在DS段(默认)。例:MOV AX,
5、1200H,22H,11H,1200H,偏移地址,数据段,AH AL,21,直接寻址,直接寻址方式下,操作数的段地址默认为数据段,但允许段重设,即由指令定义段。例:MOV AX,ES:1200H,22,三、寄存器寻址,参加操作的操作数在CPU的通用寄存器中。例:MOV AX,BX,AX,BX,23,四、寄存器间接寻址,参与操作的操作数存放在内存中,用寄存器的内容表示操作数的偏移地址。,24,寄存器间接寻址,由寄存器间接给出操作数的偏移地址;存放偏移地址的寄存器称为间址寄存器,它们是:BX,BP,SI,DI操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器:BX,SI,DI BP,默认在
6、数据段,默认在堆栈段,25,寄存器间接寻址例,例:MOV AX,BX 设BX=1200H,22H,11H,1200H,偏移地址,AH AL,11 22,数据段,代码段,MOV,26,寄存器间接寻址,寄存器间接寻址,基址寻址(间址寄存器为基址寄存 器BX,BP)变址寻址(间址寄存器为变址寄存 器SI,DI),27,五、寄存器相对寻址,操作数的偏移地址为寄存器的内容加上一个位移量。例:MOV AX,BX+DATA 设:DS=2000H,BX=0220H,DATA=05H 则:AX=20225H,28,六、基址、变址寻址,操作数的偏移地址为一个基址寄存器的内容加上一个变址寄存器的内容,操作数的段地址
7、由选择的基址寄存器决定。例 3-9(P103):MOV AX,SI+BX,29,七、基址、变址、相对寻址,操作数的偏移地址为一个基址寄存器的内容加上一个变址寄存器的内容,再加上一个位移量。操作数的段地址由选择的基址寄存器决定。例:3-10(P104),30,八、隐含寻址,指令隐含了的一个或两个操作数的地址,即操作数在默认的地址中。例:MUL BL 指令的执行:ALBL,AX,31,3.3 8086指令系统,32,掌握:,指令码的含义指令对操作数的要求指令的对标志位的影响指令的功能,33,8086指令系统,从功能上包括六大类:,数据传送算术运算逻辑运算和移位串操作程序控制处理器控制,34,数据传
8、送指令,通用数据传送输入输出地址传送标志位操作,35,一、通用数据传送,一般数据传送指令堆栈操作指令交换指令查表转换指令字位扩展指令,特点:该类指令的执行对标志位不产生影响,36,1.一般数据传送指令,格式:MOV DST,SRC 目的操作数 源操作数功能:将源操作数传送至目的地址中,源保持不变。(SRC)DST例:MOV AL,BL,37,一般数据传送指令,注:两操作数字长必须相同;两操作数不允许同时为存储器操作数;两操作数不允许同时为段寄存器;在源操作数是立即数时,目标操作数不能是段寄存器;IP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现。,38,39,一般数据传送指令
9、,判断下列指令的正确性:MOV AL,BXMOV AX,SI05HMOV DS,1000HMOV BXBP,BXMOV CS,BXMOV DX,09HMOV 1200,SIMOV 2000H,AX,X,类型不一致X,立即数不能送段寄存器X,CS不能做目的操作数X,不能同时为存储器操作数X,目的不能为立即操作数,40,2.堆栈操作指令,掌握:有关堆栈的概念 栈顶、栈首、栈底堆栈指令的操作原理,执行过程,执行结果,41,堆栈操作的原则,先进后出以字为单位,42,堆栈操作指令,压栈指令 PUSH 格式:PUSH OPRD出栈指令 POP 格式:POP OPRD,43,进栈指令 PUSH,指令执行过程
10、:(SP)(SP)-2(SP)-1操作数高字节(SP)-2操作数低字节过程:SP-1,存源操作数的高8位;SP-2,存源操作数的低8位,完成进栈操作。,SP,堆栈段,SP,高8位,低8位,44,进栈指令的操作,设AX=1234H,SP=1200H执行 PUSH AX 指令后堆栈区的状态:,1200H,堆栈段,SP-2=11FEH,12H,34H,1200H,堆栈段,12H 34H,AX,入栈后,入栈前,45,出栈指令POP,指令执行过程:将SS:SP所指示的栈顶处的两个字节的数据传送到目的操作数中。SP+2,指示当前栈顶位置,完成出栈操作。SP SP+1 SP SP+2,操作数低字节,操作数高
11、字节,SP,堆栈段,SP,高8位,低8位,46,出栈指令的操作,执行 POP AX,12H,34H,11FEH,堆栈段,代码段,PUSH,12 34,AX,SP+2,1200H,出栈后,出栈前,47,堆栈操作指令说明,指令的操作数必须是16位的;操作数可以是寄存器或存储器两单元,但不能是立即数;不能从栈顶弹出一个字给CS;PUSH和POP指令在程序中一般成对出现;PUSH指令的操作方向是从高地址向低地址,而POP指令的操作正好相反。,48,堆栈操作指令例,PUSH AXPUSH BXPOP AXPOP BX,如此,会使AX和BX的内容互换,49,3.交换指令,格式:XCHG REG,MEM/R
12、EG操作:(DST)(SRC)即源地址与目的地址中的内容互换注:两操作数必须有一个是寄存器操作数不允许使用段寄存器。例:XCHGAX,BXXCHG2000,CL,50,例:XCHG AX,BX XCHG BH,BL XCHG AX,1122H XCHG DS,AX XCHG SI,BP XCHG SI,DI,51,4.查表指令,格式:XLAT 操作:(BX+AL)AL,即将BX为首址(偏移地址),AL为位移量的字节单元的内容AL 该指令常用于进行代码转换,转换时先建立相应表。表首址BX,与表有关的某个偏移值(一般为被传送的字节到表头地址的字节数)AL。该指令的操作数是隐含寻址,不带操作数或带表
13、头地址。说明:用BX的内容代表表格首地址,AL内容为表内位移量,BX+AL得到要查找元素的偏移地址,52,查表指令例,数据段中存放有一张ASCII码转换表,设首地址为2000H,现欲查出表中第11个代码的ASCII码,30,31,32,.,39,41,42,.,45,46,2000H+0,2000H+11,0,1,2,9,A,B,E,F,53,查表指令例,可用如下指令实现:MOV BX,2000H;BX表首地址 MOV AL,0BH;AL序号 XALT;查表转换 执行后得到:AL=42H,54,二、输入输出指令,掌握:指令的格式及操作指令的两种寻址方式指令对操作数的要求,55,指令寻址方式,直
14、接寻址 直接给出8位端口地址,可寻址256个端口间接寻址 16位端口地址由DX指定,可寻址64K个端口,56,输入输出指令,专门面向I/O端口操作的指令。输入指令:IN acc(累加器AL或AX),PORT(端口地址)操作:从端口输入一个字节到AL或输入一个字到AX。指令格式为:IN AL,nIN AX,nIN AL,DXIN AX,DX,直接寻址输入指令(n为8位端口地址),DX寄存器间接寻址输入指令(端口地址为16位),57,输入输出指令,输出指令:OUT PORT(端口地址),acc(累加器AL或AX)操作:将AL或AX的内容输出到指定端口。指令格式为:OUT n,ALOUT n,AXO
15、UT DX,ALOUT DX,AX,直接寻址输出指令(n为8位端口地址),DX寄存器间接寻址输出指令(端口地址为16位),58,三、地址传送指令,取偏移地址指令LEA*LDS指令*LES指令,59,取偏移地址指令LEA,操作:将变量的16位偏移地址取出送目标寄存器格式:LEA REG,MEM 指令要求:源操作数必须是一个存储器操作数,目标操作数通常是间址寄存器。,60,LEA指令,比较下列指令:MOV SI,DATA1 LEA SI,DATA1 MOV BX,BX LEA BX,BX,DATA1,符号地址,12H,34H,1100H,88H,77H,BX=1100H,61,5.字位扩展指令,将
16、符号数的符号位扩展到高位;指令为零操作数指令,采用隐含寻址,隐含的操作数为AX及AX,DX无符号数的扩展规则为在高位补0,62,字节到字的扩展指令,格式:CBW(convert Byte to Word)操作:将AL内容扩展到AX规则:若最高位=1,则执行后AH=FFH若最高位=0,则执行后AH=00H,63,字到双字的扩展指令,格式:CWD操作:将AX内容扩展到DX AX规则:若最高位=1,则执行后DX=FFFFH若最高位=0,则执行后DX=0000H,64,字位扩展指令例,判断以下指令执行结果:MOV AL,44H CBW MOV AX,0AFDEH CWD MOV AL,86H CBW,
17、AX=0044H,DX=FFFFHAX=0AFDEH,AX=FF86H,65,四、标志位操作指令,LAHFSAHFPUSHFPOPF,隐含操作数AH,隐含操作数FLAGS,66,1.LAHF,SAHF,指令格式:LAHF 操作:将FLAGS的低8位装入AH,CF,PF,AF,ZF,CF,.,AH,FLAGS,D15,D0,D7,D0,SAHF,执行与LAHF相反的操作,67,2.PUSHF,POPF,针对FLAGS的堆栈操作指令 将标志寄存器压栈或从堆栈弹出,68,算术运算类指令,69,算术运算类指令,加法运算指令减法运算指令乘法指令除法指令,算术运算指令的执行大多对状态标志位会产生影响,70
18、,一、加法指令,普通加法指令ADD 带进位位的加法指令ADC 加1指令INC,加法指令对操作数的要求与MOV指令相同,71,1.ADD指令,格式:ADD DST,SRC 操作:(DST)+(SRC)DST 即将目的操作数与源操作数相加,结果存入目的地 地中,而源地址内容不变。目的Reg,Mem 源Reg,Mem,Imm 两操作数的类型相同,类型明确,不能同为存储器。ADD指令的执行对全部6个状态标志位都产生影响。,72,例:判断正确与否:,ADD AL,BX ADD CL,CH ADD AX,BX ADD BX,28 ADD BX,SI ADD 1000H,AX ADD SI,BX ADD D
19、S,BX,73,ADD指令例,MOV AL,78H ADD AL,99H指令执行后6个状态标志位的状态,74,ADD指令例,01111000+10011001 00010001,1,标志位状态:CF=SF=AF=ZF=PF=OF=,1,0,1,0,1,0,75,2 带进位加法指令ADC,格式:ADC DST,SRC操作:(DST)+(SRC)+CFDST 该指令主要用于多字节运算,多字节运算时低位字节产生的进位应加到高位。单字节表示一个数的范围小,精度低,为提高精度,可用多个字表示一个数。一个字表示一个数单精度数(16位),两个字表示一个数双精度(32位),多个字多倍精度等。ADC指令多用于多
20、字节数相加,使用前要先将CF清零。指令格式、对操作数的要求、对标志位的影响与ADD指令完全一样。,CF为前面指令产生的CF,76,例:两个双精度数(32位)相加。0123FAB5H+0ABC212AH=0BE01BDFH 0123 FAB5 MOV DX,0123H+0ABC 21 2A MOV AX,0FAB5H 0BE0 1BDF ADD AX,212AH;先加低字 CF=1 AX=1BDFH ADC DX,0ABCH;高字带进位加 CF=0 DX=0BE0H,77,3 加1 指令INC,格式:INC DST操作:(DST)+1DST 例:MOV BX,1 INC BX;BX=0002H
21、该指令不影响CF,而影响其它标志,规律同ADD。单操作数指令,只能为寄存器,存储器,类型明确,不能出现二义性。例:INC CL INC DI INC 2000H 该指令常用于修改偏移地址和计数次数。,78,二、减法指令,普通减法指令SUB考虑借位的减法指令SBB减1指令DEC比较指令CMP求补指令NEG,减法指令对操作数的要求与对应的加法指令相同,79,2.减法指令,减法指令SUB 格式:SUB DST,SRC 操作:(DST)(SRC)DST 即将目的操作数与源操作数相减,结果存入目的地址中,源地址内容不变,对源、目的操作数的要求同加法指令.带借位减指令SBB 格式:SBB DST,SRC
22、操作:(DST)(SRC)CF DST 除两操作数相减以外,再减去前面指令的进位(借位),该指令主要用于多倍精度数的运算,在进行高位字节(或字)运算时,一定要减去由于低位字节(或字)数不够减而产生的借位CF。,80,例:双精度数相减 5321A678H1234F000H=40ECB678H,MOV AX,0A678H MOV DX,5321H 5321 A678 SUB AX,0F000H;CF=1 1234 F000 SBB DX,1234H;CF=0 30EC B678 减 1(减量)指令DEC 格式:DEC DST 操作:(DST)1DST DEC不影响CF,其余均影响标志,影响关系同A
23、DD指令。指令对操作数的要求与INC相同指令常用于在程序中修改计数值,81,格式:NEG OPRD操作:0-OPRD OPRD用0减去操作数OPRD,结果送回该操作数所在地址。用0减去操作数,相当于对该操作数求补码。即将操作数地址的内容求反加1后(包括符号位)又送入原单元中.,4)求补指令NEG,82,例:MOV AX,1;AX=0001H(前1)NEG AX;AX=0FFFFH(后1),例:MOV BL,0FFH;BL=0FFH(前1)NEG BL;BL=01H(后1)区分,它是进行求补操作,而不是求补码指令。它不管操作数是否带符号,是正是负,也不管是原码补码。若将执行求码指令前后的数均视为
24、补码形式的符号数,求补指令则将该数变为绝对值相等符号相反的另一个数。若已知AX中的一负数的补码,则只要NEG AX,则求其绝对值。,83,格式:CMP DST,SRC 操作:(DST)(SRC)比较后影响标志位,不回送结果。源、目的不变。该指令主要用来判断比较两数的大小,与是否相等。,5)比较指令CMP,84,CMP指令,用途:用于比较两个数的大小,可作为条件转移指令转移的条件指令对操作数的要求及对标志位的影响与SUB指令相同,85,CMP指令,两个无符号数的比较:CMP AX,BX 若 AX BX 若 AX BX,CF=0,CF=1,86,CMP指令,两个带符号数的比较 CMP AX,BX
25、两个数的大小由OF和SF共同决定 OF和SF状态相同 AX BX OF和SF状态不同 AX BX,87,三、乘法指令,无符号的乘法指令MUL带符号的乘法指令IMUL,注:乘法指令采用隐含寻址,隐含的是存放被乘数的累加器AL或AX及存放结果的AX,DX;若运算结果的高位全为0或1,表示其为无效数据,OF=CF=0,88,1.无符号数乘法指令,格式:MUL OPRD 不能是立即数操作:OPRD为字节数 OPRD为16位数,ALOPRD,AXOPRD,DXAX,AX,89,无符号数乘法指令例,MUL BYTE PTRBX,BX,XXH,AL XXH,AX,90,2.带符号数乘法指令,格式:IMUL
26、OPRD说明:IMUL指令将OPRD视为带符号数,运算时若操作 数为负数,要先将操作数求补码,运算后再将结果 求补。,91,两条乘法指令的比较,例:设:AL=FEH,CL=11H,求AL与CL的乘积。执行:MUL CL 结果:AX=10DEH执行:IMUL CL结果:AX=FFDEH=-34。,若设为无符号数,若将两操作数看作有符号数,92,四、除法指令,无符号除法指令格式:DIV OPRD有符号除法指令格式:IDIV OPRD,93,除法指令的操作,若OPRD是字节数执行:AX/OPRD 结果:AL=商 AH=余数若OPRD是双字节数执行:DXAX/OPRD结果:AX=商 DX=余数,指令要求被除数是除数的双倍字长,94,五、BCD码调整指令,共6条,均为隐含寻址方式,隐含的操作数是 AL或AL、AH;不能单独使用,要紧跟在相应的算术运算指令 之后;执行结果为压缩BCD码或扩展BCD码表示的十进制数。,