首页
社区
课程
招聘
[原创]WIN32汇编几种寻址方式
发表于: 2021-3-11 11:51 4155

[原创]WIN32汇编几种寻址方式

2021-3-11 11:51
4155

寻址格式:
AT&T汇编:
%段寄存器:地址或偏移(%基址或偏移量寄存器,%索引寄存器,比例因子)
INTEL汇编:
段寄存器:[基址或偏移量寄存器+索引寄存器x比例因子+地址或偏移]

 

地址或偏移以及比例因子都必须是常量,其余两个必须是寄存器。如果省略任何一项,那么等式中将以0代替该项。注意:如果不指定比例因子,则比例因子默认为1。

 

在AT&T汇编中,地址或偏移常量和比例因子常量不能添加$前缀.
结果地址 = 基址或偏移量寄存器 + 索引寄存器 x 比例因子 + 地址或偏移

 

立即寻址:
在立即数寻址(或立即寻址)方式中,指令需要的操作数紧跟在操作码之后作为指令机器
代码的一部分,并随着处理器的取指操作从主存进入指令寄存器。这种操作数用常量形式直接表达,从指令代码中立即得到,称之为立即数( Immediate)。立即数寻址方式只用于指令的源操作数,在传送指令中常用来给寄存器和存储单元赋值。
AT&T汇编:
mov操作数大小字符 $idata,%寄存器
mov操作数大小字符 $idata,%段寄存器:地址或偏移(%基址或偏移量寄存器,%索引寄存器,比例因子)

 

INTEL汇编:
mov 寄存器,idata
mov 访问方式 ptr 段寄存器:[基址或偏移量寄存器+索引寄存器x比例因子+地址或偏移],idata

 

直接寻址
有效地址只有位移量部分,且直接包含在指令代码中,就是存储器的直接寻址方式。直接寻址常用于存取变量。
AT&T汇编:
mov操作数大小字符 %段寄存器:地址或偏移,%寄存器
mov操作数大小字符 %寄存器,%段寄存器:地址或偏移
INTEL汇编:
mov 寄存器,访问方式 ptr 段寄存器:[地址或偏移]
mov 访问方式 ptr 段寄存器:[地址或偏移],寄存器

 

寄存器间接寻址,寄存器间接寻址又被称为间接寻址.
有效地址存放在寄存器中,就是采用寄存器间接寻址存储器操作数。MASM汇编程序使用英文中括号括起寄存器表示寄存器间接寻址。IA-32处理器的8个32位通用寄存器都可以作为间接寻址的寄存器,但建议主要使用EBX、ESI、EDI,访问堆栈数据时使用EBP

 

AT&T汇编:
mov操作数大小字符 %段寄存器:(%基址或偏移量寄存器),%寄存器
mov操作数大小字符 %寄存器,%段寄存器:(%基址或偏移量寄存器)
INTEL汇编:
mov 寄存器,访问方式 ptr 段寄存器:[基址或偏移量寄存器]
mov 访问方式 ptr 段寄存器:[基址或偏移量寄存器],寄存器

 

寄存器相对寻址,寄存器相对寻址又被称为基址寻址.
寄存器相对寻址的有效地址是寄存器内容与位移量之和。
AT&T汇编:
mov操作数大小字符 %段寄存器:地址或偏移(%基址或偏移量寄存器),%寄存器
mov操作数大小字符 %寄存器,%段寄存器:地址或偏移(%基址或偏移量寄存器)
INTEL汇编:
mov 寄存器,访问方式 ptr 段寄存器:[基址或偏移量寄存器+地址或偏移]
mov 访问方式 ptr 段寄存器:[基址或偏移量寄存器+地址或偏移],寄存器

 

