2012-03-26 5 views
4

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

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

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

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

+0

Он отлично работает для меня (используя MARS 4.1) – gusbro

+0

Я использую 4.2 и не работает. – gzg

+4

Работает для меня в 4.2 тоже ... – gusbro

ответ

2

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

так гласит:

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

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

Если вы просто пытаетесь напечатать строку, это проще (и немного меньше памяти), чтобы сделать это с помощью системного вызова 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 
+0

Спасибо. Его простой и полезный. –

0

попробовать это .. это работает для меня

 .data 
newLine .asciiz "\n" 

    .text 
    (your code) 

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

Я использую MIPS 4.5. – Chon

4

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

Все остальное хорошо в вашем коде, за исключением того, что «пробел» является зарезервированным словом в 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 
Смежные вопросы