#mips
Вопрос:
эй, ребята, у меня есть практика, которую я не мог выполнить, и она в основном просит записать строку в другую, используя вызов процедуры, это мой код:
.data
S: .ascii "My Name is Suliman."
T: .asciiz ""
.text
main:
la $s0, S # Load address of first character
la $s1, T # Load the address of second string
jal loop
sw $v0, T
j done
function:
li $v0, 0 # this is T
loop:
lbu $t2, 0($s0) # Load the first byte of $s0 (str1) into $t2
sb $t2, 0($v0) # Save the value in $t2 at the same byte in $s1 (T)
addi $s0, $s0, 1 # Increment both memory locations by 1 byte
addi $v0, $v0, 1
bne $t2, $zero, loop # Check if at the zero delimiter character, if so jump to
jr $ra
done:
li $v0, 4
la $a0, T
syscall # Print the copied string to the console
li $v0, 10 # Program end syscall
syscall
но я продолжаю получать эту ошибку, у кого-нибудь есть представление об этом?
Ошибка в /Приложениях/Q3.asm строка 23: Исключение во время выполнения при 0x00400028: адрес вне диапазона 0x00000000
Go: выполнение завершено с ошибками.
Комментарии:
1.
sb $t2, 0($v0) # Save the value in $t2 at the same byte in $s1 (T)
<- Что ты вообще там делал не соответствует тому, что вы говорите, что вы делаете в комментарий (обратить пристальное внимание на то, какие регистры вы используете).2. не могли бы вы, пожалуйста, попытаться уточнить, где я этого не делал, потому что я действительно ненавижу этот курс, и мне нужно его закончить
Ответ №1:
.данные
S: .asciiz "My Name is Ahmed Edhi"
T: .asciiz ""
.текст
Главная:
la $s0, S
la $s1, T
move $a0, $s0 # $a0, $a1 used as argument of procedure loop
move $a1, $s1
jal loop
j print
петля:
# void method
# no return statement here, if required use $v0, $v1 to return values
lbu $s2, 0($a0)
sb $s2, 0($a1)
addi $a0, $a0, 1
addi $a1, $a1, 1
bne $s2, $zero, loop
jr $ra
Печать:
li $v0, 4
la $a0, T # Print string T to the console
syscall
li $v0, 10 # Program Ends
syscall
Комментарии:
1. Я немного изменил ваш код и добавил несколько важных комментариев. Я надеюсь, что это может вам помочь.