Linux汇编教程04:寻址方式

这一节,我们主要来讨论寻址方式,这一点十分重要。
我们上一节有稍微提了一下,内存地址引用的通用格式:
地址或偏移(%基址寄存器, %索引寄存器, 比例因子 )
结果地址 = 地址或偏移 + %基址寄存器 + 比例因子 + %索引寄存器
地址或偏移和比例因子必须是常数,剩下的那两个必须是寄存器,在缺省的情况下,都用0来代替。

立即寻址方式
直接将值加载到目地位置中

movl $221, %eax</p>
  • 1

直接寻址方式
通过使用地址或偏移来实现

movl ADDRESS, %eax</p>
  • 1

索引寻址方式
通过地址或偏移以及%索引寄存器部分实现。你可以将任何通用寄存器用作索引寄存器。

movl data_items( , %ebx, 4 ), %eax</p>
  • 1

间接寻址方式
以寄存器中的值作为地址,获得这个地址里的值。

movl (%eax), %ebx</p>
  • 1

基址寻址方式
和间接寻址类似,但多了一个常量和寄存器中的地址相加,

movl 4(%eax), %ebx</p>
  • 1

寄存器寻址方式
就是数据的移入移出

这些方式大家要理解他们的特点,了解原理,到时候讲到堆栈之类的方便多了。

补充:

我们之前有讲过,32位寄存器都以e开头开头,%eax是我们的扩展寄存器,这种命名实现对以前的兼容,以前使用%ax的16位寄存器,当然32位寄存器也可以使用%ax,%ax是%eax最低有效字(数值的后半部分),同理%ax还可以封出一字节的%ah和%al。%ah是%ax中最高有效半字,%al是最低有效半字

原文地址:https://www.cnblogs.com/guochaoxxl/p/10468715.html

时间: 2024-11-08 06:19:38

Linux汇编教程04:寻址方式的相关文章

Linux汇编教程01: 基本知识

在我们开始学习Linux汇编之前,需要简单的了解一下计算机的体系结构.我们不需要特别深入的了解,理解了一些基本概念对与我们理解程序会很有帮助.现在计算机的结构体系都是采用冯诺依曼体系结构的基础上发展过来的.而冯诺依曼的体系有两个主要组成部分:CPU和内存.而我们的汇编语言和这两个部分十分密切. 1.1 内存结构 内存的结构就像一排连续的房子,或者是一种矩阵.每个空间的大小是固定的,且每一个存储单元都有自己的地址或者编号.房子的地址是门牌号,而内存的每个单元都有自己的地址. 计算机的内存有数以万计

Linux汇编教程03:大小比较操作

我们在上一讲中,简单了解了汇编程序大概的样子.接下来我们来了解一下,汇编程序的大小比较操作.所以我们以编写寻找一堆数中的最大值作为学习的载体. 在编写程序之前,先要分析我们的目的,在得出解决方案. 目的:在一堆数中找到最大的数 思路:要实现这个目的,首先,我们一定要对数据进行索引,每一次比较,两个数应该分别占用一个寄存器,得到最大值,所以,我们有一个寄存器一定是存放最大值的.一开始没有最大值,我们不妨设第一个数为最大值,后面一次索引大小比较.得出最大值.索引中还会用到循环结构. 解决方案——代码

Linux汇编教程02:编写第一个汇编程序

学习一门语言,最好的方式就是在运用中学习,那么在这一章节中,我们开始编写我们的第一个汇编程序.当然作为第一个程序,其实十分的简单,但可以给大家一个基本的轮廓,了解汇编大概是这样的. 我们这个程序实际上没什么作用,只是简单的推出而已.下面就是程序的范例 # 目的: 退出程序并向Linux内核返回一个状态码 # 输入: 无 # 输出: 返回一个状态码.在程序运行结束后可以通过 echo $? 来读取状态码 # 变量: %eax保存系统调用号 %ebx保存返回状态 .section .data .se

【转】用win7(64位)远程桌面连接linux(Ubuntu14.04)详细教程

转自:http://blog.csdn.net/qq754438390/article/details/50042511 亲测,确实是可以.非常感谢原博. 用win7(64位)远程桌面连接linux(Ubuntu14.04)详细教程 1.需要读者初步了解linux的基本操作,并可以联网,以下操作均是在linux上进行,在终端输入 hostname -I 记录本机的IP地址,这个IP地址后面会用到: 2.继续输入 vino-preferences 就会弹出下面的对话框,按照图片上的勾选即可,注意s

Linux makefile 教程 很具体,且易懂

近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了下面这篇文章.通俗易懂.然后把它贴出来,方便学习. 后记,看完发现这篇文章和<Linux环境下的C编程指南>的makefile一章所讲述的惊人的类似,仅仅是这篇文章从一个实例切入,在有些地方比較好理解.能让人看懂就是好文章. 跟我一起写 Makefile陈皓 (CSDN)概述--什么是makefile?也许非常多Winodws的程序

Linux 汇编

Linux 汇编语法格式 绝大多数 Linux 程序员以前只接触过DOS/Windows 下的汇编语言,这些汇编代码都是 Intel 风格的.但在 Unix 和 Linux 系统中,更多采用的还是 AT&T 格式,两者在语法格式上有着很大的不同: 在 AT&T 汇编格式中,寄存器名要加上 '%' 作为前缀:而在 Intel 汇编格式中,寄存器名不需要加前缀.例如: AT&T 格式 Intel 格式 pushl %eax push eax 在 AT&T 汇编格式中,用 '$'

很详细、很移动的Linux makefile教程:介绍,总述,书写规则,书写命令,使用变量,使用条件推断,使用函数,Make 的运行,隐含规则 使用make更新函数库文件 后序

很详细.很移动的Linux makefile 教程 内容如下: Makefile 介绍 Makefile 总述 书写规则 书写命令 使用变量 使用条件推断 使用函数 make 的运行 隐含规则 使用make更新函数库文件 后序 近期在学习Linux下的C编程,买了一本叫<Linux环境下的C编程指南>读到makefile就越看越迷糊,可能是我的理解能不行. 于是google到了以下这篇文章.通俗易懂.然后把它贴出来,方便学习. 后记,看完发现这篇文章和<Linux环境下的C编程指南>

arm汇编--ubuntu12.04 安装arm-linux交叉编译环境

1. 安装标准的C开发环境,由于Ubuntu安装默认是不安装的,所以需要先安装一下:sudo apt-get install gcc g++ libgcc1 libg++ make gdb 2.从ftp://ftp.arm.linux.org.uk/pub/armlinux/toolchain/下载最新版本的交叉编译器,我下载的是cross-3.2.tar.bz2,解压到Downloan目录,会生成home/Downloads/usr/local/arm/,然后sudo cp -r arm /u

〔原创〕Ubuntu Linux Server 9.04 安装全程图解

关于Ubuntu Linux Server 9.04 版本的安装使用.先声明几点: 1. 整个安装过程,都是全英文的,而且,是文本模式,不像Desktop版本,有Livecd的图形化模式.2. 刚开始光盘引导的时候,必须选择:English !否则在系统安装好以后,如果安装图形化桌面,会因为字体问题导致很多操作都不能顺利进行.(因为看不到文字……都是乱码).所以这还是选择英文好.英语总比乱码好吧?3. 安装之前,断开网络!(不知道怎么断,就拔掉网线)4. Server 版本安装好以后,只有一个“