Я не могу понять, что я делаю неправильно в своем ассемблере. Я пытаюсь написать программу, которая сравнивает два нуля строки, которые вводятся в $ a0 и a1 $ где-то во время «главного:» раздела, а затем вызываетПростая сборка MIPS
jal hamming
, чтобы запустить программу.
В основном для этого раздела Я хочу, чтобы две строки были сопоставлены символом char, пока одна строка не обрушилась на нуль-завершающий символ. Затем программа останавливается и возвращает количество символов различно до завершения.
Я думаю, что это связано с прыжками, которые я использую, но я не совсем уверен. Программа является своего рода долго, так что я взял главный кусок, который я думаю, что это проблема (а значит игнорировать переменные, такие как $ a3, который был инициализирован и определен уже):
diffchar:
li $t4, 0
li $t5, 1
beq $a0, $a1, samechars
move $v0, $t5
j diffcharend
samechars:
move $v0, $t4
diffcharend:
jr $ra
hamming:
absvaluedone:
li $a2, 0
#li $v0, 0
move $t0, $a0
move $t1, $a1
hammingloopbegin:
lb $t2, 0($t0)
lb $t3, 0($t1)
beq $t2, $0, hammingdone
beq $t3, $0, hammingdone
la $a0, 0($t0)
la $a1, 0($t1)
jal diffchar **#this is the line that causes me problems, if I take this out it is fine**
beq $v0, $0, next
addiu $a2, $a2, 1
next:
addiu $t0, $t0, 1
addiu $t1, $t1, 1
j hammingloopbegin
hammingdone:
add $v0, $a2, $a3
jr $ra
Когда я бегу моя программа моих выходных выглядит как бесконечный цикл, который твердит:
Exception occurred at PC=0x00400144
Bad address in data/stack read: 0x10021226
Exception 7 [Bad address in data/stack read] occurred and ignored
Exception occurred at PC=0x00400140
Bad address in data/stack read: 0x1002121b
Exception 7 [Bad address in data/stack read] occurred and ignored
Я думаю, что есть что-то не так с diffchar или процесса я использую, чтобы прыгать вокруг diffchar. Это мой первый раз, когда я писал код ассемблера, поэтому я считаю, что что-то действительно базовое, я не хватает, что делает этот беспорядок. Любые указатели были бы замечательными.
Спасибо за помощь