gpt4 book ai didi

memory - MIPS内存限制?

转载 作者:行者123 更新时间:2023-12-04 21:24:57 25 4
gpt4 key购买 nike

我想问一下内存访问。当我执行 load word命令,存在哪些内存限制?意思是我可以用作偏移量或基址寄存器的最大数字是多少?

寄存器是 32 位,据我所知,“立即数”是 16 位。
因此,我很确定我不能做类似的事情

array:  .word 0:20000
~

la $s0, array
lw $s1, 15000($s0)
...

所以如果我想访问 15000,我可能需要 la更小的东西,然后从那里继续吧?
但是我需要访问的较小值是什么,为什么?

最佳答案

lw 中的直接字段是 16 位,是的;并且它是有符号的二进制补码,因此立即偏移的可能范围是 -32768..32767 - 所以 lw $s1, 15000($s0)应该没事。

意识到la不是真正的 MIPS 指令。相反,它指导汇编程序生成最佳指令序列,以便将您指定的立即数放在指定的寄存器中。因此,可以使用 la 设置完整的 32 位值范围。 ,但通常可以使用 la 生成更优化的代码一次将合适的值放入某个寄存器,以便后续的几个指令能够使用该值的立即偏移量,而不是使用 la每次需要立即值时。

因此,假设您需要从数组的偏移量 40000 和 50000 加载值,您可以这样做:

array:  .word 0:20000
~
la $s0, array # get address of array
la $s1, 40000 # get offset into a register
add $s0, $s0, $s1 # add offset to address, i.e. calculate (array+40000)
lw $s1, 0($s0) # fetch data from (array+40000)
lw $s2, 10000($s0) # fetch data from (array+40000+10000)

关于memory - MIPS内存限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5243104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com