我一直在嘗試創建一個函式來將字串(作為引數傳遞給函式)存盤到堆中,并使其回傳保存它的記憶體地址。為此,我做了一個回圈,迭代字串的每個字符并將其放入分配的位元組中。但是,我收到訊息“無效的程式計數器值:0x00000000”
到目前為止,這是我所擁有的,關于可能出什么問題的任何想法?
main:
#Parameters for function
#a0 (string)
#a1 (string size)
la $a0, string
lw $a1, size
jal saveString
#Registers planification:
#s0: string copy
#s1: where space is saved
#s2: index pointer for the loop
saveString:
sw $fp, ($sp)
sw $ra, -4($sp)
sw $s0, -8($sp)
sw $s1, -12($sp)
sw $s2, -16($sp)
move $fp, $sp
addi $sp $sp -20
move $s0, $a0
#allocate memory
li $v0, 9
move $a0, $a1
syscall
bltz $v0, saveString_noMemory
#save pointer with $v0
move $s1, $v0
#initialize array pointer
add $s2, $zero, 0
jal saveString_Loop
saveString_Loop:
beq $s2, $a1, saveString_End
lbu $t0, ($s0) #take value of string
sb $t0, ($s1) #inserto that value into one bit of allocated memory
addi $s0, $s0, 1 #point to next char of the string
addi $s1, $s1, 1 #point to next byte of allocated memory
addi $s2, $s2, 1 #i
move $v0, $t0
b saveString_Loop
saveString_NoMemory:
#todo: error message
jr $ra
saveString_End:
lw $fp, ($sp)
lw $ra, -4($sp)
lw $s0, -8($sp)
lw $s1, -12($sp)
lw $s2, -16($sp)
move $sp, $fp
jr $ra
uj5u.com熱心網友回復:
這似乎是呼叫約定錯誤。您將 $ra 保存到堆疊中,但在完成一個函式后不會恢復它。請記住,jal 會覆寫 $ra。所以當你做
jal saveString
在通過從堆疊加載恢復 $ra 之前,您將無法再使用 jr $ra 回傳到原始函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/367121.html
上一篇:如何使用串列python反轉字串
