微机原理与接口技术(第3版)课件 第3章 8086指令系统-part1_第1页
微机原理与接口技术(第3版)课件 第3章 8086指令系统-part1_第2页
微机原理与接口技术(第3版)课件 第3章 8086指令系统-part1_第3页
微机原理与接口技术(第3版)课件 第3章 8086指令系统-part1_第4页
微机原理与接口技术(第3版)课件 第3章 8086指令系统-part1_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

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

文档简介

微机原理与接口技术第3章8086/8088指令系统目录3.1寻址方式3.2传送指令3.3算术运算指令3.4逻辑运算指令3.5移位指令3.6处理器控制指令、标志位处理指令33.1寻址方式概述隐含于机器指令内处理的数据在什么地方?要处理的数据有多长?操作码操作数……操作数指令的一般格式:微型计算机的组成部分有哪些?4操作码操作数……操作数计算机要执行的操作(助记符)操作数本身操作数地址或地址的一部分指向操作数地址的指针其它有关操作数的信息如何寻找操作数就是寻址方式对应不同的寻址方式(7种)3.1寻址方式概述5符号含义REG,REG8,REG16寄存器,8位寄存器,16位寄存器SREG段寄存器MEM内存操作数idata立即数ACC累加器(AX,或者AH、AL)EA/SA

偏移地址/段地址符号约定3.1寻址方式概述63.1寻址方式概述AHALBHBLCHCLDHDL15870AX累加器BX基址寄存器CX计数寄存器DX数据寄存器通用寄存器DISIBPSP目的变址寄存器源变址寄存器基址指针寄存器堆栈指针寄存器指针寄存器变址寄存器FRIP标志寄存器指令指针寄存器CSDSSSES代码段寄存器数据段寄存器堆栈段寄存器附加段寄存器段寄存器寄存器73.1寻址方式立即寻址一般形式汇编指令机器码(低字节在前)用C语言描述MOVAX,10HB81000HAX=16MOVAL,28HB028HAL=40操作数直接放在指令中,紧跟在操作码后,与操作码一起放在代码段源操作数目的操作数83.1寻址方式立即寻址举例说明B8H10H00HB0H28H操作码操作数操作码操作数MOV AX,10HAHAL10H00HMOV AL,28HAL28H代码段9立即数只能作源操作数,不能作目的操作数。立即数应与目的操作数的长度一致立即数默认采用十进制,采用十六进制数以“H”为后缀,2进制数以“B”为后缀。以十六进制形式出现的立即数,若以字母开头,需以数字0为前缀。立即数只能是整数,不能是小数或其他类型的数据。注意事项MOV12H,AL

MOVAL,1234H

MOVBH,11MOVBH,11HMOVBH,00110101BMOVBH,0FFH3.1寻址方式立即寻址10一般形式汇编指令机器码(低字节在前)用C语言描述指令执行前数据的位置

MOVAX,BXB9D8HAX=BXCPU内寄存器BXMOVAL,BL88DBHAL=BLCPU内寄存器BL操作数包含在CPU的内部寄存器中,如寄存器AX、BX、CX、DX等。寄存器可以是8位或者16位。3.1寻址方式寄存器寻址注意事项源操作数的长度必须与目的操作数一致。16位操作数:AX,BX,CX,DX,DI,SI,SP和BP等8位操作数:AH,AL,BH,BL,CH,CL,DH和DL两个操作数不能同时为段寄存器目的操作数不能为CSMOVBX,AL

MOVSS,DS

MOVCS,AX

3.1寻址方式寄存器寻址12一般形式汇编指令机器码(低字节在前)指令执行前数据的位置

MOVAX,[2]A10200H内存的DS:2~3单元MOVAL,[2]A00200H内存的DS:2单元MOVBX,ES:[2]8B1E0200H

内存的ES:2~3单元

