变址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)

时间: 2024-10-25 22:29:05

变址values(, %edi, 4)和间址4(%edi)的相关文章

EDI相关知识

以下内容仅供参考,若有疑问可点击这里查看. 什么是EDI无纸无纸报关交易? EDI无纸报关是利用现代信息技术.采取物联网方式,对进出口货物申报数据和报文进行自动处理的一种先进的通关方式 ,具有数据处理自动化程度高,通关速度快.成本低.监管严密等特点,已为当今一些发达国家海关所采用. 实行EDI无纸报关后,企业可以足不出户,在自己的办公室将进出口货物报关数据通过网络传输至海关,海关计算机对报关单证的电子数据和报文进行自动处理,并将处理结果以电子回执形式通过网络传至企业端.回执分为"缴纳税费&quo

EDI 学习开发(一)

最近有个需求,关于EDI 的开发,效果烂成一坨屎,写个总结,记录这坨屎. 配置文件:01.EDI.Export.Config(在EDI 服务器SystemConfig目录下) 02.EDI.TypeConfig(三个地方使用:客户端SystemConfig,AppServer/Systemconfig,EDI 服务/SystemConfig) 03.校验文件:IFTMBF.validator.Xml(三个地方:客户端SystemConfig/EDI,Server/Systemconfig/EDI

EDI RFC IDOC

EDI(electirc data interchange)是电子数据交换,是联合国标准化组织的一种通用的数据交换标准IDOC(intermediate document)是中介文档,是符合EDI标准的一种的数据格式,它一般是整个的消息报文,包含了事务数据.主数据.控制数据,用以控制数据的整个交换流程,其中呢,主数据一般是XML格式,所以我们可以方便解析.RFC(remote function call)是远程函数调用,在SAP中是基于TCP协议来实现的,实际上是一种底层通信技术PMI(proc

webMethods中对EDI的转换与应用

webMethods针对edi做的功能是很完善的,is里面单独有一个wmedi的包,里面有各种对于edi数据操作的方法,包括格式转换,envelop的添加等. edi格式的转换主要有三种类型:edi/UNEDIFACT的解析和转换,xml到edi的转换,FlatFile的解析和转换. 1.edi/UNEDIFACT:将edi解析成doc,映射到自己定义的DB的doc,将DB的doc用jdbc adpater batch insert到DB.再从DB中拿出来db的doc list,映射到edi的d

汇编语言基本概念汇总

汇编语言应该是我们现在学的最"低级"的语言了,因为现在不会再有人去学机器语言了.而汇编语言还在一些硬件或者嵌入式设备上使用并开发着.以下资料是为了大学的汇编考试整理的资料,现在与大家分享,希望能给大家提供帮助. 汇编语言程序设计汇总 计算机主要由运算器.控制器.存储器和输入输出设备五大部件构成. 字长word是指微处理器内部一次可以并行处理二进制代码的位数,它与微处理器内部寄存器以及CPU内部数据总线宽度是一致的,字长越长,所表示的数据精度就越高. 内存是由若干个存储单元组成,每个单元

30331寻址方式

8086的寻址方式 1.与数据有关的寻址方式 以 MOV 指令为例                         立即寻址 MOV AX , 3069H   寄存器寻址 MOV AL , BH 存储器寻址 直接寻址 MOV AX , [ 2000H ] 寄存器间接寻址 MOV AX , [ BX ]  寄存器相对寻址 MOV AX , COUNT [ SI ]  基址变址寻址 MOV AX , [ BP ] [ DI ] 相对基址变址寻址 MOV AX , MASK [ BX ] [ SI ]

汇编--寻址方式

1.立即寻址方式 mov AL,5 (AL)=05H mov AX,3064H (AX)=3064H mov EAX,123456H (EAX)=123456H 2.寄存器寻址方式 mov AX,BX (AX)=3064H (BX)=1234H (AX)=1234H MOV EXC,EDX 3.直接寻址方式 mov AX,[2000H] mov AX,2000H ;这两者等效 4.寄存器间接寻址方式 mov AX,[BX] 默认DS:[BX] ;也可以制定其他段跨越前缀来取得其他段中的数据 mo

计算机组成原理_第四版课后习题答案(完整版)

计算机组成原理_第四版课后习题答案(完整版) ?第一章 1.?比较数字计算机和模拟计算机的特点. 解:模拟计算机的特点:数值由连续量来表示,运算过程是连续的: 数字计算机的特点:数值由数字量(离散量)来表示,运算按位进行. 两者主要区别见P1?表1.1. 2.?数字计算机如何分类?分类的依据是什么? 解:分类: 数字计算机分为专用计算机和通用计算机.通用计算机又分为巨型机.大型机. 中型机.小型机.微型机和单片机六类. 分类依据:专用和通用是根据计算机的效率.速度.价格.运行的经济性和适应性来划

组成原理之指令寻址方式和操作数寻址方式图示

指令包括操作码和操作数两部分.指令的寻址方式即指令如何寻找下一条指令的:分为顺序寻址方式和跳跃寻址方式,其中顺序寻址方式是根据PC给出下一条要执行指令的地址,跳跃寻址方式是从执行指令中获取下一条指令的地址,之后更新PC数据,找到下一条要执行的指令. 顺序寻址方式: 如图 程序计数器+1可得到下一条指令 如图   跳跃寻址方式 如图 由指令3可以知道向下条指令为6,程序计数器的值变为6 如图 下面介绍操作数寻址方式,前面提到指令有操作码和操作数组成,一条指令中的操作数可以通过操作数地址寻找.寻找的