微机原理与接口技术指令系统.ppt
《微机原理与接口技术指令系统.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术指令系统.ppt(109页珍藏版)》请在三一办公上搜索。
1、2023/10/13,1,微机原理与接口技术,第三章 指令系统,2023/10/13,2,第一节 指令的基本结构和执行时间,指令指令系统80868088CPU的指令系统共包含92种基本指令,按照功能可将它们分为6大类:数据传送指令 算术运算指令 逻辑运算和移位指令 串操作指令 控制转移指令 处理器控制指令,2023/10/13,3,8086指令的一般格式如下:操作码 操作数,操作数操作数主要分为3类:立即数操作数、寄存器操作数 存储器操作数。,2023/10/13,4,表3-2 隐含及允许超越的段寄存器存储器操作的类型 隐含的段寄存器 允许超越的段寄存器 偏移地址取指令 CS 无 IP堆栈操作
2、 SS 无 SP通用数据读写 DS CS,ES,SS 有效地址源数据串 DS CS,ES,SS SI目标数据串 ES 无 DI用BP作为基址寄存器 SS CS,DS,ES 有效地址,2023/10/13,5,指令的执行时间一条指令的执行时间包括取指令、取操作数、执行指令及传送结果几部分,单位用时钟周期表示 寄存器操作数的指令执行速度最快,立即数操作数次之,存储器操作数指令的执行速度最慢,2023/10/13,6,第二节 8086的寻址方式,一、立即寻址(Immediate Addressing)主要用于给寄存器或存储单元赋初值 MOV AX,3508H,2023/10/13,7,二、直接寻址(
3、Direct Addressing)直接寻址指令在指令的操作码后面直接给出操作数的16位偏移地址。此偏移地址也称为有效地址EA(Effective Address),与指令的操作码一起,存放在内存的代码段.低8位存放在低地址单元,高8位存放在高地址单元。,2023/10/13,8,直接寻址:MOV AX,3200H如果DS=5000H,则所寻找的操作数的物理地址:5000H10H+3200H=50000H+3200H=53200H,2023/10/13,9,段超越:MOV BX,ES:2100H,2023/10/13,10,三、寄存器寻址(Register Addressing)操作数为CPU
4、的内部寄存器 指令在执行过程中不必通过访问内存而取得操作数,因此执行速度很快。MOV DS,AX,2023/10/13,11,四、寄存器间接寻址(Register Indirect Addressing)MOV AX,DI 指令中的16位寄存器的内容不是操作数,而是操作数的偏移地址,操作数本身则在存储器中。可用的寄存器有四个,分别是:SI、DI、BX和BP,但如果使用不同的间址寄存器,则相应的段寄存器有所不同,2023/10/13,12,1选择SI、DI、BX作为间址寄存器操作数在数据段(没有使用段超越时)MOV AX,DI 若已知(DS)=5000H,(DI)=1600H,则操作数的物理地址
5、为:5000H10H+1600H=51600H 执行的结果为(AX)=789AH,2023/10/13,13,2选择BP作为间址寄存器 操作数在堆栈段(没有使用段超越时)MOV BP,AX 若已知(SS)=6000H,(BP)=1500H,则操作数的物理地址为:6000H10H+1500H=61500H 若已知(AX)=5566H,则指令的执行结果为:66H送到61500H内存单元,55H送到61501H内存单元,2023/10/13,14,无论用SI、DI、BX或BP作为间址寄存器,都允许段超越。MOV ES:DI,AX MOV DX,DS:BP,2023/10/13,15,五、变址寻址(I
6、ndexed Addressing)以指定的寄存器内容,加上指令中给出的8位或16位位移量(必须要以一个段寄存器作为基地址),作为操作数的地址。作为变址寻址的寄存器可以是SI、DI、BX、BP四个寄存器中的任一个,若用SI、DI和BX作为变址寄存器,操作数在数据段,即段地址在DS寄存器;若用BP变址,则操作数在堆栈段,即段地址在SS寄存器 MOV AX,2000HSI 若(SI)=1200H,(DS)=1500H,则操作数的地址为18200H,2023/10/13,16,变址寻址方式,2023/10/13,17,六、基址变址寻址(Based Indexed Addressing)将BX和BP看
7、作基址寄存器,将SI和DI看作变址寄存器。基址加变址的寻址方式:把一个基址寄存器(BX或BP)的内容加上一个变址寄存器(SI或DI)的内容,再加上指令中指定的8位或16位位移量(必须要以一个段寄存器作为地址基址),作为操作数的地址 MOV AX,1050HBXSI,2023/10/13,18,MOV AX,1050HBXSI若(BX)=2000H,(SI)=1600H,(DS)=1200H,指令中给出的偏移量为1050H,则源操作数的物理地址为16650H 若用BX作为基址寄存器,则段寄存器为DS,操作数在数据段中;若用BP作为基址寄存器,则段寄存器为SS,操作数在堆栈段中。,2023/10/
8、13,19,基址加变址的寻址方式,2023/10/13,20,第三节 8086的指令系统,数据传送(Data transfer)算术运算(Arithmetic)逻辑运算和移位(Logic)串操作(String manipulation)控制转移(Control transfer)处理器控制(Processor control),2023/10/13,21,OPRD 泛指各种类型的操作数mem 存储器操作数acc 累加器操作数dest 目的操作数src 源操作数disp 8位或16位偏移量,可用符号地址表示DATA 8位或16位立即数port 输入输出端口,可用数字或表达式表示()表示寄存器的内
9、容 表示存储单元的内容或偏移地址,2023/10/13,22,一、数据传送类指令,按功能可分为以下4小类:通用数据传送指令 输入输出指令 目标地址传送指令 标志传送指令,2023/10/13,23,1.通用数据传送指令(General Purpose Transfer)一般传送指令MOV 堆栈操作指令PUSH和POP 交换指令XCHG 查表转移指令XLAT 字位扩展指令,2023/10/13,24,一般传送指令MOV(Movement)MOV dest,src;(dest)(src)既可传送字节操作数(8位),也可传送字操作数(16位);可使用本章讨论过的各种寻址方式;可实现以下各种传送:,2
10、023/10/13,25,MOV可实现的各种传送:,寄存器与寄存器之间的传送:MOV AL,CL 寄存器与段寄存器之间的传送:MOV DS,AX 寄存器与存储器之间的传送:MOV 3000H,AX 立即数到寄存器的传送:MOV AL,20H 立即数到存储器的传送:MOV BYTE PTRBP+SI,20H 存储器与段寄存器之间的传送:MOV DS,2000H,2023/10/13,26,使用MOV指令完成数据传送时需注意几点:,MOV指令的两个操作数的类型必须相同 MOV AX,DL 不能用一条MOV指令完成两个存储器单元之间的数据传送 MOV BX,SI 不能用立即数直接给段寄存器赋值 MO
11、V DS,DATA 不能在段寄存器之间进行直接数据传送 MOV DS,ES 通常不要求用户用MOV指令修改代码段寄存器CS和指令指针寄存器IP的内容,但CS可以作为源操作数,2023/10/13,27,堆栈操作指令PUSH和POP(Push word onto stack,Pop word off stack)堆栈是内存中一个特定的区域,用以存放寄存器或存储器中暂时不用但又必须保存的数据。,2023/10/13,28,堆栈操作需要遵循以下原则:,堆栈的存取每次必须是一个字(16位);向堆栈中存放数据时,总是从高地址向低地址方向增长,从堆栈取数据时正好相反;堆栈指令中的操作数只能是寄存器或存储器
12、操作数,而不能是立即数;堆栈段在内存中的位置由SS决定,堆栈指针SP总是指向栈顶,即SP的内容等于当前栈顶的偏移地址。在压入操作数之前,SP先减2。每弹出一个字,SP加2;对堆栈的操作遵循“后进先出(LIFO:Last In First Out)”的原则。最后压人堆栈的数据会最先被弹出。,2023/10/13,29,堆栈示意图,2023/10/13,30,堆栈操作指令PUSH,POP,PUSH src;src的高8位(SP)-1;src的低8位(SP)-2;(SP)-2(SP)POP dest;SPdest的低8位;SP+1dest的高8位;(SP)+2(SP),2023/10/13,31,指
13、令中,操作数src和dest可以是以下三种类型:寄存器(包括数据寄存器、地址寄存器和变址寄存器);段寄存器(CS除外。PUSH CS指令是合法的;而POP CS是非法的);存储器单元,2023/10/13,32,PUSH AX指令执行示意图,2023/10/13,33,POP AX指令执行示意图,2023/10/13,34,交换指令XCHG(Exchange),指令格式及操作:XCHG dest,src;(dest)(src)源操作数和目标操作数均可以是寄存器或存储器,但不能同时为存储器。即可以在寄存器与寄存器之间、寄存器与存储器之间进行交换,但不能在存储器与存储器之间进行交换。不能为段寄存器
14、操作数。即段寄存器的内容不能参加交换。两个操作数的字长必须相同,可以是字节交换,也可以是字交换。,2023/10/13,35,查表转移指令XLAT(Translate),指令格式与操作:XLAT;(AL)(BX)+(AL)或:XLAT src_table(src_table表示要查找的表的首地址)可以根据表中元素的序号查出表中相应元素的内容应预先将要查找的这类代码排成一个表存放在内存的某个区域中。将表的首地址(偏移地址)送BX寄存器,要查找的元素的序号送AL,表中第一个元素的序号为0,然后依次为1,2,3,。执行XLAT指令后,标中指定序号的元素存于AL,2023/10/13,36,例:,现要
15、查出数值6对应的ASCII码 LEA BX,Hex_table;(BX)表的首地址 MOV AL,6;(AL)6 XLAT;查表转换结果为(AL)=36H,为6所对应的ASCII码。,2023/10/13,37,字位扩展指令,操作数扩展的规则是:扩展时在高位添加符号位,即将符号位扩展到整个高8位(或高16位)。例如,要把有符号数35H扩展为一个字,则结果为0035H;而如果要扩展的数是81H,则结果为FF81H。,2023/10/13,38,CBW(Convert Byte to Word),CBW;若(AL)80H,则(AH)=00H;否则(AH)=FFH。CBW将一个字节的数(8位)扩展为
16、一个字长的数(16位)。指令中隐含了操作数AL和AH。CBW指令不影响标志位。例如,把字节9AH扩展为字的语句如下:MOV AL,9AH CBW其结果为:(AX)=FF9AH。,2023/10/13,39,CWD(Convert Word to Double word),CWD;若(AX)8000H,则(DX)=0000H;否则(DX)=FFFFH。CWD将一个字操作数(16位)扩展为一个双字(32位)。指令中隐含了操作数AX和DX,扩展后的高16位放在DX中。CWD指令也不影响标志位。例如,把字25ABH扩展为双字的语句如下:MOV AX,25ABH CWD其结果为:(DX:AX)=0000
17、25ABH,2023/10/13,40,输入输出指令(Input and Output),输入指令IN用于从外设端口接收数据,输出指令OUT向外设端口发送数据。无论接收到的数据或准备发送的数据,都必须在累加器AX(字)或AL(字节)中 直接寻址方式:当I/O端口地址为8位二进制时,在指令中直接给出此端口地址。它允许寻址256个端口,端口地址为0FFH。DX寄存器间接寻址方式:当I/O端口地址为16位二进制时,用DX寄存器间接寻址。它可寻址64K个端口,端口地址为0FFFFH。,2023/10/13,41,输入指令IN(Input byte or word)IN acc,port;port为8位
18、立即数表示的端 口地址,直接寻址或 IN acc,DX;DX给出16位端口地址,间接寻址 输出指令OUT(Output byte or word)OUT port,acc;port为8位立即数表示的端口地址,直接寻址或OUT DX,acc;DX给出16位端口地址,间接寻址,2023/10/13,42,例 将一个字节3BH输出到端口地址78A0H,MOV AL,3BH;将要输出的字节送入累加器ALMOV DX,78A0H;将16位端口地址送入DX进行间址OUT DX,AL;将AL中的一个字节输出到DX所指定的16位端口地址,2023/10/13,43,目标地址传送指令(Address-Objec
19、t Transfer),取偏移地址指令LEA(Load Effective Address)LEA reg16,mem指令指令中的源操作数必须为存储器操作数,目标操作数必须为16位通用寄存器,指令的执行结果是把源操作数的有效地址(即16位偏移地址)送到目标寄存器。例如:LEA BX,BUFFER,2023/10/13,44,注意LEA指令和MOV指令的区别:LEA BX,BUFFER MOV BX,BUFFER 以下两条指令的效果相同:LEA BX,BUFFER MOV BX,OFFSET BUFFER,2023/10/13,45,LDS(Load pointer using DS)LDS r
20、eg16,mem32;(reg16)(mem32)+1:(mem32);(DS)(mem32)+3:(mem32)+2)指令中源操作数mem32为存储器操作数,目标操作数为16位通用寄存器。LDS指令把存储器mem32中存放的一个32位远地址指针(包括偏移地址和段地址)送到reg16和DS。四个存储单元的前两个单元的内容作为偏移地址送到reg16,后两个单元的内容作为段地址送到段寄存器DS。,2023/10/13,46,例,设(DS)=6000,内存地址为60348H开始的4个单元中存放了一个32位的远地址指针98011H。LDS SI,0348H MOV AX,SI 上述第一条指令执行后的结
21、果为:(SI)=8011H,(DS)=9000H。第二条指令的执行结果为:(AX)=3412H,2023/10/13,47,LES(Load pointer using ES)LES指令的格式及功能与LDS相似,两个高地址单元中给出的段地址送ES。,2023/10/13,48,标志传送指令(Flag Register Transfer),LAHF(Load AH from Flags)该指令将标志寄存器FLAGS中的五个标志位,即符号标志SF、零标志ZF、辅助进位标志AF、奇偶标志PF以及进位标志CF分别传送到累加器AH的对应位。LAHF指令不影响标志位。,2023/10/13,49,SAHF
22、(Store AH into Flags)SAHF指令的传送方向与LAHF相反,将AH寄存器的第7、6、4、2、0位分别传送到标志寄存器的对应位。SAHF指令影响标志位,FLAGS寄存器中的SF、ZF、AF、PF和CF将被修改成AH寄存器对应位的状态,但其余标志位不受影响。,2023/10/13,50,PUSHF(Push Flags onto stack)PUSHF指令是将标志寄存器FLAGS压入堆栈。指令本身不影响标志位。SP-1(FLAGSH)SP-2(FLAGSL)(SP)(SP)-2POPF(Pop Flags off stack)POPF指令将堆栈中当前栈顶的两个单元的内容弹出到标
23、志寄存器FLAGS中。POPF指令影响标志位(FLAGSL)SP(FLAGSH)SP+1(SP)(SP)+2,2023/10/13,51,算术运算指令,8086/8088提供了加、减、乘、除4组基本的算术运算指令,既可以用于字节运算,也可以用于字运算;既可用于无符号数运算,也可用于带符号数运算。若是带符号数,用补码表示。8086/8088还提供了各类校正操作指令,可以进行十进制的算术运算。,2023/10/13,52,加法运算指令,不带进位的加法指令ADD带进位的加法指令ADC加1指令INC两条加法调整指令:AAA和DAA。,2023/10/13,53,不带进位的加法指令ADD(Additio
24、n),ADD OPRD1,OPRD2;(OPRD1)(OPRD1)+(OPRD2)ADD加法指令影响标志位源操作数和目标操作数可以是寄存器操作数或存储器操作数,源操作数还可以是立即数;操作数可以是无符号数,也可以是带符号数。需注意两点:一是源操作数与目标操作数不能同时为存储器操作数,二是不能对段寄存器进行运算,2023/10/13,54,带进位的加法指令ADC(Add with carry),ADC OPRD1,OPRD2;(OPRD1)(OPRD1)+(OPRD2)+(CF)ADC指令与ADD指令在格式、功能及对标志位的影响等方面都类似,只是在ADC指令中,CF也要参加求和运算ADC指令主要
25、用于多字节数据的加法运算。如果低字节相加时产生进位,则在下一次高字节相加时应将此进位加进去,2023/10/13,55,加1指令INC(Increment by 1),INC OPRD;(OPRD)(OPRD)+1INC指令对指定的操作数加1,再送回到该操作数。在指令中,操作数OPRD可以是寄存器操作数,也可以是存储器操作数;可以是8位,也可以是16位。但不能是段寄存器,也不能是立即数 INC指令不影响CF标志位,但会影响其他5个状态标志位AF、OF、PF、SF和ZF。INC指令通常用在循环程序中修改地址指针及循环次数等,2023/10/13,56,压缩BCD加法的十进制调整指令DAA(Dec
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机原理与接口技术 指令系统 微机 原理 接口 技术
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6284422.html