操作数在内存中,指令中以具体数值的形式(在[]中)给出操作数所在单元的有效地址EA。逻辑地址为段地址(SA):偏移地址(EA)。一般是代码段以外的内存空间段前缀3.1寻址方式直接寻址13举例说明A0H02H00H1234操作码代码段567810000H20000H20001H20002H20003H地址低位地址高位数据段2000HDSMOV AL,[0002H]20000H+0002H20002H偏移量左移4位(

16)AL56H字节地址8位操作数(字节型)3.1寻址方式直接寻址举例说明16位操作数(字型)A1H02H00H1234操作码代码段567810000H20000H20001H20002H20003H地址低位地址高位数据段2000HDSMOV AX,[0002H]20000H+0002H20002H偏移量左移4位AL56HAH78H字地址3.1寻址方式直接寻址15一般形式操作数在内存中操作数的16位EA包含在寄存器SI、DI、BP、BX中为了区别于寄存器寻址方式,指令中指定的寄存器名要用“[]”括起来。例如[SI]一般是代码段以外的内存空间MOV AX,[BX]MOV AX,BX寄存器寻址寄存器间接寻址3.1寻址方式寄存器间接寻址16操作数物理地址计算分成两种情况:以SI、DI、BX间接寻址,则通常操作数在现行数据段区域中,此时DS×16+REG为操作数的地址,REG表示寄存器可以是SI、DI、BX。以寄存器BP间接寻址,操作数在堆栈段中。即SS×16+BP作为操作数的地址。易错MOV AX,[BX];物理地址=DS×16+BXMOV AX,[BP];物理地址=SS×16+BP3.1寻址方式寄存器间接寻址17举例说明B8H04H1234操作码代码段567810000H21000H21001H21002H21003H数据段2000HDSMOV AX,[SI]20000H+1000H21000H左移4位MOV SI,1000H1000HSIAL12HAH34H3.1寻址方式寄存器间接寻址18寄存器相对寻址操作数在内存中,由指定的寄存器内容,加上指令中给出的8位或16位偏移量作为操作数的偏移地址。寄存器为四个寄存器SI、DI、BX、BP之一寻址方式含义[BX+idata]/idata[BX]EA=BX+idata,SA=DS[SI+idata]/idata[SI]EA=SI+idata,SA=DS[DI+idata]/idata[DI]EA=DI+idata,SA=DS[BP+idata]/idata[BP]EA=BP+idata,SA=SS3.1寻址方式寄存器相对寻址19举例说明B8H47H011234操作码代码段567810000H21000H21001H21002H21003H数据段2000HDSMOV AX,[BX+1]20000H1000H21001Hx16MOV BX,1000H1000HBXAL34HAH56H+0001H3.1寻址方式寄存器相对寻址20

一般形式操作数在内存中其偏移地址由“基址寄存器”+“变址寄存器”形成基址寄存器——BX(DS),BP(SS)变址寄存器——SI、DI寻址方式含义[BX+SI]/[BX][SI]EA=BX+SI,SA=DS[BX+DI]/[BX][DI]EA=BX+DI,SA=DS[BP+SI]/[BP][SI]EA=BP+SI,SA=SS[BP+DI]/[BP][DI]EA=BP+DI,SA=SS3.1寻址方式基址加变址寻址21举例说明8BH00H1234操作码代码段567810000H21000H21001H21002H21003H数据段2000HDSMOV AX,[BX+SI]20000H1000H21001H左移4位MOV BX,1000H1000HBXAL34HAH56H+0001HMOV SI,0001H0001HSI3.1寻址方式基址加变址寻址22

