Печать новой строки в MIPS - PullRequest
       15

Печать новой строки в MIPS

6 голосов
/ 26 марта 2012

Я использую симулятор MARS MIPS и хочу напечатать новую строку в моей программе.

.data
space: .asciiz "\n"
.text

    addi $v0, $zero, 4  # print_string syscall
    la $a0, space       # load address of the string
    syscall

Вместо печати новой строки печатается UUUU. Что я делаю не так?

Ответы [ 4 ]

12 голосов
/ 03 марта 2014

Если вы просто пытаетесь напечатать новую строку, проще (и немного более эффективно использовать память) сделать это с помощью syscall 11 для печати одного символа.

.text
main:   addi $a0, $0, 0xA #ascii code for LF, if you have any trouble try 0xD for CR.
        addi $v0, $0, 0xB #syscall 11 prints the lower 8 bits of $a0 as an ascii character.
        syscall
10 голосов
/ 14 мая 2016

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

Все остальное хорошо в вашем коде, за исключением того, что "пробел" - зарезервированное слово в Mips Я думаю, что он используется для создания массивов. Итак, если вы заменяете пробел каким-то другим словом, я использовал «новую строку». Это работает так, как должно.

.data
 newline: .asciiz "\n"
.text

li $v0, 4       # you can call it your way as well with addi 
la $a0, newline       # load address of the string
syscall
2 голосов
/ 20 сентября 2012

Инициализируйте новую строку после блока кода, который печатает значение.

, чтобы оно читало:

 addi $v0, $zero, 4  # print_string syscall
    la $a0, space       # load address of the string
    syscall

.data
space: .asciiz "\n"
.text
1 голос
/ 17 августа 2015

попробуй это .. у меня работает

     .data
newLine  .asciiz "\n"

     .text
     (your code)

     la     $a0, newLine
     addi   $v0, $0, 4
     syscall
...