Assembly 关于加载字节的简单MIPS问题
我有一个问题Assembly 关于加载字节的简单MIPS问题,assembly,mips,Assembly,Mips,我有一个问题 .data a: .asciiz "2021" x: .byte 7,2,12 .text main: addi $t2, $0, 1 lb $t3, a($t2) 有人能给我解释一下,t3美元的价值是多少 谢谢 编辑这是另一个类似的问题,令人困惑 .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加载wo
.data
a: .asciiz "2021"
x: .byte 7,2,12
.text
main: addi $t2, $0, 1
lb $t3, a($t2)
有人能给我解释一下,t3美元的价值是多少
谢谢
编辑这是另一个类似的问题,令人困惑
.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加载word?是的,当您添加
$0
和1
时,您将得到1
,它被放入$t2
中
然后,当计算a($t2)
时,这是a
的第二个字节(偏移量1,因为它基于偏移量0),即“0”、ASCII码0x30
或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
始终包含硬连线值0。MIPS建立了一套关于如何使用寄存器的约定。这些建议是指南,硬件不强制执行。然而,违反它们的程序将无法与其他软件正常工作
希望这些小片段足以解释它在做什么
而且,关于您的编辑,您错误地认为
.word 12,-5,4,0
的长度为4字节。事实上,它有16个字节的长度,因为MIPS中的字是32位(4个字节)宽
因此,当您从字节偏移量8加载时,您将得到单词
4
是,当您添加$0
和1
时,您将得到1
,它被放入$t2
然后,当计算a($t2)
时,这是a
的第二个字节(偏移量1,因为它基于偏移量0),即“0”、ASCII码0x30
或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
始终包含硬连线值0。MIPS建立了一套关于如何使用寄存器的约定。这些建议是指南,硬件不强制执行。然而,违反它们的程序将无法与其他软件正常工作
希望这些小片段足以解释它在做什么
而且,关于您的编辑,您错误地认为
.word 12,-5,4,0
的长度为4字节。事实上,它有16个字节的长度,因为MIPS中的字是32位(4个字节)宽
因此,当您从字节偏移量8加载时,您将得到单词
4
FYI讲义4第11页有一个ASCII图表;)
但我不明白:
当计算a($t2)时,这是a的第二个字节(偏移量1,因为它基于偏移量0),即“0”
“2021”的二进制表示形式我认为是:
00110010001100000011001000110001
那么,当你说“哪个是“0”时,你是指从右边开始的第二位吗?这就是你说的0吗?
我不知道零从哪里来。供参考,讲义4第11页有一个ASCII图表;) 但我不明白: 当计算a($t2)时,这是a的第二个字节(偏移量1,因为它基于偏移量0),即“0” “2021”的二进制表示形式我认为是: 00110010001100000011001000110001 那么,当你说“哪个是“0”时,你是指从右边开始的第二位吗?这就是你说的0吗?
我不知道零是从哪里来的。谢谢,但是你怎么知道它是0x30?这是常识还是有一个计算十六进制的公式?这几乎是常识,你只需要从某处(书籍、互联网等)得到一个ASCII表。数字
0..9
是ASCII码0x30..0x39
。哦,好吧,我想我们的教授会给我们一张ASCII表。如果你能再回答一个类似的问题,我在上面加了。谢谢,但你怎么知道是0x30?这是常识还是有一个计算十六进制的公式?这几乎是常识,你只需要从某处(书籍、互联网等)得到一个ASCII表。数字0..9
是ASCII码0x30..0x39
。哦,好吧,我想我们的教授会给我们一张ASCII表。如果你能再回答我上面补充的一个类似的问题。