变址values(, %edi, 4)和间址4(%edi)
《汇编语言程序设计》Richard Blum著:5.2.4 在内存和寄存器之间传送数据
使用变址的内存位置:
可以在一个命令中指定把多个值存放到内存中:
values:
.int 10,15,20,25,30,35,40,45,50,55,60
这创建存放在内存中的连续的一系列数据值。每个数据值都占用内存的一个单元(在上面的例子中是长整型,即4个字节)。引用数组中的数据时,必须使用变址系统确定你要访问的是哪个值。
完成这种操作的方式称为变址内存模式(indexed memory mode)。内存位置由下列因素确定:
(1)基址
(2)添加到基址上的偏移地址
(3)确定选择哪个数据元素(第几个)的变址
(4)数据元素的长度
表达式的格式是:
base_address(offset_address, index, size)
获取的数据值位于:
base_address + offset_address + index * size
如果其中的任何值为零,就可以忽略它们(但是仍然需要用逗号作为占位符)。offset_address和index的值必须是寄存器,但size的值可以是数字值。例如,为了引用前面给出的values数组中的值20,可以使用下面的命令:
movl $2, %edi
movl values(, %edi, 4), %eax
这条指令把从values标签开始的第3个4字节的变址值(是值不是地址)加载到EAX寄存器中(记住,数组从变址0开始)。
使用寄存器间接寻址
除了保存数据之外,寄存器也可以用于保存内存地址。当寄存器保存内存地址时,它被称为指针(pointer)。使用指针访问存储在内存位置中的数据称为间接寻址(indirect addressing)。
使用标签引用内存位置中包含的数据值,通过在标签前面加上美元符号($)获得数据值的内存位置的地址。因此,下面这条指令
movl $values, %edi
用于把values标签引用的内存位置的地址传送给EDI寄存器。
间接寻址模式的另一半,如下面这条指令
movl %ebx, (%edi)
如果EDI寄存器外面没有括号,那么指令只是把EBX寄存器中的值加载到EDI寄存器中。如果EDI寄存器外面加上了括号,那么指令就把EBX寄存器中的值传送给EDI寄存器中包含的内存位置。
GNU汇编器不允许把值与寄存器相加,必须把值放在括号之外,就像这样:
movl %edx, 4(%edi)
这条指令把EDX寄存器中的值存放在EDI寄存器指向的位置之后4个字节的内存位置中。也可以把它存放到相反的方向:
movl %edx, -4(%edi)
这条指令把值存放在EDI寄存器指向的位置之前4个字节的内存位置中。
变址values(, %edi, 4)和间址4(%edi)的更多相关文章
- C——数组下标与间址运算符
只说一句,数组下标与间址运算符*是等价的,即:a[i] = *(a+i),看代码: int main(int argc, char* argv[]) { ] = {, , , , }; int i; ...
- 术语-EDI:EDI
ylbtech-术语-EDI:EDI 电子数据交换(Electronic data interchange,缩写EDI)是指按照同一规定的一套通用标准格式,将标准的经济信息,通过通信网络传输,在贸易伙 ...
- EDI 学习开发(一)
最近有个需求,关于EDI 的开发,效果烂成一坨屎,写个总结,记录这坨屎. 配置文件:01.EDI.Export.Config(在EDI 服务器SystemConfig目录下) 02.EDI.TypeC ...
- EDI的五个常见挑战以及如何克服这些挑战
EDI是成功进行供应链管理的一个关键要素.它使企业能够以标准化的电子格式处理与任何交易伙伴的业务数据交换,极大简化了许多曾经繁琐的程序.然而,如果企业正在扩张或处于高速增长阶段,如何充分利用EDI仍然 ...
- 电子物流中的EDI 应用
电子物流中的EDI 应用 背景 EDI 全称是Electronic data interchange, 即电子数据交换.在传统企业里,很多流程上的操作或者通信一般是由纸质媒介完成的,比如说采购订单.发 ...
- windows消息钩子注册底层机制浅析
标 题: [原创]消息钩子注册浅析 作 者: RootSuLe 时 间: 2011-06-18,23:10:34 链 接: http://bbs.pediy.com/showthread.php?t= ...
- 嵌入式Linux C笔试题积累(转)
http://blog.csdn.net/h_armony/article/details/6764811 1. 嵌入式系统中断服务子程序(ISR) 中断是嵌入式系统中重要的组成部分,这导致了很 ...
- MCS-51单片机存储器结构
MCS-51的存储器可分为四类: 程序存储器 一个微处理器能够聪明地执行某种任务,除了它们强大的硬件外,还需要它们运行的软件,其实微处理器并不聪明,它们只是完全按照人们预先编写的程序而执行之.那么设 ...
- 要让CLR挂掉的话……
http://rednaxelafx.iteye.com/blog/460893 (Disclaimer:如果需要转载请先与我联系. 作者:RednaxelaFX -> rednaxelafx. ...
随机推荐
- C#编程(七十四)----------释放非托管资源
释放非托管资源 在介绍释放非托管资源的时候,我觉得有必要先来认识一下啥叫非托管资源,既然有非托管资源,肯定有托管资源. 托管资源指的是.net可以自棕进行回收的资源,主要是指托管堆上分配的内存资源.托 ...
- python测试开发django-33.admin后台一对一关系OneToOneField
前言 假如有一张表(Card)记录用户的卡号信息和用户名,现在需要新增一个小功能,记录用户的手机号,邮箱和住址等更多信息. 为了不影响原来的表设计,可以新增一张表(CardDetail),专门记录用户 ...
- Linux学习12-CentOS设置多个tomcat开机自启动
前言 一台服务器上有多个tomcat环境,重启服务器后,每次需要手动一个个启动服务,非常麻烦,于是可以设置tomcat开机自启动. tomcat开机自启动非常慢,可以修改jvm下配置解决tomcat开 ...
- SharePoint 2016 站点注册工作流服务报错
前言 安装完SharePoint 2016工作流环境,本来以为万事大吉了,结果给站点注册的时候报错了.搜了很多文章,发现后面要加上-Force参数. 错误截图 使用的为站点注册工作流服务的PowerS ...
- 关于mysql中information_schema.tables
项目中出现这样一个SQL语句,现记录如下: @Select("select table_name tableName, engine, table_comment tableComment, ...
- [Web 前端] CSS 盒子模型,绝对定位和相对定位
cp : https://blog.csdn.net/web_yh/article/details/53239372 一.盒子模型: 标准模式和混杂模式(IE).在标准模式下浏览器按照规范呈现页面:在 ...
- MySQL 查询优化简记
今天尝试对一张MySQL表做查询优化, 500W数据 但是发现加了索引比不加索引使用全表扫描还慢, 上网查, 据说是因为需要回表, 因为没有用到 using index(覆盖索引), 而回表查询是随机 ...
- 案例导入和导出Scott用户
ylbtech-Oracle:案例导入和导出Scott用户 导入和导出Scott用户 1. 导出Scott用户下的所有对象返回顶部 1.1, Microsoft Windows [版本 ] 版权所有 ...
- iOS:在tableView中通过Masonry使用autolayout在iOS7系统出现约束崩溃
一.出现崩溃情景: 给tableView创建一个头视图,也即tableHeaderView,然后使用Masonry并切换到iOS7/7.1系统给tableHeaderView中的所有子视图添加约束,此 ...
- [leetcode]Wildcard Matching @ Python
原题地址:https://oj.leetcode.com/problems/wildcard-matching/ 题意: Implement wildcard pattern matching wit ...