文档章节

汇编语言中的寻址方式

guonaihong
 guonaihong
发布于 2015/07/05 19:09
字数 306
阅读 351
收藏 2

直接寻址

movl address, %eax

把地址address指向的值加载到%eax里。比如mov 1, %eax 运行的结果是将地址1中的值而不是数字1本身加载到%eax中。


索引寻址

movl string_start(, %edi, 1), %eax

该指令将 地址=(string_start的地址)+(下表 %edi里面的值) * (数组每个元素的大小) 所指向的值保存到%eax里

%edi存放的是下标,1是数组每个元素的字节数

上面索引寻址有点像c里面用下标访问字符数组,如果string_start是类似c里面的int型数组,1就要改为4

char str[] = "hello world";
char c = str[0];//c = 'h'


间接寻址

movl (%eax), %ebx

间接寻址方式从寄存器指定的地址加载值。间接寻址有点像c里面用*对一个地址解引用,当然这个地址是放在变量(这里是%eax)里。


基址寻址

movl 4(%eax), %ebx

基址寻址与间接寻址方式类似,不同之处在于它将一个常量值与寄存器中的地址相加。


立即寻址

movl $1, %eax

立即寻址用于将值(这里是1)加载到寄存器中。


© 著作权归作者所有

guonaihong

guonaihong

粉丝 6
博文 83
码字总数 27591
作品 1
徐汇
程序员
私信 提问
加载中

评论(2)

guonaihong
guonaihong 博主

引用来自“UU5Xin”的评论

这个不是学过么
UU5Xin
UU5Xin
这个不是学过么
80x86 寻址方式与指令系统简介

80x86 寻址方式与指令系统简介 【课前思考】   (1) 什么是指令和指令系统?指令在什么时候由哪部分来执行?   (2) 8086汇编语言指令由几部分组成?各部分的作用是什么?   (3) ...

TheRoodToDeath
2017/03/14
0
0
AT&T与Intel汇编语言的比较

转自 陈莉君 一书《深入分析Linux内核源码》 http://www.kerneltravel.net/kernel-book/第二章%20Linux运行的硬件基础/2.6.1.htm 2.6.1 AT&T与Intel汇编语言的比较 我们知道,Linux是Unix家族...

晨曦之光
2012/03/09
212
0
ARM程序设计基础

ARM程序设计基础 ARM程序设计基础 1 1 ARM汇编器所支持的伪指令 1 2 ARM汇编器所支持的伪指令 10 3 汇编语言的语句格式 16 4 汇编语言的程序结构 19 ARM编译器一般都支持汇编语言的程序设计和...

长平狐
2013/06/03
249
0
深入理解程序设计使用linux汇编语言--第3章练习题

1.程序中的某一行以字符"#"开始意味着什么? 以字符"#"开头在汇编语言中是注释,汇编程序不会对注释进行任何处理。 2.汇编语言文件和对象代码之间有何区别? 汇编语言文件里的汇编语言是方便...

guonaihong
2015/07/05
219
0
16位和32位的80X86汇编语言的区别

需要注意的是汇编不是一种语言,不同平台有不同的汇编语言对应,因为汇编和操作系统平台相关,所以汇编语言没有移植性。对于IA-32架构平台而言,选用的32位80386汇编语言,也就只说讨论的操作...

mengyinxue
2018/05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Kettle自定义jar包供javascript使用

我们都知道 Kettle 是用 Java 语言开发,并且可以在 JavaScript 里面直接调用 java 类方法。所以有些时候,我们可以自定义一些方法,来供 JavaScript 使用。 本篇文章有参考自:https://www...

CREATE_17
昨天
82
0
处理CSV文件中的逗号

我正在寻找有关如何处理正在创建的csv文件的建议,然后由我们的客户上传,并且该值可能带有逗号(例如公司名称)。 我们正在研究的一些想法是:带引号的标识符(值“,”值“,”等)或使用|...

javail
昨天
79
0
如何克隆一个Date对象?

将Date变量分配给另一个变量会将引用复制到同一实例。 这意味着更改一个将更改另一个。 如何实际克隆或复制Date实例? #1楼 简化版: Date.prototype.clone = function () { return new ...

技术盛宴
昨天
73
0
计算一个数的数位之和

计算一个数的数位之和 例如:128 :1+2+8 = 11 public int numSum(int num) { int sum = 0; do { sum += num % 10; } while ((num = num / 10) > 0); return sum;......

SongAlone
昨天
124
0
为什么图片反复压缩后普遍会变绿,而不是其他颜色?

作者:Lion Yang 链接:https://www.zhihu.com/question/29355920/answer/119088684 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 业余版概要:安卓的...

shzwork
昨天
71
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部