一般形式操作数在内存中偏移地址:基址寄存器+变址寄存器+相对偏移量寻址方式含义[BX+SI+idata]/idata[BX][SI]EA=BX+SI+idata,SA=DS[BX+DI+idata]/idata[BX][DI]EA=BX+DI+idata,SA=DS[BP+SI+idata]/idata[BP][SI]EA=BP+SI+idata,SA=SS[BP+DI+idata]/idata[BP][DI]EA=BP+DI+idata,SA=SS3.1寻址方式相对基址加变址寻址23举例说明8BH40H01H1234操作码代码段567810000H21000H21001H21002H21003H数据段2000HDSMOV AX,[BX+SI+1]20000H1000H21002H左移4位MOV BX,1000H1000HBXAL56HAH78H0001HMOV SI,0001H0001HSI+0001H3.1寻址方式相对基址加变址寻址直接寻址方式开始的寻址方式中,操作数都存放在除代码段以外的内存区域中。求操作数所在的有效地址,取得操作数。[idata]用一个常量来表示地址,可以用于直接定位一个内存单元;实际程序设计中多使用符号地址,直接地址不加方括号,类似于变量名。NUMDW3556

MOVAX,NUM是直接寻址变量定义,详见4.1.4节3.1寻址方式寻址方式小结内存操作数MEM变量名对应直接寻址3.1寻址方式寻址方式小结直接寻址方式开始的寻址方式中,操作数都存放在除代码段以外的内存区域中。求操作数所在的有效地址,取得操作数。[BX]用一个变量来表示内存地址,可以用于间接定位一个内存单元;26适用于对一串存储器操作数处理的程序(数组的访问),多为循环结构。

将数组的首地址存储寄存器(设置地址指针)MOVBX,1234HMOVAL,[BX]修改地址指针,加1INCBX3.1寻址方式寻址方式小结内存操作数MEM直接寻址方式开始的寻址方式中,操作数都存放在除代码段以外的内存区域中。求操作数所在的有效地址,取得操作数。[BX+idata]用一个变量和常量来表示地址,可以在一个起始地址的基础上用变量间接定位一个内存单元;27适用于对一串存储器操作数处理的程序(数组的访问),多为循环结构。将数组首地址以常量表示,地址指针初值为0MOVBX,0MOVAL,ARRAY[BX]修改地址指针,加1INCBX3.1寻址方式寻址方式小结内存操作数MEM直接寻址方式开始的寻址方式中,操作数都存放在除代码段以外的内存区域中。求操作数所在的有效地址,取得操作数。[BX+SI]用两个变量表示地址;[BX+SI+idata]用两个变量和一个常量表示地址。适用于有行和列的二维表格数据,2个变量一个对应于行,一个对应于列。3.1寻址方式寻址方式小结内存操作数MEM带[]地址表达式必须遵守下列规则:由于方括号有相加的含义,下面几种方法是等价的6[BX][SI] [BX+6][SI] [BX+SI+6]6[BX+SI]若[]内包含BP,则隐含使用SS来提供基地址,物理地址=SS16+EA其余情况隐含使用DS提供基地址段超越前缀的使用MOVAX,DS:[BP]物理地址=DS16+BP3.1寻址方式寻址方式小结目录3.1寻址方式3.2传送指令3.3算术运算指令3.4逻辑运算指令3.5移位指令3.6处理器控制指令、标志位处理指令31主要内容MOV指令栈指令交换指令累加器专用传送指令地址传送指令标志位传送指令3.2传送指令32MOV指令指令格式格式:MOVdst,src

功能:dst←src说明:MOV是操作码,dst和src分别是目的操作数和源操作数。指令格式举例MOVREG,idataMOVAX,8MOVREG,REGMOVBX,AXMOVREG,MEMMOVAX,[0000H]MOVMEM,REGMOV[0000H],AX内存操作数(后5种寻址方式)3.2传送指令33指令格式格式:MOVdst,src

