我似乎无法想象它是如何工作的。 我正在尝试将此简单的任务从C转换为mips:
#define ARRAYSIZE 16
int intarray[]={1, 5, -3, 6, 12, 21, 18, 44, 32, 9, 23, 10, 11, 99, 100, 24};
intarray[little] = intarray[ARRAYSIZE-1];
所以我在数据中定义了数组
.data
intarray: .word 1, 5, -3, 6, 12, 21, 18, 44, 32, 9, 23, 10, 11, 99, 100, 24
现在的问题是我知道如何足够容易地从此数组中加载单词
lw $t0, intarray($a0)
但是我不知道如何保存到该数组,因为它不在寄存器中。我什至可以操纵该数组,还是必须在寄存器中构建一个重复的数组?
答案 0 :(得分:1)
我混淆了lw
和sw
,一开始组装时的想法可能会造成混乱。事实证明,我一直在寻找的答案是,您需要首先加载数组的基地址(la address
),然后调用sw register address
。
答案 1 :(得分:-1)
实际上,“ lw”指令将特定地址中包含的数据保存到寄存器中。您应该在.data中更改汇编程序指令,然后在.word x,y,z ...中进行更改。然后,汇编程序将开始在内存中逐一分配,然后使用sw指令将所需的值传递给寄存器(记住MIPS是小尾数法,因此分配将从低有效位开始)
请记住,在MIPS上无法找到数组,但是可以在数组中分配每个值。 (32位是寄存器的最大值)
通常,您在beq / bne / j指令中或循环使用标签。
关于lw / sw指令的小知识:
lw $ 1,100($ 2)表示$ 1 =内存[$ 2 + 100]
sw $ 1,100($ 2)表示内存[$ 2 + 100] = $ 1
还请记住,lw / sw指令使用基址,其格式为I。因此,您可以知道每个寄存器使用了多少位。