指令系统1学习.pptx
《指令系统1学习.pptx》由会员分享,可在线阅读,更多相关《指令系统1学习.pptx(289页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 (1)操作数位于指令区,即操作数包含在指令中,只要取出该指令进行操作,就会寻到紧随其后的操作数,这种操作数称为立即数。(2)操作数位于CPU的某一个内部寄存器中,指令中的操作数是寄存器名,只要知道寄存器的地址(编号)就可寻到操作数,这种操作数称为寄存器操作数。(3)操作数位于存储器数据区或堆栈区的某个单元中,指令中以不同的方式给出了存储单元的地址,只要知道了存储单元的地址就可以寻到操作数,这种操作数称为存储器操作数。第1页/共289页 (4)操作数位于I/O端口中,指令中以直接或间接的方式给出I/O端口的地址,只要知道I/O端口的地址就可以寻到I/O端口操作数。指令中寻找操作数的方式就是寻址
2、方式。根据操作数位于计算机中的不同地方,常用的寻址方式有立即寻址、寄存器寻址、存储器和I/O端口寻址。其中存储器寻址又包括直接寻址、寄存器间接寻址、变址寻址和基址加变址寻址,如图4.1所示。第2页/共289页图4.1 寻址方式分类第3页/共289页4.1.1 立即寻址 操作数直接出现在指令中的寻址方式称为立即寻址。立即数可以是8位或者16位的整数,如果是16位立即数,存放时低8位在前(低地址部分),高8位在后(高地址部分)。例如:MOV BL,80H MOV AX,2008H第4页/共289页图4.2 立即寻址方式第5页/共289页立即数在指令中只能作为源操作数。立即寻址方式主要用于给寄存器或
3、存储单元赋初值,但是段寄存器与标志寄存器除外,为了给段寄存器传送数据,应先将立即数赋给一个通用寄存器,然后再由通用寄存器传送给段寄存器。例如:MOV AX,1234H;AX1234H MOV SS,AX;SS(AX)第6页/共289页4.1.2 寄存器寻址l操作数位于CPU内部寄存器,寄存器名出现在指令中。l寄存器可以是8位和16位的。l对于8位的寄存器,只能是AH、AL、BH、BL、CH、CL、DH和DL。l对于16位的寄存器可以是8个通用寄存器。l一条指令中源操作数与目的操作数都可以使用寄存器寻址,但二者必须等长。例如:MOV BX,AX第7页/共289页其执行情况如图4.3所示。由于寄存
4、器操作数位于CPU内部,寻址过程不涉及总线操作,因此寄存器寻址方式速度较快。图4.3 寄存器寻址方式第8页/共289页4.1.3 直接寻址 存储单元的地址由两部分构成,即段的基地址和段内偏移量。指令中只提供段内偏移量,又称有效地址EA。EA的构成方式有多种,形成了多种存储器寻址方式。操作数地址的16位段内偏移量包含在指令中,即EA直接由指令提供,这种寻址方式称为直接寻址。操作数所在单元的物理地址就为数据段寄存器DS加上指令中提供的16位段内偏移量。第9页/共289页例如:MOV AX,3000H 注意表示有效地址的16位数必须加上方括号,另外指令完成的功能不是将数3000H,传送到累加器AX,
5、假设数据段寄存器DS=2000H,则该存储器单元的物理地址为 2000H10H+3000H20000H+3000H23000H 操作数物理地址的形成以及指令执行情况如图4.4所示,指令执行后AX中的内容为3412H。第10页/共289页图4.4 直接寻址方式第11页/共289页段超越,即允许用CS、SS或ES作为段寄存器,例如:MOV BX,ES:3000H4.1.4 寄存器间接寻址 操作数位于存储器中,而操作数所在存储单元的16位偏移量即有效地址EA则位于寄存器中。可以存放有效地址的寄存器有4个,即SI、DI、BX和BP。当选择不同的间址寄存器时,隐含的段寄存器有所不同。第12页/共289页
6、1.选择SI、DI和BX作为间址寄存器 隐含段寄存器为DS,例如:MOV AX,SI 假设数(DS)=3100H,(SI)=0100H,则存储器单元的物理地址为 3100H10H+0100H31000H+0100H31100H 操作数物理地址的形成以及指令执行情况如图4.5所示。第13页/共289页图4.5 SI寄存器间接寻址 第14页/共289页2.选择BP作为间址寄存器 隐含段寄存器为SS,例如:MOV BP,AX (AX)=5678H,(SS)=2500H,(BP)=1000H,则存储器单元的物理地址为 2500H10H+1000H25000H+1000H26000H操作数物理地址的形成
7、以及指令执行情况如图4.6所示,指令执行后26000H单元中的内容为78H,26001H单元中的内容为56H。第15页/共289页图4.6 BP寄存器间接寻址 第16页/共289页 注意:p用作间接寻址的寄存器必须加上方括弧。p无论用SI、DI、BX或者BP作为间址寄存器,都允许段超越,例如:MOV ES:BX,AX MOV BX,DS:BP 这两条指令分别改变了各自的隐含段寄存器。8086中关于隐含段寄存器的约定以及允许段超越的说明见表4-1。第17页/共289页 表4-1 访问存储器时段寄存器的约定 存储器操作的类型存储器操作的类型隐含的段寄存器隐含的段寄存器允许超越的段寄存器允许超越的段
8、寄存器有效地址有效地址取指令取指令CS无无IP堆栈操作堆栈操作SS无无SP通用数据读取通用数据读取DSCS,ES,SS有效地址有效地址EA源数据串源数据串DSCS,ES,SSSI目的数据串目的数据串ES无无DI用用BP作为基址寄存器作为基址寄存器SSCS,DS,ES有效地址有效地址EA第18页/共289页4.1.5 变址寻址 变址寻址又称作寄存器相对寻址,有效地址EA为指定寄存器的内容与指令中给定的8位或16位位移量(disp)的和,位移量的取值范围为-32768+32767。可以用作变址寻址的寄存器有4个,即SI、DI、BX和BP。当选择不同的变址寄存器时,隐含的段寄存器有所不同,分两种情况
9、。第19页/共289页1.选择SI、DI和BX作为变址寄存器 隐含段寄存器为DS。例如:MOV AX,SI+1200H (DS)=2000H,(SI)=1500H,则存储器单元的物理地址为 2000H10H+1500H+1200H20000H+1500H+1200H 22700H 操作数物理地址的形成以及指令执行情况如图4.7所示,指令执行后AX中的内容为8967H。第20页/共289页图4.7 SI寄存器变址寻址 第21页/共289页2.选择BP作为变址寄存器 隐含段寄存器为SS。操作数的物理地址为SS的内容左移4位,加上BP中的内容,再加上指令中给定的8位或16位的位移量。例如:MOV B
10、P+2100H,AX 假设(AX)=9ACDH,(SS)=3000H,(BP)=2000H,则存储器单元的物理地址为 3000H10H+2000H+2100H30000H+2000H+2100H 34100H 操作数物理地址的形成以及指令执行情况如图4.8所示。第22页/共289页图4.8 BP寄存器变址寻址第23页/共289页 注意变址寻址指令可以有几种不同的形式,例如以下3种写法就能实现相同的功能。MOV AL,BP+disp MOV AL,BP+disp MOV AL,dispBP 另外,无论用SI、DI、BX或者BP作为变址寄存器,都允许段超越,即改变隐含段寄存器。第24页/共289页
11、4.1.6 基址加变址寻址 有效地址EA为指定基址寄存器(BX或BP)的内容与指定变址寄存器(SI或DI)内容的和,再加上指令中给定的8位或16位位移量(disp),位移量的取值范围为-32768+32767。隐含的段寄存器,由所用的基址寄存器决定,当使用BX存放基地址时,隐含段寄存器为DS,当使用BP时,隐含段寄存器为SS。例如:MOV AX,1100HBXDI第25页/共289页 假设(DS)=2000H,(BX)=0100H,(DI)=1500H,则存储器单元的物理地址为 2000H10H+0100H+1500H+1100H 20000H+0100H+1500H+1100H22700H操
12、作数物理地址的形成以及指令执行情况如图4.9所示,指令执行后AX中的内容为1357H。第26页/共289页图4.9 基址加变址寻址方式 第27页/共289页注意以下6种写法可实现相同的功能。MOV AL,disp BPSI MOV AL,BP+dispSI MOV AL,BP+SI+disp MOV AL,BP disp SI MOV AL,BP+SI disp MOV AL,dispSIBP基址加变址寻址指令允许段超越,即改变隐含段寄存器。另外,不允许将两个基址寄存器或者两个变址寄存器组合在一起寻址。第28页/共289页 当操作数位于I/O端口寄存器中,8086 CPU可以通过直接和间接的方
13、式来进行操作数的寻址。p直接寻址方式,I/O端口的地址以8位立即数的形式在指令中直接给出,能够寻址的端口号在0255的范围内,即能够寻址256个端口。例如:IN AL,60H第29页/共289页p间接寻址方式,16位的I/O端口的地址必须存放在DX寄存器中,即通过DX间接寻址,这种方式能够寻址的端口号范围为065535,共计64K个端口。例如:MOV DX,0360H IN AL,DX 上述指令将地址为0360H的端口中的内容送至累加器AL。第30页/共289页 微处理器指令的分类很多,按指令功能可以分为数据传送类指令、数据处理类指令、程序控制类指令、CPU控制类指令以及为提高计算机求解专门问
14、题的效率或简化程序而增设的其他指令。8086的指令按功能可以分为6类:数据传送指令、算术运算指令、逻辑运算和移位指令、串操作指令、控制转移指令和处理器控制指令。第31页/共289页4.2.1 数据传送指令(Data Transfer)数据传送是一种最基本、最主要的操作,数据传送指令在程序中占着极大的比例,数据传送指令是应用最频繁的、寻址方式最多的、也是数量最多的一类指令。8086CPU数据传送指令可分为通用数据传送指令、交换指令、堆栈操作指令、地址传送指令、累加器专用传送指令和标志寄存器传送指令,共14条。第32页/共289页1.通用数据传送指令(General Purpose Transfe
15、r)1)传送指令(Movement)指令格式:MOV DST,SRC 指令功能:把源操作数SRC的内容传送给目的操作数DST。可以进行字节数据、字数据的传送,但是源和目的操作数必须等长。源操作数可以是通用寄存器、段寄存器、存储器或立即操作数;目的操作数可以是通用寄存器、段寄存器(CS除外)或存储器,立即数不能作为目的操作数,且两者不能同时为存储器操作数。第33页/共289页图4.10 传送指令传送方向示意图第34页/共289页MOV CL,05H ;立即数向通用寄存器传送MOV BX,2008H;立即数向存储器单元传送MOV SI,BP ;通用寄存器之间传送MOV DS,AX ;通用寄存器向段
16、寄存器传送MOV BX,ES ;段寄存器向通用寄存器传送MOV DS,SI+BX ;存储单元向段寄存器传送MOV BP,ES ;段寄存器向存储单元传送MOV AX,2008H;存储单元向通用寄存器传送MOV 1234H,BX;通用寄存器向存储单元传送第35页/共289页使用MOV指令应注意:(1)立即数只能作为源操作数。(2)CS只能作为源操作数,不能作为目的操作数。(3)CPU中的寄存器除IP外都可通过MOV指令访问。(4)立即数不能直接传送到段寄存器,但可通过其他寄存器或堆栈传送。(5)段寄存器之间不能直接传送。(6)两个存储单元之间不能直接传送。第36页/共289页【例4.1】将存储单元
17、3000H的内容送至4000H单元。MOV AX,3000H MOV 4000H,AX【例4.2】将累加器AX与寄存器CX中的内容对调。MOV BX,AX MOV AX,CX MOV CX,BX【例4.3】判断指令正误。MOV CS,AX 错 MOV AX,CS 对 MOV SS,SP 对 MOV AX,ES 对 MOV DS,CS 错 MOV AX,BL 错第37页/共289页2)堆栈操作指令 在介绍堆栈操作指令之前,首先解释什么是堆栈以及为什么要用堆栈。在微机中,堆栈实质上就是一个按照后进先出(Last-in,First-out)原则组织的一段内存区域。堆栈的构造如图4.13所示。第38页
18、/共289页图4.11 子程序调用示意图 图4.12 子程序嵌套示意图第39页/共289页图4.13 堆栈示意图第40页/共289页 堆栈的一端是固定的,另一端是浮动的。堆栈的固定端是堆栈的底部,称为栈底。堆栈的浮动端可以推入或弹出数据。向堆栈推入数据时,堆放在堆栈顶部,称为栈顶。从堆栈弹出数据时,栈顶的数据最先弹出,而最先推入的数据则最后弹出。为了指示现在堆栈中存放数据的位置,通常设置一个堆栈指针SP,它始终指向堆栈的顶部。当一个字节的数据被推入堆栈时,SP自动减1,向上浮动而指向新的栈顶;当一个字节的数据被弹出堆栈时,SP自动加1,向下浮动而指向新的栈顶。第41页/共289页 在8086系
19、统中,建立堆栈就是规定堆栈底部在存储器中的位置,用户可以通过数据传送指令将堆栈底部的地址设置在堆栈指针SP和堆栈段寄存器SS中,这时,栈中无数据,堆栈顶部与底部重叠,是一个空栈。例如:MOV AX,2000H MOV SS,AX;初始化SS段寄存器 MOV SP,56H;初始化SP指针第42页/共289页(1)入栈指令(Push Word onto Stack)指令格式:PUSH SRC 指令功能:PUSH指令将16位的源操作数推入堆栈,先存入高字节,再存入低字节,而目标地址为SP指向的栈顶单元,源操作数可以是寄存器、段寄存器或存储器。例如:PUSH AX 其执行过程如图4.14所示。第43页
20、/共289页 入栈操作分两步:第一步先将堆栈指示器的内容减1,即栈顶向低地址方向移动一个单元,指向新的栈顶,然后把高字节推入堆栈指示器所指向的栈顶单元,即 SP(SP)1;(SP)AH中的高字节数据 第二步,将堆栈指示器的内容再减1,然后把低字节数据推入当前的栈顶单元,即 SP(SP)1;(SP)AL中的低字节数据第44页/共289页(2)出栈指令(Pop Word off Stack)指令格式:POP DST 指令功能:POP指令将SP指示的栈顶两字节数据传送给目的操作数DST,目的操作数可以是寄存器、段寄存器或存储器。例如:POP AX 其执行过程如图4.15所示。出栈的操作顺序与入栈相反
21、,第一步 AL(SP);SP(SP)+1第二步 AH(SP);SP(SP)+1 第45页/共289页图4.14 入栈示意图 图4.15 出栈示意图 第46页/共289页注意:PUSH和POP指令只能是字操作(16位的操作数),入栈或出栈一个字数据后,SP的修改必须是加2或减2。PUSH和POP指令不能使用立即数方式。POP指令的操作数不允许是CS寄存器。PUSH和POP指令都不影响标志位。PUSH和POP指令互为逆操作,在编程中应使两条指令成对使用,已达到“栈 平衡”。第47页/共289页【例4.4】将AX、BX寄存器的内容分别传送给CX、DX寄存器。PUSH AX ;AX入栈 PUSH BX
22、 ;BX入栈 POP DX ;将后入栈的BX内容弹出到DX寄存器 POP CX ;将先入栈的AX内容弹出到CX寄存器第48页/共289页【例4.5】假设(DX)=052CH,(AX)=6789H,(SS)=3000H,试分析顺序执行以下3条指令的结果。MOV SP,123DH PUSH AX PUSH DX 执行第一条指令后,(SP)=123DH;执行第二条指令后,(3123CH)=67H,(3123BH)=89H;执行第三条指令后,(3123AH)=05H,(31239H)=2CH。第49页/共289页3)交换指令(Exchange)指令格式:XCHG DST,SRC 指令功能:将两个操作数
23、进行字节或字数据的相互交换,即(DST)(SRC)。操作数既可以是通用寄存器,也可以是存储单元,但不能同时为存储器单元。使用交换指令时应注意:(1)不允许使用段寄存器。(2)不影响标志位。第50页/共289页图4.16 交换指令传送方向示意图第51页/共289页 XCHG AX,BX;(AX)(BX)XCHG AH,BL;(AH)(BL)XCHG CX,DI;(CX)(DI)【例4.7】假设(AX)=5566H,(BX)=0F23H,(SI)=0010H,(DS)=1000H,(10F33H)=2002H,写出下列指令执行的结果。XCHG AH,AL;执行前(AH)=55H,(AL)=66H;
24、执行后(AH)=66H,(AL)=55HXCHG AX,BX+SI ;执行前(AX)=5566H,;(10F33H)=2002H;执行后(AX)=2002H,(10F33H)=5566H第52页/共289页2.累加器专用传送指令 累加器(AC)专用传送指令包括I/O数据传送指令IN/OUT和字节转换指令XLAT,I/O数据传送指令用于完成累加器AL/AX与I/O端口(Port)之间的传送数据。在8086指令系统中,I/O数据传送指令对I/O端口的寻址可以采用直接与间接两种方式;字节转换指令XLAT用于完成存储器中一个字节的编码转换。第53页/共289页1)输入指令(Input Byte or
25、Word)指令格式:IN AC,Port IN AC,DX 指令功能:将指定端口中的内容传送到累加器AX/AL中,可以是直接寻址或间接寻址,可以是字节操作或字操作。例如:IN AL,20H ;AL端口20H的内容 IN AX,80H ;AX端口80H的内容 IN AL,DX ;AL端口(DX)的内容 IN AX,DX ;AX端口(DX)的内容第54页/共289页2)输出指令(Out Byte or Word)指令格式:OUT Port,AC OUT DX,AC 指令功能:将累加器AX/AL中的内容传送到指定端口中,可以是直接寻址或间接寻址,可以是字节操作或字操作。例如:OUT 30H,AL ;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 指令系统 学习
限制150内