1 / 29

第四章

第四章. 80X86 的寻址方式和指令系统. 第四章 80X86 的寻址方式和指令系统. 4.1 计算机指令的格式 符号指令的书写格式如下: 标号:操作码助记符 操作数助记符;注释 其中操作码 助记符 和 操作数 助记符是核心。 标号 代表该条指令的存放地址。它为程序分支、循环、跳转提供了转移目标地址。标号与符号指令之间用冒号 “ : ” 做间隔符。 为阅读方便,每条符号指令后面,可以有 注释 ,并用分号 “ ; ” 作间隔符。

hateya
Download Presentation

第四章

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第四章 80X86的寻址方式和指令系统

  2. 第四章 80X86的寻址方式和指令系统 4.1计算机指令的格式 符号指令的书写格式如下: 标号:操作码助记符操作数助记符;注释 其中操作码助记符和操作数助记符是核心。 标号代表该条指令的存放地址。它为程序分支、循环、跳转提供了转移目标地址。标号与符号指令之间用冒号“:”做间隔符。 为阅读方便,每条符号指令后面,可以有注释,并用分号“;”作间隔符。 用机器指令编写的程序称为目标程序,用符号指令编写的程序称为符号程序或称汇编源程序,汇编源程序要经过汇编程序将其编辑、编译和链接才能生成CPU能识别、执行的目标程序。

  3. 第四章 80X86的寻址方式和指令系统 4.2 机器指令格式 操作码(Op) 地址码(Ad) • 操作码(Operation Code) • 地址码(Addressable Code)

  4. 第四章 80X86的寻址方式和指令系统 4.3 寻址方式 存放方式 • 包含在指令中 立即寻址(Immediate addressing) • 存放在CPU中的某个寄存器 寄存器寻址(register addressing) • 存放在存储器中 存储器寻址 • 存放在I/O接口电路的端口中 I/O端口寻址

  5. 第四章 80X86的寻址方式和指令系统 一、操作数寻址 操作数在内存数据区,操作数字段包含着此操作数地址。 在8086/8088中,任何内存地址是由两部分组成: 段的基地址:单元所在段的基地址 (大部分情况是数据段寄存器DS中); 段内偏移量:此单元与段基地址的距离。 有效地址EA(Effective Address): 段内偏移量为适应各种数据结构的需要,可以有几个部分组成,所以也把它称为有效地址EA。

  6. 第四章 80X86的寻址方式和指令系统 寻址方式不同EA的构成不同。 归纳EA可有多种情况构成: 直接寻址,寄存器间接寻址,寄存器相对寻址, 基址加变址寻址,相对基址加变址寻址。 寻址方式——如何寻找内存操作数。 不同寻址方式实质上是构成它段内的偏移量的方法不同。

  7. MOV 34H 代码段 12H ┇ AH AL 第四章 80X86的寻址方式和指令系统 1.立即寻址(Immediate Addressing) 操作数直接存放在指令中,紧跟在操作码之后,作为指令 的一部分,存放在代码段里,这种操作数称为立即数。 例:MOV AX,1234H

  8. AX BX 第四章 80X86的寻址方式和指令系统 2.寄存器寻址(Register addressing) • MOV AX,BX ;将BX寄存器中的内容送入AX寄存器中

  9. 第四章 80X86的寻址方式和指令系统 操作数在寄存器中,指令指定寄存器号。 对于16位操作数,寄存器可以是: AX,BX,CX,DX,SI,DI,SP,BP。 以及段寄存器。 对于8位操作数,寄存器可以是: AL,AH,BL,BH,CL,CH,DL,DH。 这种寻址方式因为操作数在寄存器中 不需要访问存储器的运算速度较高。

  10. 第四章 80X86的寻址方式和指令系统 例: 指令执行前:(AX)=3064H (SS)=1234H MOV SS,AX 指令执行后: (SS)=3064H (AX)保持不变。 SS AX 指令执行前: 1234H 3064H 指令执行后: 3064H 3064H 寄存器寻址方式

  11. 第四章 80X86的寻址方式和指令系统 3.直接寻址(Direct addressing) 操作数地址的16位偏移量,直接包含在指令中,存放在代码段中指令操作码之后,但操作数一般存放在数据段中,必须先求出操作数的物理地址,然后再访问存储器才能取得操作数。 或(10H) 物理地址 : PA=16d×(DS)+EA

  12. 数据段 ┇ 偏移地址 1200H 22H AH AL 11H 11 22 第四章 80X86的寻址方式和指令系统 例:MOV AX,[1200H]

  13. 第四章 80X86的寻址方式和指令系统 直接寻址方式下,操作数的段地址默认为数据段,但允许段重设,即由指令定义段。 直接寻址方式适用于处理单个变量。 IBM PC机中规定双操作数指令必须有一个操作数使用寄存器方式,这就是常常先要把一个变量送到寄存器去的原因。

  14. 第四章 80X86的寻址方式和指令系统 4.寄存器间接寻址方式(Register indirect addressing) 操作数在存储器中, 操作数地址的16位偏移量包含在: BP、BX、SI、DI寄存器中。 1) 若选择SI、DI、BX作为间接寻址 操作数一般在现行数据段区域中,用(DS)作为段地址。 即操作数物理地址为: 物理地址PA=16 d ×(DS)+(BX) 物理地址PA=16 d × (DS)+(SI) 物理地址PA=16 d × (DS)+(DI)

  15. 第四章 80X86的寻址方式和指令系统 例:MOV BX,[DI] (DS)=6000H (DI)=2000H PA=62000H (62000H)=50A0H (BX)=50A0H DS DI 6000H 2000H 6 0 0 0 0 + 2 0 0 0 ... 6 2 0 0 0 BH BL AOH 数 62000H 据 50H A0H 50H 段 ... 寄存器间接寻址方式 MOV BX,[DI]

  16. 第四章 80X86的寻址方式和指令系统 2) 若选择BP寄存器作为间接寻址 操作数在堆栈段区域中,用SS寄存器的内容作为段地址。 操作数物理地址: PA=16d × (SS)+(BP) 例: MOV [BP], AX 执行前: (SS)=1000H , (BP)=3000H , (AX)=1234H 执行后:PA=13000H (13000H)=1234H SS BP 1000H 3000H 1 0 0 0 0 + 3 0 0 0 ... 1 3 0 0 0 AH AL 34H 堆 13000H 栈 12H 34H 12H 段 ... 寄存器间接寻址方式 MOV [BP], AX

  17. 第四章 80X86的寻址方式和指令系统 3 ) 用 SI、DI、BX 、BP作为间接寻址允许段跨越 指令中可以指定段跨越前缀来取得其他段中的数据。 例:MOV ES:[DI], AX MOV DX, DS:[BP] 这种寻址方法可以用于表格处理。

  18. 第四章 80X86的寻址方式和指令系统 基址寻址(间址寄存器为基址寄存 器BX,BP) 变址寻址(间址寄存器为变址寄存 器SI,DI) 寄存器 间接寻址

  19. 第四章 80X86的寻址方式和指令系统 5. 寄存器相对寻址方式(Register relative addressing) 或变址寻址 (Index Addressing) 操作数的有效地址是一个基址或变址寄存器的内容 和指令中指定的8位或16位位移量(displacement)之和。 例:MOV AX,[BX+DATA] 设DS=2000H,BX=0220H,DATA=05H 则:AX=[20225H]

  20. 第四章 80X86的寻址方式和指令系统 例: MOV AX, COUNT [BP] 或MOV AX, [COUNT+BP] 或MOV AX, COUNT+[BP] COUNT为16位位移量。 指令执行前: (SS)=5000H, (BP)=3000H, COUNT=2040H, (AX)=1234H 指令执行后:EA=5040H PA=55040H (55040H)=5548H (AX)=5548H 存储器 操 OP 作 代 AH AL OP 码 码 55H 48H 40H 段 位移量 COUNT 20H ... 50000H ... 55040H 48H 堆 栈 55H 段 ... 寄存器相对寻址方式 MOV AX,COUNT[BP]

  21. 第四章 80X86的寻址方式和指令系统 用途:这种寻址方式同样用于表格处理。 表格首地址COUNT 修改基址或变址寄存器来取得表格中的值。 例:某数据表的首地址为COUNT 欲读取表中第10个数据,存放到(AL)中。 第10个数据的有效地址: EA= COUNT + 9 MOV SI , 09H MOV AL , [SI+COUNT]

  22. (SI) PA=16d×(S S )+ (BP) + (DI) 第四章 80X86的寻址方式和指令系统 6. 基址加变址寻址方式 (Based indexed addressing) 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,基址寄存器名和变址寄存器名均有指令指定。 除有段跨越前缀之外,形成物理地址有二种方式: (SI) PA=16d×(DS )+ (BX) + (DI)

  23. 第四章 80X86的寻址方式和指令系统 存储器 例: MOV AX, [BX][SI] 或 MOV AX, [BX+SI] 执行指令前: (DS)=3200H, (BX)=0456H, (SI) =1094H (334EAH)=4567H 执行指令后: EA=14EAH PA=334EAH (AX)=4567H ... 32000H ... AH AL ... 数 45H 67H 334EAH 67H 据 段 45H ... 基址加变址寻址方式 MOV AX,[BX+SI]

  24. 存储器 ARRAY+5 ARRAY+4 DI ARRAY+3 元素 ARRAY+2 BX ARRAY+1 ARRAY ARRAY 第四章 80X86的寻址方式和指令系统 用途:这种寻址方式同样适用于数组或表格处理。 表格首地址基址寄存器中,用变址寄存器来访问数组中的元素。二个寄存器都能修改,所以比直接变址方式更灵。

  25. 第四章 80X86的寻址方式和指令系统 7. 相对基址加变址寻址方式 (Relative based indexed addressing) 操作数有效地址是一个基址寄存器和一个变址寄存器的内容和8位或16位位移量之和 。

  26. 8位位移量 (SI) PA=16d×(DS )+ (BX) + + (DI) 16位位移量 8位位移量 (SI) PA=16d×(SS )+ (BP) + + (DI) 16位位移量 第四章 80X86的寻址方式和指令系统 除有段跨越前缀之外,形成物理地址有二种方式:

  27. 第四章 80X86的寻址方式和指令系统 例: MOV AX, MASK[BX][DI] MOV AX, MASK [BX+DI] MOV AX,[MASX+BX+DI] 执行指令前: (DS)=3000H (BX)=1346H (DI)=0500H MASK=1234H (32A7AH)=4050H 执行指令后: EA=2A7AH PA=32A7AH (AX)=4050H 存储器 操 OP 作 代 OP 码 码 34H 位移 段 量 12H MASK ... 30000H ... AH AL 数 40H 50H 32A7AH 50H 据 段 40H 相对基址加变址 MOV AX, MASK+[BX+DI]

  28. 第四章 80X86的寻址方式和指令系统 用途: 这种寻址方式为堆栈处理提供方便: (BP)栈顶(一般 BP 可指向栈顶)从栈顶到数组的首地址可以用位移量表示(MASK). 变址寄存器(SI)或(DI)——指向数组中某个元素。

  29. 第四章 80X86的寻址方式和指令系统 8. 比例变址寻址 这种寻址方式为386以上处理器采用: 将第二个寄存器与比例因子相乘,比例因子可以是1、2、4、8。分别对应字节、字、双字、四字数组。 例如: MOV [EBX+4*ECX] MOV [EAX+2*EDI+100H],CX MOV AL,[EBP+2*EDI-2] MOV EAX,ARRAY[4*ECX]

More Related