微机新第三章

上传人:E**** 文档编号:90925828 上传时间:2019-06-20 格式:PPT 页数:91 大小:1.02MB
返回 下载 相关 举报
微机新第三章_第1页
第1页 / 共91页
微机新第三章_第2页
第2页 / 共91页
微机新第三章_第3页
第3页 / 共91页
微机新第三章_第4页
第4页 / 共91页
微机新第三章_第5页
第5页 / 共91页
点击查看更多>>
资源描述

《微机新第三章》由会员分享,可在线阅读,更多相关《微机新第三章(91页珍藏版)》请在金锄头文库上搜索。

1、第三章 8086微处理器的指令系统,3-1 寻址方式 指令: 操作码 目的操作数, 源操作数 操作码:规定CPU须做的操作 操作数:指出参加运算操作数的 操作数本身 操作数地址或地址一部分 操作数地址的指针,寻址方式: 指令中说明操作数所在地址的方法。如果操作数在存储器中则 8086的EU就要根据指令中寻址信息用不同的方法计算出有效地址EA。 EA(Effective Address):即寻址所需要的偏移地址。得到EA即可得到操作数20位物理地址。 物理地址=段基址16 + EA,数据的寻址方式: 立即寻址 寄存器寻址 直接寻址 寄存器间接寻址 基址变址寻址 寄存器相对寻址 相对基址变址寻址

2、带比例因子的变址寻址,一、立即寻址(Immediate Addressing) 当操作数据就在指令中时,即为“立即寻址”。这种操作数称为立即数, 在指令中立即数可用16进制数(以H结尾),2进制数(以B结尾)和10进制数(不需加特殊符号)表示, 也可以使用撇号“”括起来的ASCII码表达的字符和字符串。 注意,如果16进制数以字母AF打头,则必须在前面加上一个“0”,这是汇编程序的要求。,在立即寻址中,立即数为一常量, 在8086,80286处理器中,可以是字节(8位数)或字(16位数), 而在80386以上的处理器中,立即数还可以是双字(32位数)。,8位立即数 MOV AL,43H MOV

3、 AL,01000011B MOV AL,67 16位立即数 MOV AX,4142H MOV AX,0100000101000010B MOV AX,16706 32位立即数 MOV EAX,12345678H 字符或字符串MOV AL,A,二 、 寄存器寻址(Register Addressing) 操作数在寄存器中,即寄存器的内容就是操作数的数据,在汇编语言表示的指令中,以寄存器符号表示之,可用作80X86操作数的寄存器如表3-1所示。,表3-1寄存器寻址中的寄存器,注意: (1)当指令中的源操作数和目的操作数都是寄存器时,必须采用同样字长的寄存器,否则汇编时会出错; (2)两个操作数不

4、能同时为段寄存器; (3)目的操作数不能是代码段寄存器,例如指令MOV CS,AX,汇编时没有出错,可得机器码为8EC8H,但执行时会发生问题。,操作数的有效地址EA是指令的一部分,它与操作码一起放在代码段区域中。 操作数的物理地址为数据段寄存器DS加上16位地址偏移量。 允许对其段超越前缀操作。,例:若(DS)=3000H MOV AX,2000H,指令中存储单元的地址也可用符号地址表示。,例:AREA1 DW 0867H MOV AX,AREA1,注意区分: AREA1 EQU 0867H MOV AX,AREA1,30,50,三、直接寻址方式(Direct Addressing),操作数

5、在存储单元中。操作数的有效地址EA在指令码所指定的寄存器中。可作为间址的寄存器有SI、DI、BX、BP, 若: 1、操作数在数据段DS中:则以寄存器BX、SI或DI间接寻址。 2、操作数在堆栈段中:则以寄存器BP间接寻址。,例:若(DS)=2000H,(SI)=1000H MOV AX,SI,50,A0,四、寄存器间接寻址方式(Register Indirect Addressing),DS SS BP,BX SI DI,默认段以外取数需制定段超越前缀,DS: BP ES: BX ,寄存器间接寻址中寄存器默认关系,寄存器R:BX,BP,SI,DI,注意:,操作数在存储单元中。操作数的有效地址是

