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表。如果你能再回答我上面补充的一个类似的问题。