我在这里有以下问题
.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加载单词?
答案 0 :(得分:1)
是的,当您添加$0
和1
时,您会获得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吗? 我不知道归零的地方。