6、以指令指定的寄存器内容加上指令中给定的8位或16位位移量。,例:若(DS)=3000H, (SI)=2000H,COUNT=3000H MOV AX,COUNT SI 或 MOV AX, COUNT SI,若指令指定的寄存器是BX、SI或DI,段寄存器使用DS; 若指令指定的寄存器是BP, 则段寄存器使用SS。,30,50,五、寄存器相对寻址方式(Register Relative Addressing),物理地址16DSSICOUNT 30000H+2000H+3000H =35000H,操作数在存储单元中。操作数的有效地址是一个基址寄存器(BX或BP)和一个变址寄存器(SI或DI)的内容之

7、和,两个寄存器均由指令指定。一般由基址寄存器决定所使用的段寄存器。,六、基址变址寻址方式(Based Indexed Addressing),若指令指定的寄存器是BX,段寄存器使用DS;,若指令指定的寄存器是BP, 则段寄存器使用SS。,物理地址16DSBX+SI 或 16DSBX+DI,物理地址16SSBP+SI 或 16SSBP+DI,例:MOV AX ,BXSI,若 DS=3000H,SI=2000H,BX=3000H,(35000H)=0ABCDH 则:物理地址16DSBX+SI=35000H AX=0ABCDH,操作数在存储单元中。操作数的有效地址是基址寄存器(BX或BP)内容加上变

8、址寄存器(SI或DI)的内容、再加上指令中指定的8位或16位位移量。一般由基址寄存器决定所使用的段寄存器。,例: MOV AX,COUNT BX SI,七、相对基址变址寻址方式(Relative Based Indexed Addressing),若指令指定的寄存器是BX,段寄存器使用DS; 物理地址16DSBX+SI8位或16位位移量 或 16DSBX+DI 8位或16位位移量,若指令指定的寄存器是BP, 则段寄存器使用SS 物理地址16SSBP+SI 8位或16位位移量 或 16SSBP+DI 8位或16位位移量,若 DS=3000H,SI=0300H,BX=1500H, COUNT 02

9、00H,(31A00H)=26BFH 则:物理地址16DSBX+SI COUNT = 31A00H AX=26BFH,* 立即数可以出现在方括号内,表示直接地址,如2000H;,1、指令中使用方括号的地址表达式必须遵循下列规则:,* 只有SI、BP、DI、BX可以出现在方括号内,它们可以单独出现,也可以相加后出现,或以寄存器与立即数相加的形式出现,但BX和BP或SI和DI不能同时出现在同一个 内,SI和DI也不能同时出现;,* 方括号有相加的含义,下面几种写法都是等价的: 1200BXSI BX+1200SI BX+ SI +1200,* 方括号内包含BP,则隐含使用SS提供基地址;其余情况均

10、使用DS提供基地址。,需说明的几个问题,2、段超越: 在8088系统中,数据通常在数据段中,但若需要,数据也可存放在代码段,堆栈段以及附加段中,这种情况就是段超越。应用时,需在指令中加以说明。,例:MOV AX,ES:0500H ES表示数据在附加段中; :是修改属性运算符。,3、其它寻址方式,(1)隐含寻址:指令中不指明操作数.例如:DAA,它的含义是对寄存器AL中的数据进行十进制数调整,结构仍保留在AL中。,(2)I/O端口寻址:8086有直接端口寻址和间接端口寻址两种方式,端口寻址范围分别为00FFH和0FFFFH。,( 4 )转移类指令寻址,(3 )一条指令有几种寻址方式,3-2 80

