MIPS Ассемблерная строка сравнивает «метод» и движущиеся строки - PullRequest
0 голосов
/ 29 мая 2018

Передо мной стоит задача сравнить несколько строк друг с другом (в том числе из пользовательского ввода).Решение, о котором я думал, было бы создать метку, которая сравнивает две строки и в регистре $ 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 и ассемблера в целом, поэтому любые предложения по решению этой проблемы или пониманию некоторых принципов работы с помеченными строками будут приветствоваться.

...