变址寻址:
使用变址寄存器寻址操作数称为变址寻址。在变址寄存器不带比例(或者认为比例为1)的情况下,需要配合使用一个基址寄存器(称为基址变址寻址方式),还可以再包含一个位移量(称为相对基址变址寻址方式),存储器操作数的有效地址由一个基址寄存器的内容加上变址寄存器的内容或再加上位移量构成。这种寻址方式适用于二维数组等数据结构.

 

基址变址寻址:
AT&T汇编:
mov操作数大小字符 %段寄存器:(%基址或偏移量寄存器,%索引寄存器),寄存器
mov操作数大小字符 寄存器,%段寄存器:(%基址或偏移量寄存器,%索引寄存器)
INTEL汇编:
mov 寄存器,访问方式 ptr 段寄存器:[基址或偏移量寄存器+索引寄存器]
mov访问方式 ptr 段寄存器:[基址或偏移量寄存器+索引寄存器] ,寄存器

 

相对基址变址寻址
AT&T汇编:
mov操作数大小字符 %段寄存器:地址或偏移(%基址或偏移量寄存器,%索引寄存器),寄存器
mov操作数大小字符 寄存器,%段寄存器:地址或偏移(%基址或偏移量寄存器,%索引寄存器)
INTEL汇编:
mov 寄存器,访问方式 ptr 段寄存器:[基址或偏移量寄存器+索引寄存器+地址或偏移]
mov 访问方式 ptr 段寄存器:[基址或偏移量寄存器+索引寄存器+地址或偏移],寄存器

 

带比例的变址寻址:
AT&T汇编:
mov操作数大小字符 %段寄存器:(,%索引寄存器,比例因子),寄存器
mov操作数大小字符 寄存器,%段寄存器:(,%索引寄存器,比例因子)
INTEL汇编:
mov 寄存器,访问方式 ptr 段寄存器:[索引寄存器x比例因子]
mov 访问方式 ptr 段寄存器:[索引寄存器x比例因子],寄存器

 

带比例的相对变址寻址:
AT&T汇编:
mov操作数大小字符 %段寄存器:地址或偏移(,%索引寄存器,比例因子),寄存器
mov操作数大小字符 寄存器,%段寄存器:地址或偏移(,%索引寄存器,比例因子)
INTEL汇编:
mov 寄存器,访问方式 ptr 段寄存器:[索引寄存器x比例因子+地址或偏移]
mov 访问方式 ptr 段寄存器:[索引寄存器x比例因子+地址或偏移],寄存器

 

带比例的基址变址寻址:
AT&T汇编:
mov操作数大小字符 %段寄存器:(%基址或偏移量寄存器,%索引寄存器,比例因子),寄存器
mov操作数大小字符 寄存器,%段寄存器:(%基址或偏移量寄存器,%索引寄存器,比例因子)
INTEL汇编:
mov 寄存器,访问方式 ptr 段寄存器:[基址或偏移量寄存器+索引寄存器x比例因子]
mov 访问方式 ptr 段寄存器:[基址或偏移量寄存器+索引寄存器x比例因子],寄存器

 

带比例的相对基址变址寻址:
AT&T汇编:
mov操作数大小字符 %段寄存器:地址或偏移(%基址或偏移量寄存器,%索引寄存器,比例因子),寄存器
mov操作数大小字符 寄存器,%段寄存器:地址或偏移(%基址或偏移量寄存器,%索引寄存器,比例因子)
INTEL汇编:
mov 寄存器,访问方式 ptr 段寄存器:[基址或偏移量寄存器+索引寄存器x比例因子+地址或偏移]
mov 访问方式 ptr 段寄存器:[基址或偏移量寄存器+索引寄存器x比例因子+地址或偏移],寄存器


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2021-3-11 22:02 被displaydata编辑 ,原因: 不能显示*号,故以x代替,表达乘号. 另外,修改标题,使其更符合文章意思。
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 66
活跃值: (53)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
大神说的不错。下回实践实践
2021-3-14 10:37
0
游客
登录 | 注册 方可回帖
返回
//