功能:dst←src说明:MOV是操作码,dst和src分别是目的操作数和源操作数。指令格式举例MOVSREG,REGMOVDS,AXMOVREG,SREGMOVAX,DSMOVSREG,MEMMOVDS,[0000H]MOVMEM,SREGMOV[0000H],DSMOVMEM,idataMOVBYTEPTR[0000H],01H伪指令(4.1节)声明操作数为字节型MOV指令3.2传送指令34指令运行传送数据的途径存储器MEM立即数idata段寄存器CS,DS,ES,SS通用寄存器AX,AHBX,ALCX,BHDX,BLSI,CHDI,CLSP,DHBP,DL16位8位CS不能作为目的操作数MOV指令3.2传送指令MOV指令3.2传送指令35立即数和CS只能作为源操作数IP和FLAGS都不允许作为源操作数和目的操作数立即数不允许直接送至DS,ES,SS或CS源操作数和目的操作数不能同时是内存操作数源操作数和目的操作数必须类型相同(同为字节或字类型)注意36存储器传送指令中,不允许对CS和IP进行操作;不允许两个存储器操作数之间直接进行信息传送两个段寄存器之间不能直接传送信息,也不允许用立即寻址方式为段寄存器赋初值目的操作数,不能用立即寻址方式;操作数类型要匹配,字对字,字节对字节传送。MOVIP,0010HMOVCS,AXMOV[1230H],[0010H]MOVAX,[0010H],MOV[1230H],AXMOVDS,SSMOVDS,1000HMOV1234H,AXMOVBX,ALMOV指令3.2传送指令37主要内容3.2传送指令MOV指令栈指令交换指令累加器专用传送指令地址传送指令标志位传送指令38栈的访存特性3.2传送指令所谓栈是在存储器中开辟一个区域,用来存放需要暂时保存的数据,其工作方式是“先进后出”或“后进先出”的方式。1234栈底栈顶8086系统中的堆栈段是由段定义语句在存储器中定义的一个段,堆栈段容量小于等于64K字节。

段基址由堆栈段寄存器SS指定,栈顶由堆栈指针SP指定。第4章8086的栈是递减型的“满”栈。39栈的访存特性CPU如何知道哪一段内存空间作为栈空间使用?CPU如何知道栈顶的位置?提示:寄存器SS和SP的作用是什么1250:0000H1250:0052H…1250:0051H1250:0050H24H56H…1250:0100H栈底SS:SPSS:堆栈段段寄存器SP:堆栈指针寄存器栈顶物理地址=SS16+SP

图中栈顶物理地址是多少?3.2传送指令40CSDSSSESIP内部寄存器∑123456指令队列缓冲器总线接口部件(BIU)8位16位20位地址总线外部总线输入输出控制电路例(补):

给定一堆栈区,其地址为1250H:0000H~1250H:00FFH,SP=0052H,请问:

(1)栈顶地址的值;(2)栈底地址的值;(3)SS的值;(4)若存入数据2456H,在堆栈区如何放置,此时SP的值是多少?栈顶的逻辑地址为SS:SP,物理地址=SS16+SP栈顶地址:逻辑地址

1250H:0052H物理地址=1250H16+0052H=12552H栈底地址:在栈空间最大地址单元的下一个地址(不属于堆栈)物理地址=1250H16+00FFH+1=12600H8086的栈是递减型的“满”堆栈。(1)栈底在高地址端1250:0000H1250:00FFH……1250:0100H栈底栈的访存特性3.2传送指令41CSDSSSESIP内部寄存器∑123456指令队列缓冲器总线接口部件(BIU)8位16位20位地址总线外部总线输入输出控制电路例(补):

给定一堆栈区,其地址为1250H:0000H~1250H:00FFH,SP=0052H,请问:

(1)栈顶地址的值;(2)栈底地址的值;(3)SS的值;(4)若存入数据2456H,在堆栈区如何放置,此时SP的值是多少?1250:0000H1250:0052H…1250:0051H1250:0050HSPSP=0050H栈顶指针向低地址方向移动2个字节(SP←SP

-2),字数据的存放根据小尾顺序:低字节存放在低地址,高字节存放在高地址24H56H…1250:0100H8086的栈是递减型的“满”堆栈。(2)向低地址端生长栈底存放字数据栈的访存特性3.2传送指令42CSDSSSESIP内部寄存器∑123456指令队列缓冲器总线接口部件(BIU)8位16位20位地址总线外部总线输入输出控制电路例(补):

给定一堆栈区,其地址为1250H:0000H~1250H:00FFH,SP=0052H,请问:

(1)栈顶地址的值;(2)栈底地址的值;(3)SS的值;(4)若存入数据2456H,在堆栈区如何放置,此时SP的值是多少?1250:0000H1250:0052H…1250:0051H1250:0050H24H56H…1250:0100H栈底SP

当前栈中有多少字节数据?栈底地址−栈顶地址=0100H−0050H =0B0H栈的访存特性3.2传送指令43栈指令

PUSH指令格式:PUSHsrc功能:将字类型的源操作数src压入堆栈指令格式说明PUSHREG将一个寄存器中的数据入栈PUSHSREG将一个段寄存器中的数据入栈PUSHMEM将内存单元处的字入栈字类型16位寄存器3.2传送指令44栈指令

PUSH指令PUSHsrc

的执行过程①SP←SP

2;②将src送入SS:SP指向的内存单元中,此时SS:SP指向新栈顶。例3.2-1:设将20000H~2000FH这段内存区间用做栈,分析依次指令一下前后堆栈的变化情况。PUSHAXPOPBX1234HAX20000H2000AH2000BH2000CH2000DH2000EH2000FH20010HSS:SP12H34H栈底栈空间的使用是从高地址往低地址方向的。目的操作数由SS:SP隐含指出空栈的栈顶和栈底是重合的3.2传送指令45栈指令

PUSH指令格式:PUSHsrc功能:将字类型的源操作数src压入堆栈指令格式说明PUSHREG将一个寄存器中的数据入栈PUSHSREG将一个段寄存器中的数据入栈PUSHMEM将内存单元处的字入栈字类型16位字数据SS:SP栈底分析指令:PUSH[0200H]已知DS=1600H物理地址=1600H16+0200H=16200H20000H2000AH2000BH2000CH2000DH2000EH2000FH20010H12H34H56H78H16200H16201H56H78H3.2传送指令46栈指令

POP指令格式:POPdst功能:将当前栈顶的一个字送到目的操作数dst中指令格式说明POPREG将栈顶的数据送入一个寄存器中POPSREG将栈顶的数据送入一个段寄存器中(不能是CS)POPMEM将栈顶的字数据送入内存单元字为什么POP指令的目的操作数不能是CS3.2传送指令47栈指令

POP指令POPdst

的执行过程①将SS:SP指向的内存单元中的一个字数据送入dst中②SP←SP+2,SS:SP指向新栈顶。例3.2-1:设将20000H~2000FH这段内存区间用做栈,分析依次指令一下前后堆栈的变化情况。PUSHAXPOPBX

BHBL20000H2000AH2000BH2000CH2000DH2000EH2000FH20010HSS:SP12H34H12H34H已不属于堆栈栈底源操作数由SS:SP隐含指出位于栈顶和栈底之间存放的数据,逻辑上属于栈元素3.2传送指令48栈指令例3.2-2:对比下图所示的两段指令,分析它们的功能。MOVAX,2000HMOVDS,AXMOVAX,1234HMOV[0000H],AXMOV AX,2000HMOV SS,AXMOV SP,2MOV AX,1234HPUSHAX2000HAX2000HDS1234HAXDS:020000H20001H20002H20003H12H34H2000HAX2000HSS0002HSPSS:SP20000H20001H20002H20003H1234HAX12H34H3.2传送指令49栈指令栈指令与MOV指令的区别PUSH和POP指令访问的内存单元地址不是在指令中给出的,而是由SS:SP指出的;CPU执行MOV指令只需要一步操作;而执行PUSH和POP指令则要分两步:PUSH:先修改SP,然后向SS:SP传送数据;POP:先取SS:SP处的数据,后改变SP。MOV[1234H],BXPUSHBX3.2传送指令50主要内容3.2传送指令MOV指令栈指令交换指令累加器专用传送指令地址传送指令标志位传送指令51交换指令3.2传送指令指令格式举例XCHGREG,REGXCHGCL,BLXCHGREG,MEMXCHGBX,[0]XCHGMEM,REGXCHG[0],BX格式:XCHGdst,src功能:dst↔src,即把一个字节或一个字的源操作数与目的操作数相交换。段寄存器和立即数不能作为一个操作数,不能在累加器之间进行。注意XCHGAH,AL

