汇编基础学习16

本文详细介绍了80386处理器中的三种主要寻址方式:直接寻址、间接寻址及变址寻址。直接寻址通过指定内存地址获取数据;间接寻址利用寄存器作为指针;变址寻址则通过寄存器偏移得到有效地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章转自 http://www.mcany.cn/article/291.htm

博主 没落的残阳

 

这节来学习下寻址方式。

1.首先我们来看什么是直接寻址?

直接寻址是我们创建一个直接偏移的操作数。 举例 mov eax, dword ptr [00403020h] ,那么[00403020h]就是直接寻址的形式。。加上dword ptr [] 表示获取的是我们目标内存地址的内容, dowrd ptr 是强制获取4个字节。

2.间接寻址

那什么是间接寻址呢?

用寄存器作为指针并操纵积存器的值,这称为间接寻址。存放地址的寄存器称为间接操作数。在32位模式下间接操作数可以是任何用[]括起来的32位通用寄存器(eax, ebx, ecx, edx ,esi , edi ,ebp ,esp) ,(注意:16位的模式下只能使用bx si di bp 4个寄存器), 寄存器里面放着数据的偏移。。


举例: 此时00402030h中存放4个字节数据。 00h 10h 40h 00h 。

执行 mov esi, 00402030h
mov eax, dowrd ptr [esi]

如果mov 指令使用“间接操作数”作为源操作数,那么esi内的指针将被用来寻址。该地址的4个字节被传送到目的操作数中。。 此时eax = 00401000h

3.变址寻址

变址操作数将“常量”加到寄存器上以产生一个有效地址,任何32位通用寄存器都可以作为指针寄存器。
    格式:[constant + reg]  --- (constant:常量, reg:寄存器) 。这样的形式被用到我们高级语言的数组处理比较多。
举例:
   此时00403020h,存放8个字节数据 00h 10h 40h 00h 15h 00h 40h 00h
  那么通过  
        mov esi, 00403020h
        mov eax, dword ptr [esi]
        mov eax, dword ptr [esi+4]
        这里大家要注意下,避免使用ebp寄存器。因为ebp寄存器被常用于堆栈段,所以我们要避免这个情况。

这里我们是依据80386的寻址方式,例如80386还可以演化一些相对寻址,变址寻址等。其实这些也都是基于变址寻址的,大家知道就可以了。 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值