Не беспокойтесь об определении вашей памяти при запуске вашей программы, как я показал в исходном вопросе.
Вместо этого выделите ее и считайте значения в правильные смещения вашей динамической памяти.
Вместо la $a0, descriptionbuffer
Вместо la $a0, titlebuffer
Использование:
la $a0, 8($s0)
la $a0, 72($s0)
Здесь я перемещаю адрес памяти в $s0
, используя move $s0, $v0
и считываю значения в правильные смещения.
, чтобы напечатать, вы делаете то же самое!
Вот рабочий код:
li $v0, 9 #allocate memory for new record
li $a0, 344 #enough memory for 2 addresses and all the data
syscall
move $s0, $v0 #hang onto the initial address of all our info
li $v0, 8 #read our title into the allocated space
la $a0, 8($s0) #Offset: 8
li $a1, 64
syscall
li $v0, 8 #read our description into the allocated space
la $a0, 72($s0) #Offset: 72
li $a1, 256
syscall
Кроме того, вы можете найти окончательное решение здесь: https://stackoverflow.com/a/9953839/1274820
Редактировать: Ну, после 10k просмотров, я решил добавить больше информации здесь, чтобы вы не забылиНе нужно искать в более позднем коде ?
Вот полный код для хранения 4 различных фрагментов данных в памяти:
li $v0, 9 #allocate memory for new record
li $a0, 344 #[334 = how much memory - in bytes]
syscall
move $s0, $v0 #store the address of our allocated memory in $s0
li $v0, 5 #enter integer
syscall
sw $v0, 0($s0) #store our ID into memory Offset: 0
li $v0, 5 #enter integer
syscall
sw $v0, 4($s0) #store year into our memory Offset: 4
li $v0, 8 #read our title into the allocated space
la $a0, 8($s0) #Offset: 8
li $a1, 64
syscall
li $v0, 8 #read our description into the allocated space
la $a0, 72($s0) #Offset: 72
li $a1, 256
syscall
Это будет хранить идентификатор, год, название,и Description - смещение - это место, где мы помещаем данные в динамическую память.
Представьте, что у меня есть блок из 334 байтов(как указано выше):
[ 334 ]
Мы храним ID
целое число (4 байта данных) со смещением 0, например:
[(ID) 330 ]
Затем мы сохраняем год рядом с ним (со смещением 4).
[(ID)(YR) 326 ]
И так далее ...
Чтобы напечатать его, сделай так:
li $v0, 1 #Print the ID stored at $s0 [Offset: 0]
lw $a0, 0($s0)
syscall
li $v0, 1 #Print the Year stored at $s0 [Offset: 4]
lw $a0, 4($s0)
syscall
li $v0, 4 #Print the Title stored at $s0 [Offset: 8]
la $a0, 8($s0)
syscall
li $v0, 4 #Print descript stored at $s0 [Offset: 72]
la $a0, 72($s0)
syscall