290 likes | 437 Views
第四章. 80X86 的寻址方式和指令系统. 第四章 80X86 的寻址方式和指令系统. 4.1 计算机指令的格式 符号指令的书写格式如下: 标号:操作码助记符 操作数助记符;注释 其中操作码 助记符 和 操作数 助记符是核心。 标号 代表该条指令的存放地址。它为程序分支、循环、跳转提供了转移目标地址。标号与符号指令之间用冒号 “ : ” 做间隔符。 为阅读方便,每条符号指令后面,可以有 注释 ,并用分号 “ ; ” 作间隔符。
E N D
第四章 80X86的寻址方式和指令系统
第四章 80X86的寻址方式和指令系统 4.1计算机指令的格式 符号指令的书写格式如下: 标号:操作码助记符操作数助记符;注释 其中操作码助记符和操作数助记符是核心。 标号代表该条指令的存放地址。它为程序分支、循环、跳转提供了转移目标地址。标号与符号指令之间用冒号“:”做间隔符。 为阅读方便,每条符号指令后面,可以有注释,并用分号“;”作间隔符。 用机器指令编写的程序称为目标程序,用符号指令编写的程序称为符号程序或称汇编源程序,汇编源程序要经过汇编程序将其编辑、编译和链接才能生成CPU能识别、执行的目标程序。
第四章 80X86的寻址方式和指令系统 4.2 机器指令格式 操作码(Op) 地址码(Ad) • 操作码(Operation Code) • 地址码(Addressable Code)
第四章 80X86的寻址方式和指令系统 4.3 寻址方式 存放方式 • 包含在指令中 立即寻址(Immediate addressing) • 存放在CPU中的某个寄存器 寄存器寻址(register addressing) • 存放在存储器中 存储器寻址 • 存放在I/O接口电路的端口中 I/O端口寻址
第四章 80X86的寻址方式和指令系统 一、操作数寻址 操作数在内存数据区,操作数字段包含着此操作数地址。 在8086/8088中,任何内存地址是由两部分组成: 段的基地址:单元所在段的基地址 (大部分情况是数据段寄存器DS中); 段内偏移量:此单元与段基地址的距离。 有效地址EA(Effective Address): 段内偏移量为适应各种数据结构的需要,可以有几个部分组成,所以也把它称为有效地址EA。
第四章 80X86的寻址方式和指令系统 寻址方式不同EA的构成不同。 归纳EA可有多种情况构成: 直接寻址,寄存器间接寻址,寄存器相对寻址, 基址加变址寻址,相对基址加变址寻址。 寻址方式——如何寻找内存操作数。 不同寻址方式实质上是构成它段内的偏移量的方法不同。
MOV 34H 代码段 12H ┇ AH AL 第四章 80X86的寻址方式和指令系统 1.立即寻址(Immediate Addressing) 操作数直接存放在指令中,紧跟在操作码之后,作为指令 的一部分,存放在代码段里,这种操作数称为立即数。 例:MOV AX,1234H
AX BX 第四章 80X86的寻址方式和指令系统 2.寄存器寻址(Register addressing) • MOV AX,BX ;将BX寄存器中的内容送入AX寄存器中
第四章 80X86的寻址方式和指令系统 操作数在寄存器中,指令指定寄存器号。 对于16位操作数,寄存器可以是: AX,BX,CX,DX,SI,DI,SP,BP。 以及段寄存器。 对于8位操作数,寄存器可以是: AL,AH,BL,BH,CL,CH,DL,DH。 这种寻址方式因为操作数在寄存器中 不需要访问存储器的运算速度较高。
第四章 80X86的寻址方式和指令系统 例: 指令执行前:(AX)=3064H (SS)=1234H MOV SS,AX 指令执行后: (SS)=3064H (AX)保持不变。 SS AX 指令执行前: 1234H 3064H 指令执行后: 3064H 3064H 寄存器寻址方式
第四章 80X86的寻址方式和指令系统 3.直接寻址(Direct addressing) 操作数地址的16位偏移量,直接包含在指令中,存放在代码段中指令操作码之后,但操作数一般存放在数据段中,必须先求出操作数的物理地址,然后再访问存储器才能取得操作数。 或(10H) 物理地址 : PA=16d×(DS)+EA
数据段 ┇ 偏移地址 1200H 22H AH AL 11H 11 22 第四章 80X86的寻址方式和指令系统 例:MOV AX,[1200H]
第四章 80X86的寻址方式和指令系统 直接寻址方式下,操作数的段地址默认为数据段,但允许段重设,即由指令定义段。 直接寻址方式适用于处理单个变量。 IBM PC机中规定双操作数指令必须有一个操作数使用寄存器方式,这就是常常先要把一个变量送到寄存器去的原因。
第四章 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)
第四章 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]
第四章 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
第四章 80X86的寻址方式和指令系统 3 ) 用 SI、DI、BX 、BP作为间接寻址允许段跨越 指令中可以指定段跨越前缀来取得其他段中的数据。 例:MOV ES:[DI], AX MOV DX, DS:[BP] 这种寻址方法可以用于表格处理。
第四章 80X86的寻址方式和指令系统 基址寻址(间址寄存器为基址寄存 器BX,BP) 变址寻址(间址寄存器为变址寄存 器SI,DI) 寄存器 间接寻址
第四章 80X86的寻址方式和指令系统 5. 寄存器相对寻址方式(Register relative addressing) 或变址寻址 (Index Addressing) 操作数的有效地址是一个基址或变址寄存器的内容 和指令中指定的8位或16位位移量(displacement)之和。 例:MOV AX,[BX+DATA] 设DS=2000H,BX=0220H,DATA=05H 则:AX=[20225H]
第四章 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]
第四章 80X86的寻址方式和指令系统 用途:这种寻址方式同样用于表格处理。 表格首地址COUNT 修改基址或变址寄存器来取得表格中的值。 例:某数据表的首地址为COUNT 欲读取表中第10个数据,存放到(AL)中。 第10个数据的有效地址: EA= COUNT + 9 MOV SI , 09H MOV AL , [SI+COUNT]
(SI) PA=16d×(S S )+ (BP) + (DI) 第四章 80X86的寻址方式和指令系统 6. 基址加变址寻址方式 (Based indexed addressing) 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,基址寄存器名和变址寄存器名均有指令指定。 除有段跨越前缀之外,形成物理地址有二种方式: (SI) PA=16d×(DS )+ (BX) + (DI)
第四章 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]
存储器 ARRAY+5 ARRAY+4 DI ARRAY+3 元素 ARRAY+2 BX ARRAY+1 ARRAY ARRAY 第四章 80X86的寻址方式和指令系统 用途:这种寻址方式同样适用于数组或表格处理。 表格首地址基址寄存器中,用变址寄存器来访问数组中的元素。二个寄存器都能修改,所以比直接变址方式更灵。
第四章 80X86的寻址方式和指令系统 7. 相对基址加变址寻址方式 (Relative based indexed addressing) 操作数有效地址是一个基址寄存器和一个变址寄存器的内容和8位或16位位移量之和 。
8位位移量 (SI) PA=16d×(DS )+ (BX) + + (DI) 16位位移量 8位位移量 (SI) PA=16d×(SS )+ (BP) + + (DI) 16位位移量 第四章 80X86的寻址方式和指令系统 除有段跨越前缀之外,形成物理地址有二种方式:
第四章 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]
第四章 80X86的寻址方式和指令系统 用途: 这种寻址方式为堆栈处理提供方便: (BP)栈顶(一般 BP 可指向栈顶)从栈顶到数组的首地址可以用位移量表示(MASK). 变址寄存器(SI)或(DI)——指向数组中某个元素。
第四章 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]