MIPS汇编程序字符串比较'方法'和移动字符串

时间:2018-05-28 23:40:50

标签: string assembly compare mips move

我面临着将多个字符串相互比较的任务(包括来自用户输入的字符串)。解决方案我一直在考虑创建一个比较两个字符串的标签,如果字符串相等则在$ 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和汇编程序的理解,因此欢迎任何有关解决此问题或理解使用标记字符串的原则的建议。

0 个答案:

没有答案