我在Assembly中有一个作业,其中我必须交换字符串数组中2个元素的内容,每个元素的长度为8位。 我用两个元素数组进行测试。 首先我使用以下命令将字符串数组加载到$ s2:la $ s2,string 我使用lw $ t5($ s2)将第一个元素存储在$ t5中 并使用lw $ t6,8($ s2)将第二个元素存储在$ t6中 并使用以下方法交换:
lw $ t5,($ s2) lw $ t6,8($ s2) sw $ t6,($ s2) sw $ t5,8($ s2)
但是我有一个错误:运行时异常位于0x00400074:第53行的地址超出了范围0x000a7574
这是总代码:
.data
.align 2
string: .space 1600
op: .asciiz "Enter number of student:"
prompt: .asciiz "Enter name of student:"
text: .asciiz "The list of student after sort is:"
newline: .asciiz "\n"
.text
.globl main
main:
# prompt user for array length
li $v0,51
la $a0,op
syscall
addi $s0,$a0,0 # $s0 contains the integer we read
add $t0,$zero,$zero # index of number array
addi $t1,$zero,1 # counter=1
add $t2, $zero,$zero #index of string aeeay
la $s2,string # load address of string storage area [NEW]
read_string:
bgt $t1,$s0, start_swap # if ($t1 > length) then array is done -- fly
#-------------------------------------------------
# prompt the user for next student name
li $v0,54
la $a0,prompt
la $a1, ($s2)
la $a2, 20
syscall
#----------------------------------------------------
addi $s2, $s2,8 #+1 string array
addi $t1,$t1,1 # advance iteration count
j read_string
start_swap:
#TEST WITH 2 STUDENTS
la $s2, string
lw $t5, ($s2)
lw $t6, 8($s2)
sw $t6, ($s2)
sw $t5, 8($s2)
#print first name
la $a0,($t5)
li $v0,4 #4 -> string
syscall
la $a0,($t6)
li $v0,4 #4 -> string
syscall
我是Assembly的新手,所以我们将不胜感激!