第二章8086/8088的寻址方式与指令系统 指令系统:计算机提供给用户使用的指令集 双操作数指令格式:操作码目的操作数,源操作数 操作结果替代目的操作数 不影响源操作数 例如: MOV AX,100 MOV AX. BX MOv AX, BX 要访问操作数,首先必须确定如何形成操作数的地址。 寻址方式:·确定获得操作数地址的方法 寻址方式选择得正确与否,直接影响程序的执行效率
第二章 8086/8088的寻址方式与指令系统 指令系统 : 计算机提供给用户使用的指令集 双操作数指令格式: 操作码 目的操作数,源操作数 例如: MOV AX,100 MOV AX,BX MOV AX,[BX] 要访问操作数,首先必须确定如何形成操作数的地址。 寻址方式: 确定获得操作数地址的方法 操作结果 替代目的操作数 不影响源操作数 寻址方式选择得正确与否,直接影响程序的执行效率
21寻址方式 寻址方式分类:1)与数据有关的寻址方式:确定内存单元的地址 2)与转移地址有关的寻址方式:确定转移地址 有7种与数据有关的寻址方式 以MOV指令为例:MO∨目的操作数,源操作数 对源操作数分别使用7种寻址方式如下: (1)立即寻址方式( Immediate Addressing) 特点:操作数包含在指令中 操作数是指令的组成部分,可以是8位或16位,取出指令就 立即获得操作数—立即数 AX 例1: MOV AL,5 存储器|低地址 AL 存储器 3045 OP 执行指令后:(AL=05H05 BO 45 指令 指令 例2: MOV AX,3045H 05 30 执行指令后:(AX)=3045H 高地址
2.1 寻址方式 寻址方式分类: 1)与数据有关的寻址方式 2)与转移地址有关的寻址方式 :确定内存单元的地址 有 7 种 与数据有关的寻址方式 :确定转移地址 以MOV指令为例: MOV 目的 操作数,源操作数 对源操作数分别使用7 种寻址方式如下: (1)立即寻址方式 (Immediate Addressing ) 特点:操作数包含在指令中 操作数是指令的组成部分,可以是8位或16位,取出指令就 立即获得操作数——立即数 例1: MOV AL, 5 执行指令后: (AL) = 05H B0 05 存储器 指令 05 AL 例2: MOV AX, 3045H 执行指令后: (AX) = 3045H 指令 45 AX OP 45 存储器 30 30 低地址 高地址
用途:给变量或寄存器赋常量值 限制:只能用于源操作数 (2)寄存器寻址方式( Register Addressing) 特点:操作数存在寄存器中 例: MOV AX,BX 执行指令前:(AX)=3045H(BX)=4000H 执行指令后:(AX)=4000H(BX)=4000H 用途:用寄存器提供操作数时存取速度快
用途:给变量或寄存器赋常量值 限制:只能用于源操作数 (2)寄存器寻址方式 (Register Addressing ) 特点:操作数存在寄存器中 例: MOV AX, BX 执行指令前: (AX) = 3045H (BX) = 4000H 执行指令后: (AX) = 4000H (BX) = 4000H 用途:用寄存器提供操作数时存取速度快
(3)直接寻址方式( Direct Addressing) 特点:操作数的偏移地址包含在指令中 例:设(DS)=3000H 存储器 ∴代码段 MOV AX, 2000H MOV AX, NUM op 要访问的存储单元物理地址为 00 指令 30000H+2000H=32000H 设:(32000H)=3050H AX 30000H 数据段 3050 2000H 执行指令后:(AX)=3050H 50 32000H 30 用途:用于存取单个变量中的操作数 如果2000单元在附加段,指令为: MOV AX,ES:12000 段跨越前缀:段寄存器名:-改变默认使用的段寄存器
指令 2000H 50 30 … … … … 存储器 代码段 op 00 20 30000H 数据段 32000H AX 用途: 用于存取单个变量中的操作数 30 50 例:设 ( DS ) = 3000H MOV AX, [2000H] (3)直接寻址方式 (Direct Addressing ) 特点:操作数的偏移地址包含在指令中 要访问的存储单元物理地址为: 30000H+2000H=32000H 设: (32000H)=3050H 执行指令后: (AX)=3050H 如果2000H单元在附加段,指令为: MOV AX, ES:[2000H] 段跨越前缀: 段寄存器名: —— 改变默认使用的段寄存器 MOV AX, NUM
(4)寄存器间接寻址方式( Register Indirect Addressing) 特点:(寄存器)=操作数的偏移地址 计算操作数物理地址的公式: (BX )操作数物理地址=(Ds)×16+1(SD (DI 2)操作数物理地址=(SS)×16+(BP) 存储器 例:设(DS)=2000H (BX)=1000H 50A0 20000H 数据段 指令为: MOV AX,IBX 1000H 数组起始地址 要访问的存储单元 AO 1000H 物理地址为: 50 20000H+1000H=21000H XX 21002H 设:(21000H)=50A0H 执行指令后:(AX=50A0H 用途:可用于处理数组
1000H AX 用途: 可用于处理数组 50 A0 A0 50 … … … 存储器 20000H 数据段 21000H XX XX 21002H 例:设 ( DS ) = 2000H ( BX ) = 1000H 指令为: MOV AX, [ BX ] 数组起始地址 (4)寄存器间接寻址方式 (Register Indirect Addressing ) 特点: (寄存器) = 操作数的偏移地址 计算操作数物理地址的公式: 1) 操作数物理地址=(DS)16+ 2) 操作数物理地址=(SS)16+(BP) (BX) (SI) (DI) 20000H+1000H = 21000H 要访问的存储单元 物理地址为: 设: (21000H)=50A0H 执行指令后: (AX)=50A0H
(5)变址寻址方式( Indexed Addressing)(寄存器相对寻址方式) 特点:(变址、基址寄存器)+指令中的位移量=操作数的偏移地址 计算操作数物理地址的公式: 存储器 1)操作数物理地址=(DS×16+(0+位位移量 代码段 16位位移量 op (BX) 2)操作数物理地址(ss6+(8位移 指令 00 例:设(DS)=3000H ARRAY=4000H 40 (S1)=2000H 指令为: MOV AX, ARRAYISI 30000H 数据段 要访问的存储单元 4000H 数组起始地址 物理地址为 1234 2000H 30000H+4000H+2000H=36000H 34 36000H 设:(36000H)=1234H 执行指令后:(AX)=1234H 12 用途:可用于处理数组
指令 4000H 30000H AX (寄存器相对寻址方式) 12 34 例:设 ( DS ) = 3000H ARRAY=4000H ( SI ) = 2000H 指令为: MOV AX, ARRAY[ SI ] 34 12 … … … … 存储器 代码段 op 00 40 数据段 36000H op 2000H … 数组起始地址 (5)变址寻址方式 ( Indexed Addressing ) 特点: (变址、基址寄存器) +指令中的位移量 = 操作数的偏移地址 计算操作数物理地址的公式: 1) 操作数物理地址=(DS)16+ 2) 操作数物理地址=( SS)16+ (BP) + 8位位移量 16位位移量 30000H+4000H+2000H= 36000H 要访问的存储单元 物理地址为: 设: (36000H)=1234H 用途: 可用于处理数组 执行指令后: (AX)=1234H + (SI) (DI) (BX) 8位位移量 16位位移量
(6)基址变址寻址方式( Based Index Addressing) 特点:(基址寄存器)+(变址寄存器)=操作数的偏移地址 计算操作数物理地址的公式: (SD) 1)操作数物理地址=6+(Bx+1 (SD 2)操作数物理地址=(S96(B)+1D 例:设(DS)=2100H 存储器 (Bx)=0158H 21000H 数据段 (DI)=1000H 指令为: MOV AX,[BX+D 0158H 数组起始地址 要访问的存储单元 1234 1000H 物理地址为: 21000H+0l58H+1000H=22158H 34 22158H 设:(2158H)=1234H 执行指令后:(AX)=1234H 用途:可用于处理数组
0158H AX 12 34 例:设 ( DS ) = 2100H ( BX ) = 0158H ( DI ) = 1000H 指令为:MOV AX, [BX+DI] 34 12 … … … 存储器 21000H 数据段 22158H 1000H 数组起始地址 (6)基址变址寻址方式 ( Based Index Addressing ) 特点:(基址寄存器) + (变址寄存器) = 操作数的偏移地址 计算操作数物理地址的公式: 1) 操作数物理地址=(DS)16+ 2) 操作数物理地址=( SS)16+ (BP) + (BX) + (SI) (DI) (SI) (DI) 21000H+0158H+1000H= 22158H 要访问的存储单元 物理地址为: 设: (22158H)=1234H 执行指令后: (AX)=1234H 用途: 可用于处理数组
几种可处理数组的寻址方式的比较 1. MOV AX, BXI 寄存器间接寻址方式 特点适用于要处理的数组需要在程序运行中动态确定, 且形式简单。 DⅠSIBP(加段跨越前缀DS:或ES) 2. MOV AX, ARRAY[SI变址寻址方式 特点:可读性好,指令中明确指出了要处理的数组。 限制:写程序时必须清楚要处理什么数组。 DⅠBⅹBP(加段跨越前缀DS:或ES) 3. MOV AX, BXISI 基址变址寻址方式 特点:适用于要处理的数组需要在程序运行中动态确定, 并且修改BX就可以处理不同的数组。 △上述1和2.指令中的寄存器还可被哪些寄存器替换? △上述3指令中的BX寄存器是否可被其他寄存器替换? next
几种可处理数组的寻址方式 的比较: 1. MOV AX,[BX] 2. MOV AX,ARRAY [SI] 3. MOV AX,[BX][SI] 寄存器间接寻址方式 变址寻址方式 基址变址寻址方式 特点: 可读性好,指令中明确指出了要处理的数组。 限制:写程序时必须清楚要处理什么数组。 特点: 适用于要处理的数组需要在程序运行中动态确定, 并且修改BX就可以处理不同的数组。 特点: 适用于要处理的数组需要在程序运行中动态确定, 且形式简单。 上述1.和2.指令中的[寄存器]还可被哪些寄存器替换? DI SI BP (加 段跨越前缀 DS: 或 ES) 上述3.指令中的BX寄存器是否可被其他寄存器替换? DI BX BP (加 段跨越前缀 DS: 或 ES) next
(7)相对基址变址寻址方式( Relative Based Index Addressing) 特点:(基址寄存器)+(变址寄存器)+位移量=操作数的偏移地址 例:设(SS)=3000H 存储器 (BP)=200H 代码段 ARRAY=0250H op (S1)=1000H MOV AX, ARRAYBPIISI op 指令 50 要访问的存储单元物理地址为 02 30000H+200OH+0250+1000H =33250H 30000H 000H 堆栈段 栈顶 0250H 数组首址 1234 1000H 3413350H 12 用途:便于访问堆栈中的数组
指令 2000H AX 12 34 例:设( SS ) = 3000H ( BP ) = 2000H ARRAY = 0250H ( SI ) = 1000H MOV AX, ARRAY[BP][SI] 1000H 30000H 34 12 … … … … 存储器 代码段 op 50 02 堆栈段 33250H op … … 0250H 栈顶 数组首址 (7)相对基址变址寻址方式 ( Relative Based Index Addressing ) 特点:(基址寄存器) + (变址寄存器)+位移量 = 操作数的偏移地址 30000H+2000H+0250+1000H = 33250H 要访问的存储单元物理地址为: 用途: 便于访问堆栈中的数组
要求:熟练掌握前6种寻址方式,其中前3种是最基本的寻 址方式,后3种是重点寻址方式 22指令系统 8086/8088指令系统中的指令按功能可分为六类: (1)数据传送指令 (2)算术运算指令 (3)逻辑运算与移位指令(4)串操作指令 (5)控制转移指令 (6)处理机控制指令 22.1数据传送指令 (1)通用传送指令 1)传送指令MOV 指令格式: Mov dst,src(dst:目的操作数,src:源操作数) 执行操作:(dst)←(src) 功能:在CPU与存储器之间或CPU内部传送数据。 标志位:不受影响
要求:熟练掌握前6种寻址方式,其中前3种是最基本的寻 址方式,后3种是重点寻址方式。 2.2 指令系统 8086/8088指令系统中的指令按功能可分为六类: (1)数据传送指令 (2)算术运算指令 (3)逻辑运算与移位指令 (4)串操作指令 (5)控制转移指令 (6)处理机控制指令 2.2.1 数据传送指令 (1) 通用传送指令 1)传送指令MOV 指令格式:MOV dst,src 执行操作:(dst)←(src) (dst:目的操作数, src:源操作数) 功能:在CPU与存储器之间或CPU内部传送数据。 标志位:不受影响