Передо мной стоит задача сравнить несколько строк друг с другом (в том числе из пользовательского ввода).Решение, о котором я думал, было бы создать метку, которая сравнивает две строки и в регистре $ s0 устанавливает 1, если строки равны, и 0, если они не совпадают.Затем программа переходит к метке, адрес которой хранится в регистре $ a2.
У меня проблема в том, как «подготовить» строки, которые я хотел бы сравнить.Я подумал о двух возможностях (ни одну из которых я не смог реализовать):
настройка, помеченная в сегменте .data двумя строками рассматриваемых строк, прежде чем перейти к «сравнению»:'label (проблема заключается в установке помеченной строки в другую помеченную строку)
.data
string1: .asciiz
string2: .asciiz
...
setting string1 to another labeled string (move label, label doesn't exist)
...
# a2 - finish label, $s0 - (1 - equal, 0 - not equal)
compare:
la $s0, 0
c_for:
lb $s6, string1($s0)
lb $s7, string2($s0)
bne $s6, $s7, notequal
beq $s7, '\n', equal
addi $s0, $s0, 1
j c_for
equal:
la $s0, 1
j finish
notequal:
la $s0, 0
finish:
jr $a2
хранение соответствующих строковых меток в адресах $ a0 и $ a1 и получение отдельных символов через эти адреса
...
# a0 - string 1, a1 - string 2, a2 - label finish, $s0 - (1 - equal, 0 - not equal)
compare:
la $s0, 0
c_for:
lb $s6, ($a0)($s0) # such lines don't work but they resemble
lb $s7, ($a1)($s0) # what I've been trying to achieve
bne $s6, $s7, notequal
beq $s7, '\n', equal
addi $s0, $s0, 1
j c_for
equal:
la $s0, 1
j finish
notequal:
la $s0, 0
finish:
jr $a2
Основная проблема определенно заключается в моем понимании MIPS и ассемблера в целом, поэтому любые предложения по решению этой проблемы или пониманию некоторых принципов работы с помеченными строками будут приветствоваться.