У меня есть задание в ассемблере, где я должен поменять местами содержимое 2 элементов в массиве строк, причем каждый элемент имеет длину 8 бит.Я тестирую с двумя элементами массива.Сначала я загружаю строковый массив в $ s2, используя: la $ s2, строка Я сохранил первый элемент в $ t5, используя lw $ t5, ($ s2), и сохранил второй элемент в $ t6, используя lw $ t6, 8 ($ s2) и swapиспользуя:
lw $ t5, ($ s2) lw $ t6, 8 ($ s2) sw $ t6, ($ s2) sw $ t5, 8 ($ s2)
Но яимел ошибку: исключение времени выполнения в 0x00400074: адрес вне диапазона 0x000a7574 в строке 53
Вот общий код:
.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
Я новичок в ассемблере, поэтому любая помощь будет оценена!!