首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将b[2]和[b[2]]*2设置为MIPS

如何将b[2]和[b[2]]*2设置为MIPS
EN

Stack Overflow用户
提问于 2021-10-17 15:24:24
回答 1查看 56关注 0票数 0

我在复习准备考试,但有一点我不明白

如果我们有这样的代码:

代码语言:javascript
复制
if (B[2] >= 0)

    X = A[B[2]] * 2;

如何获取b2和a[b2] *2

此时,A和B是一个数组

EN

回答 1

Stack Overflow用户

发布于 2021-10-17 16:32:35

  1. 数组存储在内存中,因为只有内存允许索引。数组元素连续存储在内存中。

开始地址(

  1. )意味着阵列本身具有存储器地址(起始地址),并且阵列的每个单独元素也具有其自己的唯一地址。当整个阵列的地址和第一个元素的地址(例如A[0])是相同的地址时,我们通过单个地址来引用整个阵列:其最小元素的地址。该地址通常也被称为阵列的基地址。(在32位机器的情况下,地址只是32位的数字,它可以保存在单个MIPS寄存器中。)

  1. 现代硬件是字节可寻址的。*这意味着存储在内存中的4字节宽的整数占用4个字节和4个存储器地址。例如,如果A从0x1000开始,则A1从0x1004开始,4个字节更远,因为A在0x1000-01003范围内占用4个字节。(我们也使用一个地址来指代单个元素:其范围内的最低地址。)

  1. 处理器可以同时访问大小为1字节、2字节或4字节的内存/all-4。当您使用加载指令从内存读取并存储指令写入内存时-告诉加载或存储在何处读取或写入,以及对于2和4字节加载有多少字节(1,2或4). ,告诉加载指令元素内的最低地址,它将读取连续的字节以形成半字(2字节)或全字(4). (对于小于4字节的负载,您可以选择符号或零扩展到32位寄存器)。

  1. 给定数组的每个元素都有相同的类型。元素的大小决定了比例因子。在数组索引和数组的字节偏移量之间进行转换时,比例因子是必需的。我们使用索引编写程序,但由于硬件是字节可寻址的,因此转换是必要的-除非元素大小是1字节,因为这是乘法标识-这种转换是由高级语言自动完成的,尽管在汇编中非常明显。

  1. 将所有这些放在一起,有一个元素地址的公式:baseAddress + index * sizeof(element). 乘法是由于必要的缩放,并将index转换为字节偏移量。然后,加法计算数组中第index个元素的字节地址。

给定计算出的地址,我们可以使用加载(或存储)指令,然后该指令将完成索引操作,例如... = ... C[i] ...; (或C[i] = ...;).

  1. 如果所讨论的index是一个常数,如2,我们可以在头脑中执行上述通式中的乘法,例如,如果元素大小是4字节整数,则为2*4=8,因此我们知道A[2]位于A+8.

  1. MIPS处理器提供了一种寻址模式,称为基址加移位。基址必须是一个寄存器,该寄存器保存访问存储器的地址,尽管处理器会首先将小的(16位)整数常量位移加到基址寄存器的地址上,以计算在存储器访问中实际使用的所谓有效地址。

如果执行A[i],则位移没有任何帮助(对某些优化进行取模,例如循环展开),因此使用零(加法恒等式)作为位移,但是在执行A[2]时,可以使用位移跳过原本是公式baseAddress + index * sizeof(element). 一部分的add指令(该公式在任何一种情况下都同样适用:我们可以在乘法和加法运行时使用与A[i]相同的方法进行A[2],但在寻址模式下,可以使用常量index * sizeof(element)的位移。)。

为了计算A[B[2]],我们将表达式分解为可单独消化的较小部分:

代码语言:javascript
复制
temp = B[2];
valueOfInterest = A[temp];

上面的每一行都应该是可访问的。. 它只是两个数组引用(一个是通过常量/已知索引,一个是通过变量/未知索引). 这两个都是读,所以每个数组引用应该有一个lw

如果我们在赋值的右侧找到一个数组引用=,那么它需要一个存储来写入内存,而不是一个加载来读取内存。

如果我们有一个赋值运算符A[i] += ...; (或递增/递减运算符:A[i]++),这意味着我们必须同时加载到读内存和存储到写内存,并将读和写都写入相同的地址。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69605800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档