2017-02-23 56 views
0

Я должен хранить массив из 10 записей с каждой записью, имеющей имя (40 символов), возраст и зарплату.Хранение записей в массиве с mips

Я сделал цикл для хранения пользовательского ввода и другого цикла, чтобы распечатать его, но мой вывод показывает что-то другое. Я не уверен, правильно ли я храню записи? совет пожалуйста.

это мой выход. для тестирования у меня было всего 3 записи.

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 

ответ

0

Оговорка: Вы можете размещать всю программу.

В вашем контуре печати вы делаете la $a1,Record [на каждой итерации]. Это сброс базового указателя [в $a1] в начало вашего массива записей. Это заявление следует переместить чуть выше loop:

И приращение $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 вместо

 Смежные вопросы

  • Нет связанных вопросов^_^