Да, когда вы добавляете $0
и 1
, вы получаете 1
, которое помещается в $t2
.
Затем, когда вы оцениваете a($t2)
, это второй байт (смещение 1, поскольку он основан на смещении 0), равный a
, то есть "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 бита (четыре байта).
Таким образом, когда вы загружаете из байт смещение 8, вы получите слово 4
.