[英]Assembly MIPS printing integers and strings
我正在嘗試打印整數 1-10 並在行之間插入一個空行(實際上是一個表示某些內容的字符串),但我的代碼無法正常工作。 我在正確的軌道上嗎?
.text
.align 2
main:
lw $s0, 1
j loop
Exit:
li $v0, 10
syscall
jr $ra
loop:
beq $v0, 11, Exit
li $v0, 1 #call for printing integer is 1
syscall
addi $a0, $a0, 1 #increment by 1
move $s0,$a0
li $v0, 4
la $a0, out_string
syscall
move $a0,$s0
j loop
.data
out_string: .asciiz "\n new line\n"
它可能與這條線有關
move $a0,$s0
它用未知值填充 $a0
請注意,當您向其他人描述問題時,僅僅說“工作不正常”並沒有特別的幫助。 這幾乎意味着任何事情。
您的代碼存在多個問題。 但是如果我們從無限循環開始,就不難看出為什么會發生這種情況:
退出循環的條件是$v0 == 11
,但是執行該檢查時$v0
的值將始終為 4 或程序啟動時的任何值:
loop:
beq $v0, 11, Exit <-- On the first iteration $v0 will have some "random" value.
On subsequent iterations it will have the value 4 because
of the li $v0,4 below.
...
li $v0, 4
...
j loop
有不止一種方法可以解決這個問題。 您可以為循環計數器使用不同的寄存器,或者您可以將$v0
的值保存在堆棧中並稍后恢復。
但這並不是您的代碼的唯一問題。 例如,您還在循環中將$a0
用於不止一件事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.