52分析:

交换两个内存操作数,需要使用一个寄存器作为临时存储容器,并把MOV和XCHG指令结合使用。MOV AX,[0100H]XCHGAX,[1000H]MOV [0100H],AX

如何用堆栈实现同样的功能?例3.2-3:编写指令实现DS:[0100H]和DS:[1000H]处两个字的交换。3.2传送指令交换指令53MOV AX,[0100H]XCHGAX,[1000H]MOV [0100H],AX

例3.2-3:编写指令实现[0100H]和[1000H]处两个字的交换。DS:0100HDS:1000HDS:0101HDS:1001H…34H12H78H56H12H34H56H78H栈底栈顶PUSH[0100H]PUSH[1000H]POP[0100H]POP[1000H]56H78H12H34H使用堆栈实现:3.2传送指令交换指令54主要内容3.2传送指令MOV指令栈指令交换指令累加器专用传送指令地址传送指令标志位传送指令55累加器专用传送指令

IN指令从I/O端口输入数据至AL或AX指令格式含义INAL,portAL←portINAX,portAH←port+1,AL←portINAL,DXAL←(DX)INAX,DXAH←(DX+1),AL←(DX)若端口地址超过255时,则必须用DX保存端口地址,这样用DX作端口寻址最多可寻找64K个端口。≤2553.2传送指令56累加器专用传送指令

IN指令从I/O端口输入数据至AL或AX若端口地址超过255时,则必须用DX保存端口地址,这样用DX作端口寻址最多可寻找64K个端口。INAL,43H端口地址小于255时或者MOV

DX,43HIN

AL,DX端口地址大于255时必须MOV

DX,1243HIN

AL,DX3.2传送指令57累加器专用传送指令

OUT指令将AL或AX中的内容传送到一个输出端口指令格式含义OUTport,ALAL→portOUTport,AXAH→port+1,AL→portOUTDX,ALAL→(DX)OUTDX,AXAH→(DX+1),AL→(DX)接口部分(教材第6章时再深入学习)3.2传送指令58累加器专用传送指令

XLAT指令格式:XLAT

;AL←(DS×16+BX+AL)要求:①寄存器AL的内容作为一个256字节的表的下标;②表的基地址在BX中;③转换后的结果存放在AL中.功能:将数据段中偏移地址为BX+AL的对应内存单元中的一个字节送入AL,从而实现AL中的字节变换。0~2558位表中首元素在段内的偏移地址3.2传送指令59累加器专用传送指令例3.2-5:已知AL中有一个0~9范围内的数,试用查表指令写出能查找出该数平方值的程序分析:假设内存数据段有一张0~9的平方值表。平方值表的起始地址为21000H,则相应平方值表如图:21000H21001H21002H21003H21004H21005H21006H21007H21008H21009H…0149162536496481…偏移量0123456789数字恰好等于该数平方值对表起始地址的偏移量设DS=2000HBX=21000H−DS16=1000H3.2传送指令60累加器专用传送指令例3.2-5:已知AL中有一个0~9范围内的数,试用查表指令写出能查找出该数平方值的程序21000H21001H21002H21003H21004H21005H21006H21007H21008H21009H…0149162536496481…MOVAX,2000H ;取平方表的段地址MOVDS,AXMOVBX,1000H ;取平方表的偏移地址MOVAL,06H ;AL中为待查找的数XLATDS16+BXDS16+BX+ALAL636MOVAH,00ADDBX,AXMOVAL,[BX]等价于3.2传送指令61主要内容3.2传送指令MOV指令栈指令交换指令累加器专用传送指令地址传送指令标志位传送指令62地址传送指令

LEA指令格式:LEAREG

温馨提示

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

评论

0/150

提交评论