.text
main: la $a0, A #loads address of A into $a0
li $t0, 1 #loads 1 into $t0
sw $t0, ($a0) #stores word from $a0 into $t0
li $t0, 2 #loads 2 into $t0
sw $t0, 4($a0)
li $t0, 3
sw $t0, 8($a0)
li $t0, 4
sw $t0, 12($a0)
la $a1, A
li $v0, 1
lw $a0, ($a1)
syscall
lw $a0, 4($a1)
syscall
lw $a0, 8($a1)
syscall
lw $a0, 12($a1)
syscall
la $a0, tab
li $v0, 4
syscall
li $v0, 10
syscall
.data
A: .space 16 #array size 16
tab: .asciiz "\t" #makes line indentation
#stores 1 - 4 into $t0
从我所看到的,它将A的地址加载到a0,然后它将'1'加载到$ t0,然后它覆盖?!? $ t0,通过将数组存入其中。然后将2加载到$ t0,然后我不确定4应该做什么(就我所见,没有做任何事情,然后将$ t0加载到3,然后与'4'相同,不会看到8做什么,然后将4加载到$ t0,然后用12加载,然后加载A的地址到$ a1,然后打印出来?!?我' m完全失去了程序的其余部分。程序是正确的,(加载“1234”),但我应该学习MIPS,通过了解课堂讲师给出的每个程序。这不是作业或任何东西,只是学习MIPS计划如何运作。
答案 0 :(得分:2)
程序首先从A的地址开始存储常量1,2,3,4,然后它只打印这四个单词的内容。
指令sw reg1, offset(reg2)
将寄存器reg1的内容存储到reg2指向的地址加上指定的可选偏移量。
因此,在您的第一个示例中,sw $t0, ($a0)
将$ t0的内容存储在$ a0指向的地址中,在您的情况下,该地址是标签A的地址。
然后使用4的倍数作为偏移,因为您正在存储单词,并且每个单词恰好占用4个字节,因此要将数字1,2,3,4存储在连续的单词中,您必须为每个先前的地址添加4。
答案 1 :(得分:1)
它似乎是一个展开的循环。第一个循环设置数组的内容,第二个循环打印出数组的内容,后跟一个选项卡。这就是我假设伪代码的样子:
function main()
{
i = 1
while( i <= 4 )
{
A[i-1] = i
i = i + 1
}
i = 1
while( i <= 4 )
{
printToConsole( A[i-1] )
i = i + 1
}
printToConsole( tab )
}
汇编代码时,汇编程序可能会将循环展开为性能改进。