Почему мой вывод в mips случайных чисел в MIPS?

#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