第三章80×86的指令系统和寻址方式 指令系统—组指令的集合 指令:操作码操作数操作数 寻址方式 与数据有关的寻址方式 与转移地址有关的寻址方式
• 指令系统 一组指令的集合 第三章 80x86的指令系统和寻址方式 指令: 操作码 操作数 ... 操作数 • 寻址方式 与数据有关的寻址方式 与转移地址有关的寻址方式
1.8086的寻址方式 与数据有关的寻址方式: 立即寻址 MOV AX. 3069H 寄存器寻址 MOV AL. BH 直接寻址 MOA,[2000H] 寄存器间接寻址 MOV AX,[BX] 寄存器相对寻址 MOV AX, COUNT[SI] 基址变址寻址 MOV AX,[BP][DI] 相对基址变址寻址 MOV AX,MASK[BX][SI 存储器寻址
1. 8086 的寻址方式 与数据有关的寻址方式: • 立即寻址 MOV AX , 3069H • 寄存器寻址 MOV AL , BH • 直接寻址 MOV AX , [ 2000H ] • 寄存器间接寻址 MOV AX , [ BX ] • 寄存器相对寻址 MOV AX , COUNT [ SI ] • 基址变址寻址 MOV AX , [ BP ] [ DI ] • 相对基址变址寻址 MOV AX , MASK [ BX ] [ SI ] 存储器寻址
)立即寻址方式*—操作数在指令中给出 MOV AL. 5 MOV AX. 3064H MOV ALA *只能用于SRC字段 SRC和DST的字长一致 MOV AH,3064H
(1) 立即寻址方式 * —— 操作数在指令中给出 MOV AL , 5 MOV AX , 3064H MOV AL , ‘A’ * 只能用于 SRC 字段 * SRC 和 DST 的字长一致 MOV AH , 3064H
(2)寄存器寻址方式*—操作数在指定的寄存器中 MOV AX BX MOV AL. BH MOV AX. 3064H *字节寄存器只有 AH AL BH BL CH CL DH DL SRC和DST的字长一致 MOV AH BX X *CS不能用MOV指令改变 MOV CS,AX
(2) 寄存器寻址方式 * —— 操作数在指定的寄存器中 MOV AX , BX MOV AL , BH MOV AX , 3064H * 字节寄存器只有 AH AL BH BL CH CL DH DL * SRC 和 DST 的字长一致 MOV AH , BX * CS 不能用 MOV 指令改变 MOV CS , AX
3)直接寻址方式* 有效地址EA由指令直接给出 例: MOV AX,[2000H1 EA=2000H,假设(DS)=3000H,那么PA=32000H AH AL 30 32000 50H 30H (AX)=3050H *隐含的段为数据段DS *可使用段跨越前缀 MOV AX,ES:[2000H] *操作数地址可由变量(符号地址)表示 VALUE DB 10 MOV AH. VALUE MOV AX VALUE X MOV AX. WORD PTR VALUE
(3) 直接寻址方式 * —— 有效地址 EA 由指令直接给出 例:MOV AX , [ 2000H ] EA = 2000H , 假设 (DS) = 3000H , 那么 PA = 32000H * 隐含的段为数据段DS * 可使用段跨越前缀 MOV AX , ES: [ 2000H ] * 操作数地址可由变量(符号地址)表示 VALUE DB 10 MOV AH , VALUE MOV AX , VALUE MOV AX , WORD PTR VALUE 50H 30H 32000 AH AL 30 50 (AX) = 3050H
(4)寄存器间接寻址*—EA在基址寄存器(BX/BP) 或变址寄存器(SI/DI)中 MOAⅩ,[Bx] PA=16d×(DS)+(BX) MOV AX, ES: [BX PA=16dx(Es)+(BX) MOVAⅩ,[BP] PA=16d×(SS)+(BP) *不允许使用AX、CX、DX存放EA MOV AX,[CXI SRC和DST的字长一致 MOⅤDL,[BX];[BX]指示一个字节单元 MOV DX,[Bx];[BX]指示一个字单元 *适于数组、字符串、表格的处理
(4) 寄存器间接寻址 * —— EA 在基址寄存器 ( BX / BP ) 或变址寄存器 ( SI / DI ) 中 MOV AX , [ BX ] PA = 16d ( DS ) + ( BX ) MOV AX , ES: [ BX ] PA = 16d ( ES ) + ( BX ) MOV AX , [ BP ] PA = 16d ( SS ) + ( BP ) * 不允许使用AX、CX、DX 存放 EA MOV AX , [ CX ] * SRC 和 DST 的字长一致 MOV DL , [ BX ] ; [ BX ] 指示一个字节单元 MOV DX , [ BX ] ; [ BX ] 指示一个字单元 * 适于数组、字符串、表格的处理
5)寄存器相对寻址方式* (BX) 有效地址 (BP) 8位 位移 (SI 位 (DI) 例: MOV AX, COUNT[SI]或 MOV AX,[ COUNT+SI] 假设(DS)=3000H,(SI)=2000H, COUNT=100H 那么PA=32100H 假设(32100H)=1234H,那么(AX)=1234H *适于数组、字符串、表格的处理
有效地址 = ( BX ) ( BP ) 8 位 ( SI ) 16 位 ( DI ) + 位移量 (5) 寄存器相对寻址方式 * 例: MOV AX , COUNT [ SI ] 或 MOV AX , [ COUNT + SI ] 假设 ( DS ) = 3000H, ( SI ) = 2000H, COUNT = 100H, 那么 PA = 32100H 假设 ( 32100H ) = 1234H, 那么 ( AX ) = 1234H * 适于数组、字符串、表格的处理
(6)基址变址寻址方式 有效地址≈(Bx)x1(D) (SⅠI) (BP) MOV AX, IBXIIDI I 或 MOV AX,[BX+DI] MOAX,ES:[Bⅹ][SI] *适于数组、字符串、表格的处理 必须是一个基址寄存器和一个变址寄存器的组合 MOV AX, [BXJIBPX MOAX,[SI][DI]×
(6) 基址变址寻址方式 * MOV AX , [ BX ] [ DI ] 或 MOV AX , [ BX + DI ] MOV AX , ES: [ BX ] [ SI ] * 适于数组、字符串、表格的处理 * 必须是一个基址寄存器和一个变址寄存器的组合 MOV AX , [ BX ] [ BP ] MOV AX , [ SI ] [ DI ] 有效地址 = ( BX ) ( SI ) ( BP ) ( DI ) +
7)相对基址变址寻址方式 (BX)(SI 位 有效地址= 位移量 (BP)(DI)16位 MOV AX, MASK[] 或 MOV AX,MASK[BX+SI] 或 MOV AX,[MASK+BX+SI]
(7) 相对基址变址寻址方式 MOV AX , MASK [ BX ] [ SI ] 或 MOV AX , MASK [ BX + SI ] 或 MOV AX , [ MASK + BX + SI ] 有效地址 = ( BX ) ( SI ) 8位 ( BP ) ( DI ) 16位 + + 位移量
段寄存器的使用规定 默认的 可跨越的 访问存储器的方式段寄存器段寄存器偏移地址 取指令 无—无 IP 堆栈操作 一般数据访问 有效地址EA BP作为基址的寻址 CS DS ES BP 串操作的源操作数 DS CS ES SS 串操作的目的操作数 无 DI
访问存储器的方式 默认的 段寄存器 可跨越的 段寄存器 偏移地址 取指令 CS 无 IP 堆栈操作 SS 无 SP 一般数据访问 DS CS ES SS 有效地址 EA BP 作为基址的寻址 SS CS DS ES BP 串操作的源操作数 DS CS ES SS SI 串操作的目的操作数 ES 无 DI 段 寄 存 器 的 使 用 规 定