第三章 IMB PC机的指令系统和寻址方式 下载本文

允许使用段跨越前缀。

例如:MOV AX,ES:[BX+SI] 有效地址: EA =(BX)+(SI)

物理地址 =(ES)×16 +(BX)+(SI)

一般用法:用于表格和数组处理,首地址可放在BX或BP中,用SI或DI来访问数组中的各个元素,也即SI或DI中的值是表内索引。由于二个寄存器值随时都可以修改,使用更加灵活。常用于矩阵数组处理。

7、相对基址变址寻址

操作数的有效地址是一个基址寄存器的内容,一个变址寄存器的内容和指令中指定的位移量之和。

约定关系与基址变址寻址方式相同。 ?若用基址寄存器 BX,段地址在DS中,

EA=(BX)+(SI)+8位或者16位位移量

或者 EA=(BX)+(DI)+8位或者16位位移量

?若用基址寄存器BP:段地址在SS中

EA=(BP)+(SI)+8位或者16位位移量

或者 EA=(BP)+(DI)+8位或者16位位移量

例3.11 MOV AX,MASK [BX] [SI]

13

也可以写成:

MOV AX,MASK [BX+SI] MOV AX,[MASK+BX+SI]

这条指令的三种写法,常用第二种写法。

有效地址:EA = MASK位移量 +(BX)+(SI) 物理地址 =(DS)×16 + EA

其中:MASK是数据段内定义的符号地址。

若MASK是在堆栈段内定义的符号地址, 有指令语句:

MOV AX,MASK [BP+SI]

有效地址:EA = MASK位移量 +(BP)+(SI) 物理地址 =(SS)×16 +EA

此时,BP可指向栈顶,从栈顶到数组首地址用MASK的位移量表示,SI用来访问数组中某个元素。

允许使用段跨越前缀。

寻址方式8、9和10均与比例因子有关,用于80386及其后继机型。(略)

寻址方式综合举例:

把首地址为BLOCK的字数组的第6个字送到

14

DX寄存器的指令序列。

首先在数据段定义BLOCK数组,并且数据段段地址已经送入DS寄存器中。

BLOCK DW 45H,79H,0BCH,1256H,0ACH,

0F6H,3400H;定义七项

存储分配如图所示。 据数段 45H BLOCK+0 第1个字

00

79H +2

第2个字

00 BCH +4

第3个字 00

56H +6 第4个字 12H ACH +8

第5个字 00 F6H +10

第6个字

00 00 +12

第7个字 34H

(1)用直接寻址

MOV DX,BLOCK+10 (2)用寄存器间接寻址

MOV BX,OFFSET BLOCK

15

ADD BX,10

MOV DX,[BX];取数

其中语句OFFSET BLOCK是取变量BLOCK的偏移地址。

(3)用寄存器相对寻址 MOV BX,10 ;将第6个字离表首的位移

量放入BX

MOV DX,BLOCK [BX];取数

(4)用基址加变址寻址

MOV BX,OFFSET BLOCK;取BLOCK首地

址偏移量

MOV SI,10 ;SI为表内索引 MOV DX,[BX+SI] ;取数

3.1.2 与转移地址有关的寻址方式——在控制转移指令中介绍。

3.2 程序占有的空间和执行时间 1.程序装入内存需要占用存储空间

80X86 的机器指令是可变字节指令,不同的指令或者不同寻址方式的机器指令长度不同。一条16位格式指令长度可为1—7字节,32位指令可达14

16