11、86的指令系统,8088的指令系统可以分为六个功能组:,功能:将源操作数的一个字节(B)或一个字(W)传送到目的操作数所指的单元。,说明:* 指令中至少要有一项明确指出传送的是字节还是字; * 可用不同的寻址方式; * 不影响标志位; * 源操作数不变; *存储器之间,立即数与段寄存器,段寄存器之间不能用一条指令完成数据传送。,MOV指令允许传送数据的途径如下图所示,例:MOV AX, BX ;将BX中的16位二进制数送AX MOV AL, CL ;将CL中的8位二进制数送AL MOV ES, DX ;将DX中的16位二进制数送ES MOV AX,BX ;将BX中的16位二进制数送AX。,AL

12、BX, AHBX+1 MOV DI,AX ;将AX中的16位二进制数送DI和 DI+1单元中 MOV CX,1000H;将1000H和1001H中的16位二进 制数送CX单元中 MOV BX, 5040H ;将5040H送BX MOV AL,E; 将字符E送AL,即将E的ASCII码送AL MOV AX,30HBX+SI;将30H+BX+SI单元的内容送AX,注意:字符用ASCII码,形式上可写成E;BP的段地址为SS,其余均为DS。,2、堆栈操作指令, 进栈指令 PUSH OPRD,功能:将一个字的源操作数传送至由SP所指向的堆栈的顶部.,堆栈是以“ 先进后出”的方式工作的一个存储区,,例:

13、PUSH AX 指令执行过程:,指令执行后,AX=2A8CH,SP,2000: 0130H,2000: 012EH,8CH,2000: 0000H,2AH,SP, 出栈指令 POP OPRD,功能:把当前 SP 所指向的堆栈顶部的一个字送到指定的目的操作数中。(CS不能作为目的操作数),操作:每执行一次出栈操作,SP +2 SP ,指向新的栈顶。,例:设SS=2000H,SP = 0130H,(20130H)= 396EH,BX=4FAEH,执行指令POP BX的过程如下图所示:,执行指令前BX=4FAEH,2000: 0000H,2000: 0000H,2000: 0130H,2000: 0

14、130H,SP ,2000: 0132H,SP ,执行指令后BX=,6EH,39,SP ,2000: 0131H,3、交换指令,指令格式:XCHG OPRD1,OPRD2 功能:把一个字或一个字节的源操作数与目的操作数交换。,交换可在寄存器之间、寄存器与存储器之间进行。,但段寄存器不能作为操作数,也不能直接交换两个存储单元中的内容。,例:设AX=31B0H,DS=3000H, BX=1800H,(31800H)= 1995H,执行指令 XCHG AX, BX 的过程为:,执行指令前,AX,31B0H,31800H,31801H,31800H,31801H,执行指令后,AX,95H,19H,31

15、H,B0H,1995H,(二)累加器专用传送指令1、输入指令 IN,功能:从8位端口读入一个字节到AL,或从16位端口读入一个字到AX。,指令格式: IN AL,n 或 IN AX,n ;n为 255 的端口地址 IN AL,DX 或 IN AX,DX;端口地址放在DX中。,第一种格式,端口地址n(00FFH)直接包含在IN指令里,共允许寻址256个端口。当端口地址号大于FFH时,必须用第二种寻址方式,即先将端口号送入DX寄存器,再执行输入操作。,例:用IN指令从输入端口读取数据,(1) IN AL,0E3H,E3H端口,AL,执行指令前,执行指令后,E3H端口,AL,9DH,(2) IN AX,80H,执行指令后,17,5BH,2、输出指令 OUT,功能:将AL中的一个字节写到一个8位端口,或把AX中的一个字写到一个16位端口。,例:用 OUT 指令对输出端口进行操作,1) OUT 84H,AX,2) MOV DX,300H OUT DX,AL,9AH,3、换码指令 XLAT (查表指令),指令格式:XLAT,功能:(BX)(AL) AL,该指令执行前,先把转换表首地址的偏移量送入BX中,而把要查找表内

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号