汇编语言的寻址方式

x86支持多种操作数格式。源数据值可以以常数形式给出,或是从寄存器或内存中读出。结果可以存放在寄存器或内存中。因此各种不同的操作数的可能性被分为三种类型,第一种类型是立即数(immediate),用来表示常数值;第二种类型是寄存器(register),它表示某个寄存器的内容;第三种操作数是内存引用,它会根据计算出来的地址(通常称为有效地址)访问某个内存位置。(来源《深入了解计算机系统》第3版P121页)

1.8086的寻址方式(16位的MASM格式)

练习题:假设下面的值存放在指明的内存地址和寄存器中:

地址

0x100

0XFF

0x104

0XAB

0x108

0X13

0x10C

0X11

寄存器

BX

0x100

CX

0x1

DI

0x3

填写下表,给出所示操作数的值:

操作数

注释

BX

0X100

寄存器寻址

[0x104]

0XAB

直接寻址            地址0x104

0x108

0x108

立即寻址

[BX]

0XFF

寄存器间接寻址 地址0x100

4[BX]

0XAB

寄存器相对寻址 地址0x104

9[BX][DI]

0X11

基址变址寻址    地址 0x10c

2. 32位/64位的寻址方式(ATT格式)

练习题:假设下面的值存放在指明的内存地址和寄存器中:(32位同)

地址

0x100

0XFF

0x104

0XAB

0x108

0X13

0x10C

 0X11

寄存器

%rax

0x100

%rcx

0x1

%rdx

0x3

填写下表,给出所示操作数的值:

操作数

注释

%rax

0x100

寄存器

0x104

0xAB

绝对地址

$0x108

0x108

立即数

(%rax)

0xFF

地址0x100

4(%rax)

0xAB

地址0x104

9(%rax, %rdx)

0x11

地址0x10c

260(%rcx, %rdx)

0x13

地址0x108

0xFC(, %rcx, 4)

0xFF

地址0x100

(%rax, %rdx, 4)

0x11

地址0x10c

猜你喜欢

转载自blog.csdn.net/TanguanhuaD/article/details/88929998
今日推荐