Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 程序集,Mips地址超出范围_Assembly_Mips_Runtimeexception - Fatal编程技术网

Assembly 程序集,Mips地址超出范围

Assembly 程序集,Mips地址超出范围,assembly,mips,runtimeexception,Assembly,Mips,Runtimeexception,我必须写一个代码来反转输入中的字符串。 我写了这篇文章,但我得到: 第38行:0x00400080处的运行时异常:地址超出范围0x00000000。 你能帮我吗? 多谢各位 .data prompt:.asciiz"String:: " str:.space 31 out:.asciiz"Reversed string: " .text .globl main main: la $a0, prompt li $v0, 4 syscall la $a0

我必须写一个代码来反转输入中的字符串。 我写了这篇文章,但我得到: 第38行:0x00400080处的运行时异常:地址超出范围0x00000000。 你能帮我吗? 多谢各位

.data
prompt:.asciiz"String:: "

str:.space 31

out:.asciiz"Reversed string: "

.text

.globl main

main: la $a0, prompt
      li $v0, 4
      syscall
      la $a0, str
      li $a1, 31
      li $v0,8
      syscall
      jal Reverse
      la $a0, str
      li $v0,4
      syscall
      li $v0,10
      syscall

Reverse: addiu $sp, $sp, -8
        sw $ra, 4($sp)
        sw $a0, 0($sp)
        move $t0, $a0   #$t0 = first pointer
        jal Strlen
        li $t6, 1       #counter=1
        subiu $t1, $v0, 2  # $t1 = strlen - 2
        addu $t2, $a0, $t1  # $t2= last pointer
        div $t3, $v0, 2  # $t3 = strlen/2



Loop:   bgt $t6, $t3, Return # if t6 < t3 continue, else return
        lb $t4, 0($t0) # swap
        lb $t5, 0($t2)
        sb $t5, 0($t0)
        sb $t4, 0($t2)
        addiu $t6, $t6, 1 # counter++
        subiu $t2, $t2, 1 # last pointer-1
        addiu $t0, $t0, 1 #first pointer+1
        j Loop



 Return: lw $a0, 0($sp) 
         lw $ra, 4($sp) 
         addiu $sp, $sp, 8 
         jr $ra  

#Strlen gives me the lenght of the string

Strlen: li $v0, 0
Loop2:  lb $t0, 0($a0)
        beq $t0, $0, Ret     
        addiu $a0, $a0, 1
        addiu $v0, $v0, 1
        j Loop2
 Ret: jr $ra
.data
提示:.asciiz“字符串::”
str:.空格31
输出:.asciiz“反向字符串:”
.文本
格洛博梅因酒店
主:la$a0,提示
李$v0,4
系统调用
洛杉矶$a0街
李:1美元,31美元
李$v0,8
系统调用
日航倒转
洛杉矶$a0街
李$v0,4
系统调用
李$v0,10
系统调用
反向:加上$sp,$sp,-8
西南$ra,4($sp)
sw$a0,0($sp)
移动$t0,$a0#$t0=第一个指针
日航斯特伦
李$t6,1#计数器=1
subiu$t1,$v0,2#$t1=strlen-2
addu$t2,$a0,$t1#$t2=最后一个指针
分区$t3、$v0、2#$t3=strlen/2
循环:bgt$t6,$t3,返回#如果t6

例外情况是在函数Reverse中,在循环中,我写入:lb$t4,0($t0)

Your
Strlen()
function clobbers
t0
,因此在
Reverse()
中调用
Strlen()
后,它不再包含字符串开头的地址。我明白了!非常感谢。