MIP 程序使用堆栈反转字符串

mol*_*r20 3 assembly mips

当我运行我的程序时出现错误。这是我收到的错误。

我收到异常错误。错误提示“数据/堆栈读取中的地址错误”

错误提示“指令引用未定义的符号”

在控制台中显示“要反转的字符串:

COSC 300 异常 7 [错误数据地址] 发生并被忽略

该程序

.data

str: .asciiz "String to be reversed : \n" 
msg: .asciiz "COSC 300" 
ans: .asciiz "The string reversed is : " 

.text
.globl main



main: 

la $a0, str            #print string
li $v0, 4 
syscall

la $a0, msg            #print string
li $v0, 4
syscall

la $t0, msg            #load a string to be reversed



loop:
lb $t0, 0 ($t0)       #load char from msg
beqz $t0, stringEnd   # if null end loop
addi $sp, $sp -1      # reduce stack pointer
sb $t0, 0 ($sp)       # store t0 into stack
addi $t1, $t1, 1      # gets next char
j loop


stringEnd:
la $t1, msg1


storeLoop:
lb $t0, 0($t0)
beqz $t0, end
lb $t4, 0($sp)
sb $t4, 0 ($t0)
addi $t1, $t1, 1
addi $sp, $sp, 1
j storeLoop


end:
la $a0, ans
li $v0, 4 
syscall

move $a0, $t4
li $v0, 4
syscall

li $v0, 10 
syscall
Run Code Online (Sandbox Code Playgroud)

Pet*_*vaz 5

有一件事看起来有点搞笑:

在循环和 storeLoop 中,您都使用 $t0 作为指针以及要加载的字符。这意味着第一次加载字节时将损坏指针。