Arrays 使用mips在阵列中存储记录
我应该存储一个包含10条记录的数组,每条记录都有一个名称(40个字符)、年龄和薪水 我做了一个循环来存储用户输入,另一个循环来打印它,但是我的输出显示了一些不同的东西。我不确定我是否正确存储了这些记录?请给我一些建议 这是我的输出。对于测试,我只有3个记录Arrays 使用mips在阵列中存储记录,arrays,assembly,mips,record,Arrays,Assembly,Mips,Record,我应该存储一个包含10条记录的数组,每条记录都有一个名称(40个字符)、年龄和薪水 我做了一个循环来存储用户输入,另一个循环来打印它,但是我的输出显示了一些不同的东西。我不确定我是否正确存储了这些记录?请给我一些建议 这是我的输出。对于测试,我只有3个记录 There are 10 records. first employee 23 20 second employee 34 20 third employee 25 23 third employee 23 20
There are 10 records.
first employee
23
20
second employee
34
20
third employee
25
23
third employee
23
20
23
20
23
20
-- program is finished running --
我的代码是这样的:
loop:
bgt $t0, $a2, print #counter = size go to print
#store name
li $v0, 40
li $v0, 8
syscall
#reads and store the age
li $v0, 5
syscall
sb $v0, 40($a1)
#reads and stores the salary
li $v0, 5
syscall
sb $v0, 44($a1)
addi $t0, $t0, 1 #up counter
addiu $a1, $a1, 12 #shift to the next value? may be error here
b loop
print:
beqz $t0, end #counter = 0; end
li $v0, 4
la $a1, Records
syscall #print name
li $v0, 1
lb $t1, 40($a1)
move $a0, $t1
syscall #print age
la $a0, newline
li $v0, 4
syscall #newline
li $v0, 1
lb $t1, 44($a1)
move $a0, $t1
syscall #print salary
la $a0, newline
li $v0, 4
syscall
addi $t0, $t0, -1 #decrement
addiu $a1, $a1, 12
b print
警告:您可能想发布整个程序
在打印循环中,您正在执行la$a1,记录[在每次迭代中]。这将[在$a1
]中]将基指针重置为记录数组的开头。此语句应移到循环:
而且,循环底部的$a1
增量太小。你需要的东西至少是记录的总大小。我认为你的记录是这样的:
offset length element
------ ------ ------------------
0 40 employee name
40 4 age
44 4 salary
48 - TOTAL
因此,您应该使用addiu$a1,$a1,48
而且,当加载/存储age
和salary
时,我认为您希望分别使用lw
和sw
,而不是lb
和sb
而且,我相信您存储记录的循环还有一些问题
特别是,读取名称的系统调用是不正确的。您需要设置:
# assuming a0 points to the name field
li $v0,8 # syscall for gets (read string)
li $a1,40 # string length
syscall
因此,在读取循环的开始上方,您需要la$a0,Record
,而$a1
的其他用法需要是$a0