《微型计算机接口技术ppt课件第三章.ppt》由会员分享,可在线阅读,更多相关《微型计算机接口技术ppt课件第三章.ppt(95页珍藏版)》请在三一办公上搜索。
1、第3章 指令系统(1),主要内容:,指令系统的一般概念对操作数的寻址方式六大类指令的操作原理,操作码的含义指令对操作数的要求指令执行的结果,3.1 概述,了解:指令及指令系统指令的格式指令中的操作数类型,一、指令与指令系统,指令:控制计算机完成某种操作的命令指令系统:处理器所能识别的所有指令的集合指令的兼容性:同一系列机的指令都是兼容的,二、指令格式,指令中应包含的信息:,运算数据的来源运算结果的去向执行的操作,指令格式:,操作码 操作数,操作数,执行何种操作,目标操作数,源操作数,参加操作的数据或数据存放的地址,指令格式:,零操作数指令:操作码 单操作数指令:操作码 操作数双操作数指令:操作
2、码 操作数,操作数多操作数指令:三操作数及以上,三、指令中的操作数,表征参加操作的数据本身 立即数表征数据存放的地址,寄存器存储器,操作数:,立即数操作数:表示参加操作的数据本身,可以是8位或16位 例:MOV AX,1234H MOV BL,22H立即数无法作为目标操作数立即数可以是无符号或带符号数,其数值应在可取值范围内,操作数:,寄存器操作数:表示参加运算的数存放在指令给出的寄存器中,可以是16位或8位。例:MOV AX,BX MOV DL,CH,操作数:,存储器操作数:表示当前参加运算的数存放在存储器的某一个或某两个单元中例:MOV AX,1200H MOV AL,1200H,22H,
3、11H,1200H,偏移地址,AH AL,四、指令字长与机器字长,指令字长由操作码的长度、操作数地址长度、操作数个数决定8088/8086CPU采用变字长指令格式机器字长:计算机能够直接处理的二进制数的位数,五、指令的执行速度,指令的字长影响指令的执行速度(常用指令的执行时间见表3-1)对不同的操作数,指令执行的时间不同:存储器 立即数 寄存器,快!,3.2 寻址方式,寻找操作数所在地址的方法 寻找转移地址的方法,本节,一、立即寻址,指令中的源操作数是立即数,即源操作数是参加操作的数据本身例:MOV AX,1234H,12H,34H,AH AL,MOV,代码段,二、直接寻址,指令中直接给出操作
4、数的偏移地址例:MOV AX,1200H,22H,11H,1200H,偏移地址,AH AL,11 22,数据段,直接寻址,直接寻址方式下,操作数的段地址默认为数据段,但允许段重设,即由指令定义段。例:MOV AX,ES:1200H,三、寄存器寻址,参加操作的操作数在CPU的通用寄存器中。例:MOV AX,BX,AX,BX,四、寄存器间接寻址,参与操作的操作数存放在内存中,其偏移地址为指令中的寄存器的内容。例:MOV AX,BX 设(BX)=1200H,22H,11H,1200H,偏移地址,AH AL,11 22,数据段,代码段,MOV,寄存器间接寻址,由寄存器间接给出操作数的偏移地址存放偏移地
5、址的寄存器称为间址寄存器,它们是:BX,BP,SI,DI操作数的段地址(数据处于哪个段)取决于选择哪一个间址寄存器:BX,SI,DI 默认在数据段 BP 默认在堆栈段,寄存器间接寻址,寄存器间接寻址,基址寻址(间址寄存器为基址寄存 器BX,BP)变址寻址(间址寄存器为变址寄存 器SI,DI),五、寄存器相对寻址,操作数的偏移地址为寄存器的内容加上一个位移量例:MOV AX,BX+DATA 设DS=2000H,BX=0220H,DATA=05H 则:AX=20225H,六、基址、变址寻址,操作数的偏移地址为一个基址寄存器的内容加上一个变址寄存器的内容,操作数的段地址由选择的基址寄存器决定例:MO
6、V AX,SI+BX,七、基址、变址、相对寻址,操作数的偏移地址为一个基址寄存器的内容加上一个变址寄存器的内容,再加上一个位移量操作数的段地址由选择的基址寄存器决定例:MOV AX,BP+SI+DATA,八、隐含寻址,指令隐含了的一个或两个操作数的地址,即操作数在默认的地址中例:MUL BL 指令的执行:ALBL AX,3.3 8086指令系统,从功能上包括六大类:,数据传送算术运算逻辑运算和移位串操作程序控制处理器控制,一、数据传送,通用数据传送输入输出地址传送标志位操作,1.通用数据传送,一般数据传送指令堆栈操作指令交换指令查表转换指令字位扩展指令,特点:该类指令的执行对标志位不产生影响,
7、一般数据传送指令,一般数据传送指令 MOV格式:MOV dest,src操作:src dest例:MOV AL,BL,一般数据传送指令,注:两操作数字长必须相同 两操作数不允许同时为存储器操作数两操作数不允许同时为段寄存器在源操作数是立即数时,目标操作数不能是段寄存器IP和CS不作为目标操作数,FLAGS一般也不作为操作数在指令中出现,一般数据传送指令,判断下列指令的正确性:MOV AL,BXMOV AX,SI05HMOV BXBP,BXMOV DS,1000HMOV DX,09HMOV 1200,SI,一般数据传送指令应用例,将(*)的ASCII码2AH送入内存1000H开始的100个单元中
8、:MOV DI,1000H MOV CX,64H MOV AL,2AHAGAIN:MOV DI,AL INC DI;DI+1 DEC CX;CX-1 JNZ AGAIN;CX0则继续 HLT,上段程序在代码段中的存放形式,設CS=109EH,IP=0100H,则各条指令存放地址如下:CS:IP 109E:0100 MOV DI,1000H 109E:0103 MOV CX,64H 109E:0106 MOV AL,2AH 109E:0108 MOV DI,AL 109E:010A INC DI 109E:010B DEC CX 109E:010C JNZ 0108 109E:010E HLT,
9、数据段中的分布,送上2AH后数据段中相应存储单元的内容改变如下:DS:1000 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1010 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1020 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1030 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2ADS:1040 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2
10、A 2A 2A 2A DS:1050 2A 2A 2A 2A 2A 2A 2A 2A-2A 2A 2A 2A 2A 2A 2A 2A DS:1060 2A 2A 2A 2A 00 00 00 00 00 00 00 00 00 00 00 00,偏移地址DI,堆栈操作指令,掌握:有关堆栈的概念 栈顶、栈首、栈底堆栈指令的操作原理,执行过程,执行结果,堆栈操作的原则,先进后出以字为单位,堆栈操作指令,压栈指令 PUSH 格式:PUSH OPRD出栈指令 POP 格式:POP OPRD,压栈指令 PUSH,指令执行过程:(SP)(SP)-2(SP)-1操作数高字节(SP)-2操作数低字节,压栈指令
11、的操作,设AX=1234H,SP=1200H执行 PUSH AX 指令后堆栈区的状态:,1200H,堆栈段,SP-2=11FEH,12H,34H,1200H,堆栈段,12H 34H,AX,入栈后,入栈前,出栈指令POP,指令执行过程:(SP)操作数低字节(SP)+1 操作数高字节(SP)(SP)+2,出栈指令的操作,执行 POP AX 堆栈区的状态:,12H,34H,11FEH,堆栈段,代码段,PUSH,12 34,AX,SP+2,堆栈操作指令说明,指令的操作数必须是16位的操作数可以是寄存器或存储器两单元,但不能是立即数不能从栈顶弹出一个字给CSPUSH和POP指令在程序中一般成对出现PUS
12、H指令的操作方向是从高地址向低地址,而POP指令的操作正好相反,堆栈操作指令例,PUSH AXPUSH BXPUSH WORD PTRBXPOP WORD PTRBXPOP AXPOP BX,如此,会使AX和BX的内容互换,交换指令,格式:XCHG REG,MEM/REG两操作数必须有一个是寄存器操作数不允许使用段寄存器。例:XCHGAX,BX XCHG2000,CL,查表指令,格式:XLAT说明:用BX的内容代表表格首地址,AL内容为表内位移量,BX+AL得到要查找元素的偏移地址操作:BX+AL AL例:教材第112页,查表指令例,数据段中存放有一张ASCII码转换表,设首地址为2000H,
13、现欲查出表中第11个代码的ASCII码(设DS=4000H),30,31,32,.,39,41,42,.,45,46,.,42000H+0,42000H+11,0,1,2,9,A,B,E,F,查表指令例,可用如下指令实现:MOV BX,2000H;(BX)表首地址MOV AL,0BH;(AL)序号XALT;查表转换 执行后得到:(AL)=42H,字位扩展指令,将符号数的符号位扩展到高位指令为零操作数指令,采用隐含寻址,隐含的操作数为AX及AX,DX无符号数的扩展规则为在高位补0,字节到字的扩展指令,格式:CBW操作:将AL内容扩展到AX规则:若最高位=1,则执行后AH=FFH 若最高位=0,则
14、执行后AH=00H,字到双字的扩展指令,格式:CWD操作:将AX内容扩展到DX AX规则:若最高位=1,则执行后DX=FFFFH 若最高位=0,则执行后DX=0000H,字位扩展指令例,MOV AL,44H CBW;执行结果 MOV AX,0AFDEH CWD MOV AL,86H CBW,?,2.输入输出指令,掌握:指令的格式及操作指令的两种寻址方式指令对操作数的要求,输入输出指令,专门面向I/O端口操作的指令包括,输入指令 IN acc,PORT输出指令 OUT PORT,acc,端口地址,指令寻址方式,直接寻址直接给出8位端口地址,可寻址256个端口间接寻址 16位端口地址由DX指定,可
15、寻址64K个端口,I/O指令例,IN AX,80HMOV DX,2400HIN AL,DXOUT DX,AXOUT AL,35H,3.地址传送指令,取偏移地址指令LEALDS指令LES指令,取偏移地址指令LEA,将变量的16位偏移地址取出送目标寄存器格式:LEA REG,MEM 指令要求源操作数必须是一个存储器操作数,目标操作数通常是间址寄存器,,LEA指令,比较下列指令:LEA SI,DATA1 MOV SI,DATA1 MOV BX,BX LEA BX,BX,DATA1,符号地址,12H,34H,1100H,88H,77H,BX=1100H,LEA指令在程序中的应用,将数据段中首地址为ME
16、M1 的50个字节的数据传送到同一逻辑段首地址为MEM2的区域存放。编写相应的程序段,LEA指令在程序中的应用,开 始,取源地址,取目标地址,送数据块长度到CL,传送一个字节,修改地址指针,修改计数值,计数值=0?,结 束,N,Y,LEA指令在程序中的应用,LEA SI,MEM1 LEA DI,MEM2 MOV CL,50NEXT:MOV AL,SI MOV DI,AL INC SI INC DI DEC CL JNZ NEXT HLT,取远地址指针指令,LDS reg,MEM32 LES reg,MEM32指令中源操作数是存储器某4个连续单元的偏移地址,目标操作数是间址寄存器。,LDS指令例
17、,例:LDS DI,1200H MOV AX,DI,指令执行后:,LDS指令例,DS=6000H DI=1234HAX=2233H,12H,34H,00H,60H,1200H,数据段 1,DS,DI,数据段2,33H,22H,61234H,LES指令例,LES DI,1200H MOV AX,DI,12H,34H,00H,60H,1200H,数据段,ES,DI,附加段,33H,22H,61234H,4.标志位操作指令,LAHFSAHFPUSHFPOPF,隐含操作数AH,隐含操作数FLAGS,LAHF,SAHF,LAHF;将FLAGS的低8位装入AHSAHF;执行与LAHF相反的操作,CF,PF
18、,AF,ZF,CF,.,AH,FLAGS,D15,D0,D7,D0,PUSHF,POPF,针对FLAGS的堆栈操作指令 将标志寄存器压栈或从堆栈弹出,二、算术运算类指令,加法运算指令减法运算指令乘法指令除法指令,算术运算指令的执行大多对状态标志位会产生影响,1.加法指令,普通加法指令ADD 带进位位的加法指令ADC 加1指令INC,加法指令对操作数的要求与MOV指令相同,ADD指令,格式:ADD OPRD1,OPRD2操作:OPRD1+OPRD2 OPRD1,ADD指令的执行对全部6个状态标志位都产生影响,ADD指令例,MOV AL,78H ADD AL,99H指令执行后6个状态标志位的状态,
19、ADD指令例,01111000+10011001 00010001,1,标志位状态:CF=SF=AF=ZF=PF=OF=,ADC指令,指令格式、对操作数的要求、对标志位的影响与ADD指令完全一样指令的操作:OPRD1+OPRD2+CF OPRD1ADC指令多用于多字节数相加,使用前要先将CF清零。,INC指令,格式:INC OPRD操作:OPRD+1 OPRD,常用于在程序中修改地址指针,不能是段寄存器或立即数,2.减法指令,普通减法指令SUB考虑借位的减法指令SBB减1指令DEC比较指令CMP求补指令NEG,减法指令对操作数的要求与对应的加法指令相同,SUB指令,格式:SUB OPRD1,O
20、PRD2操作:OPRD1-OPRD2 OPRD1对标志位的影响与ADD指令同,SBB指令,指令格式、对操作数的要求、对标志位的影响与SUB指令完全一样指令的操作:OPRD1-OPRD2-CF OPRD1,DEC指令,格式:DEC OPRD操作:OPRD-1 OPRD,指令对操作数的要求与INC相同指令常用于在程序中修改计数值,应用程序例,MOV BL,2NEXT1:MOV CX,0FFFFHNEXT2:DEC CX JNZ NEXT2 DEC BL JNZ NEXT1 HLT,NEG指令,格式:NEG OPRD操作:0-OPRD OPRD,8/16位寄存器或存储器操作数,用0减去操作数,相当于
21、对该操作数求补码,指令的两点注意请参见教材p121,CMP指令,格式:CMP OPRD1,OPRD2操作:OPRD1-OPRD2 指令执行的结果不影响目标操作数!,CMP指令,用途:用于比较两个数的大小,可作为条件转移指令转移的条件指令对操作数的要求及对标志位的影响与SUB指令相同,CMP指令,两个无符号数的比较:CMP AX,BX 若 AX BX CF=0 若 AX BX OF和SF状态不同 AX BX,CMP指令例,LEA BX,MAX LEA SI,BUF MOV CL,20 MOV AL,SINEXT:INC SI CMP AL,SI JNC GOON;CF=0转 XCHG SI,AL
22、,GOON:DEC CL JNZ NEXT MOV BX,AL HLT,程序功能?,程序功能,MAX,BUF,XXH,XXH,XXH,找20个数中最大的数,并将其存放在MAX单元中,3.乘法指令,无符号的乘法指令MUL带符号的乘法指令IMUL,乘法指令采用隐含寻址,隐含的是存放被乘数的累加器AL或AX及存放结果的AX,DX;若运算结果的高位全为0或1,表示其为无效数据,OF=CF=0,无符号数乘法指令,格式:MUL OPRD 不能是立即数操作:OPRD为字节数 ALOPRD AX OPRD为16位数 AXOPRD DXAX,无符号数乘法指令例,MUL BYTE PTRBX,BX,XXH,AL
23、XXH,AX,带符号数乘法指令,格式:IMUL OPRDIMUL指令将OPRD视为带符号数,运算时若操作数为负数,要先将操作数求补码,运算后再将结果求补。,IMUL指令例,设:AL=FEH,CL=11H,求AL与CL的乘积。若为无符号数,则 MUL CL 结果:AX=10DEH若将两操作数看作有符号数,则:IMUL CL 指令执行后:AX=FFDEH=-34。,4.除法指令,无符号除法指令 DIV OPRD有符号除法指令 IDIV OPRD,若OPRD是字节数,则执行AX/OPRD 若OPRD是双字节数,则执行 DXAX/OPRD 指令要求被除数是除数的双倍字长,AL=商AH=余数,AX=商D
24、X=余数,5.BCD码调整指令,共6条,均为隐含寻址方式,隐含的操作数是 AL或AL、AH;不能单独使用,要紧跟在相应的算术运算指令 之后;执行结果为压缩BCD码或扩展BCD码表示的十进制数。,加法指令应用例,计算2658+3619=?结果存放在SUM单元设被加数和加数的每一位都以ASCII码形式存放在内存中,低位在前,高位在后。,36H,32H,39H,31H,STRING1,STRING2,38H,35H,36H,33H,数据段,SUM,.,.,加法指令应用例,LEA SI,STRING1 LEA DI,STRING2 LEA BX,SUM MOV CX,4 CLCNEXT:MOV AL,SI ADC AL,DI AAA MOV BX,AL,INC SI INC DI INC BX DEC CX JNZ NEXT,