简单的MIPS问题,关于加载字节

时间:2010-10-31 01:53:31

标签: assembly mips

我在这里有以下问题

.data
a: .asciiz "2021"
x: .byte 7,2,12
.text
main: addi $t2, $0, 1
lb $t3, a($t2)

有人可以向我解释,$ t3的价值是多少是48?

感谢 编辑这是另一个类似的问题,令人困惑。

.data
a: .word 12,-5,4,0
x: .byte 5
.text
main: addi $t1, $0, 8
lw $t2, a($0)
lw $t3, a($t1)

当'a'的长度为4时,如何从索引8加载单词?

2 个答案:

答案 0 :(得分:1)

是的,当您添加$01时,您会获得1,这会被放入$t2

然后,当你评估a($t2)时,那是a的第二个字节(偏移1,因为它基于偏移0),即{0},ASCII码0x30或{ {1}}。


从各种信息:

48
  

寄存器ADDI -- Add immediate (with overflow) Description: Adds a register and a sign-extended immediate value and stores the result in a register Operation: $t = $s + imm; advance_pc (4); Syntax: addi $t, $s, imm LB -- Load byte Description: A byte is loaded into a register from the specified address. Operation: $t = MEM[$s + offset]; advance_pc (4); Syntax: lb $t, offset($s) 始终包含硬连线值0. MIPS已建立了一组关于如何使用寄存器的约定。这些建议是指导原则,硬件不强制执行。但是,违反这些程序的程序将无法与其他软件一起正常运行。

这些小片段应该足以解释它正在做什么。


而且,关于您的编辑,您错误地认为$0的长度为4个字节。实际上它的长度为16个字节,因为MIPS中的字是32位(4字节)宽。

因此,当您从 byte 偏移量8加载时,您将获得 .word 12,-5,4,0

答案 1 :(得分:0)

仅供参考,在讲义4的第11页有一个ASCII图表;) 但我不明白这个: “当你评估一个($ t2)时,这是第二个字节(偏移1,因为它基于偏移0),a是”0“ 我认为'2021'的二进制表示是: 00110010001100000011001000110001 所以,当你说“哪个是”0“”你的意思是右边的第二位?这是你在说的0吗? 我不知道归零的地方。