- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MOV 40H, AL
MOV AH, 3064H
(2) 寄存器寻址方式* — 操作数在指定的寄存器中 MOV AX, BX
MOV AL, BH
MOV AX, 3064H
注意:
* * *
字节寄存器只有 AH AL BH BL CH CL DH DL SRC 和 DST 的字长一致 CS 不能用 MOV 指令改变 MOV AH, BX MOV CS, AX
* 不允许使用AX、CX、DX 存放 EA
MOV AX, [CX]
* SRC 和 DST 的字长一致
MOV DL, [ BX ]
MOV DX, [ BX ]
; [BX]指示一个字节单元
; [BX]指示一个字单元
* 适于数组、字符串、表格的处理
(5) 寄存器相对寻址方式*
(BX) (BP)
有效地址 =
立即数寻址方式举例
MOV AL,05H MOV AX,0102H ;AL←05H ;AX←0102H
低地址 B8 02 01 AX 01 AH 02 AL 高地址
3.2 寻址方式
------(2) 寄存器寻址方式
操作数存放在CPU的内部寄存器reg中,可以 是:
8位寄存器r8: AH、AL、BH、BL、CH、CL、DH、DL 16位寄存器r16: AX、BX、CX、DX、SI、DI、BP、SP 32位寄存器r32: EAX 4个段寄存器seg: CS、DS、SS、ES
( 7 ) 相对基址变址寻址方式
有些指令不需要操作数,通常的指令都有一 个或两个操作数,也有个别指令有3个甚至4 个操作数
3.1 指令的一般格式
操作码 操作数1,操作数2 ;注释 操作数2,称为源操作数 src,它表示参与指 令操作的一个对象 操作数1,称为目的操作数 dest,它不仅可以 作为指令操作的一个对象,还可以用来存放指 令操作的结果 例:MOV AX,1234H ;AX ← 1234H
(3) 直接寻址方式* — 有效地址EA由指令直接给出
例:MOV AX, [ 2000H ] EA=2000H, 假设(DS)=3000H, 那么PA=32000H
AH AL
30
50
32000
50 30
(AX) = 3050H
* 隐含的段为数据段 DS * 可使用段跨越前缀 MOV AX, ES: [2000H] * 操作数地址可由变量(符号地址)表示, 但要注意
有效地址=BX/BP+SI/DI+8/16位位 移量
+
源操作数的 物理地址
DS
1234
12340H 1000 BX 1000 SI 06
14346H AX AH AL
低地址
代码段
8B 41 06
段地址对应BX基址寄存器默 认是DS,对应BP基址寄存器 默认是SS;可用段超越前缀 改变 常用于二维数组查表操作 MOV AX,[BX+SI+06H] ;AX←DS:[BX+SI+06H
(6) 基址变址寻址方式*
(BX) 有效地址 = + (BP) 指令格式: MOV (SI)
(DI)
AX, [BX] [DI]
MOV
MOV
AX, [BX+DI]
AX, ES:[BX] [SI]
* 适于数组、字符串、表格的处理 * 必须是一个基址寄存器和一个变址寄存器的组合
MOV AX, [BX] [BP] MOV AX, [SI] [DI]
目的操作数
数据段 14346H 14347H 56 78
源操作数
高地址
MOV AX,[ BX+SI+06H ]
存储器
注意:
位移量可用符号(变量名)表示
在寄存器相对寻址或相对基址变址寻址方式中,位 移量可用符号表示:
MOV AX,[SI+COUNT] ;COUNT是事先定义的变量或常量(就是数值) MOV AX,[BX+SI+WNUM] ;WNUM也是变量或常量
低地址Biblioteka DS1234 12340H
代码段
A1 00
+
14340H AX AH AL
20 数据段 14340H 14341H 56 78
高地址
MOV AX,[ 2000H ]
存储器
3.2 寻址方式
存储器寻址方式
---(2)寄存器间接寻址方式
有效地址存放在基址 寄存器BX或变址寄 存器SI、DI中 默认的段地址在DS 段寄存器,可使用段 超越前缀改变
它可以是8位数值(00H~FFH) 也可以是16位数值(0000H~FFFFH) 也可以是32位数值 (00000000H~FFFFFFFFH)
----(1) 立即数寻址方式
当取指令时操作数作为指令机器字节的一部分一 起取出来存入cpu的指令队列中。执行该指令时, 直接得到该数。 立即数寻址方式常用来给寄存器赋值 操作数在哪里?在指令中直接给定,在代码段中 存储
低地址
DS
1234 12340H
代码段
8B 07
+
2000 BX
物理地址
14340H
目的操作数
AX AH AL
数据段 14340H 14341H 56 78
源操作数
MOV AX,[SI]
;AX←DS:[SI]
高地址
MOV AX,[ BX ]
存储器
MOV AX,[BX]
; AX ←DS:[BX]
3.2 寻址方式
3.2 寻址方式
存储器寻址方式
---(1)直接寻址方式
有效地址在指令中直接 给出 默认的段地址在DS段寄 存器,可使用段超越前 缀改变
MOV AX,[2000H] ;AX←DS:[2000H] ;指令代码:A10020 MOV AX,ES:[2000H] ;AX←ES:[2000H] ;指令代码:26A10020
MOV AX , COUNT [ SI ]
MOV AX , [ BP ] [ DI ] MOV AX , MASK [ BX ] [ SI ]
(1) 立即寻址方式* —— 操作数在指令中给出
指令格式:
MOV AL, 5 MOV AX, 3064H
MOV AL, ‘A’
* 只能用于 SRC 字段 * SRC 和 DST 的字长一致
DS 1234 12340H 06 14346H AX AH AL
低地址
代码段
8B 44
SI
物理地址
06
目的操作数
数据段 14346H 14347H 56 78
源操作数
高地址
存储器
3.2 寻址方式
存储器寻址方式
----(4)基址变址寻址方式
有效地址由基址寄存器(BX 或BP)的内容加上变址寄存 器(SI或DI)的内容构成:
存储器寻址方式
----(3)寄存器相对寻址方式
有效地址是寄存器内容与有符号8位 或16位位移量之和,寄存器可以是 BX、BP或SI、DI
有效地址=BX/BP/SI/DI+8/16位位移量
段地址对应BX/SI/DI寄存器默认是 DS,对应BP寄存器默认是SS;可用 段超越前缀改变 常用于数组或查表操作 2000 + MOV AX,[SI+06H] ;AX←DS:[SI+06H] MOV AX,[BP+06H] ;AX←SS:[BP+06H] MOV AX,[ SI+06H ]
同一寻址方式有多种表达形式
MOV AX,[BX][SI]
;等同于 MOV AX,[BX+SI] MOV AX,COUNT[SI] ;等同于 MOV AX,[SI+COUNT] MOV AX,WNUM[BX][SI] ;等同于 MOV AX,WNUM[BX+SI] ;等同于 MOV AX,[BX+SI+WNUM]
VALUE DB 10 MOV AH, VALUE MOV AX, VALUE MOV AX, WORD PTR VALUE
变量的属性
寄存器间接寻址* — EA 在基址寄存器(BX/BP) 或变址寄存器(SI/DI) 中
MOV AX, [BX] MOV AX, ES:[BX] MOV AX, [BP] PA = 16d (DS) + (BX) PA = 16d (ES) + (BX) PA = 16d (SS) + (BP)
代码段
8B 00
0006
14346H
SI
目的操作数
AX AH AL
数据段 14346H 14347H 56 78
源操作数
高地址
MOV AX,[ BX+SI ]
存储器
MOV AX,DS:[BP+DI] ;AX←DS:[BP+DI]
3.2 寻址方式
存储器寻址方式
---(5)相对基址变址寻址方式
有效地址是基址寄存器 (BX/BP)、变址寄存器 (SI/DI)与一个8位或16位 位移量之和:
(SI) (DI)
+
8位 16位
位移量
指令格式: MOV MOV
则: PA = 35000H
AX, COUNT[SI] AX, [COUNT+SI]
或
假设 (DS)=3000H, (SI)=2000H, COUNT=3000H,
假设(35000H)=1234H, 那么 (AX)=1234H
* 适于数组、字符串、表格的处理
寻址方式小结
与数据有关的寻址方式:以 MOV 指令为例
• • • • 立即寻址 寄存器寻址 直接寻址 寄存器间接寻址