#assembly #mips
#сборка #mips
Вопрос:
ЭТО МОЙ код, это просто, но вывод печатается как случайный! предполагается напечатать 21
.data
age: .word 21
.globl main
main:
.text
li $v0, 1
la $a0, age
syscall
li $v0, 10
syscall
и это мой вывод
268500992
— программа завершена (удалена снизу) —
Комментарии:
1. Вы только когда-либо помещаете адрес
age
в регистр, и вы не разыменовываете этот адрес. Кроме того, вашаmain
метка находится.data
не там.text
, где находится тело функции!2. Это не случайное число! Когда вы видите такие цифры, используйте программный калькулятор, чтобы перевести их в шестнадцатеричное значение: 268500992 основание 10 равно 1001 0000 основанию 16 / шестнадцатеричное. Это адрес первого байта раздела .data. Вы печатаете адрес. Если вы хотите получить значение для печати, используйте
lw
вместоla
(или разыменуйте адрес послеla
).
Ответ №1:
Чтобы напечатать целое число, вы должны сделать системный вызов # 1 вместо системного вызова # 4. Во-вторых, ваш .text находится внутри функции main, что неправильно. Вот пересмотренный код:
.data
age: .word 21
.text
.globl main
main:
li $v0, 1
lw $a0, age
syscall
li $v0, 10
syscall