簡體   English   中英

使用程序集 mips 的 strcmp

[英]Strcmp using assembly mips

我有我的代碼的問題,我開發它當一個字符串等於它返回0,當它是不同的,它返回1.我測試我的代碼與此字符串首先brunobruna這個程序返回0,並將其與發生crazycraza 當嘗試使用bruna測試第一個字符串和使用bruno第二個字符串時,我的程序返回 1。

.data
str1:               .space 32               # para reservar 32 caracteres para as strings
str2:               .space 32
msg1:               .asciiz "Insira a primeira string\n"
msg2:               .asciiz "Insira a segunda string\n"
.text

strcmp:
        li $v0,4
        la $a0,msg1
        syscall

        li $v0,8
        la $a0,str1
        addi $a1,$zero,32

        syscall

        li $v0,4
        la $a0,msg2
        syscall

        li $v0,8
        la $a0,str2
        addi $a1,$zero,32
        syscall   #got string 2

        la $a0,str1  #pass address of str1
        la $a1,str2  #pass address of str2
        jal strAux  #call strcmp

strAux:     add $t0,$zero,$zero
        add $t1,$zero,$a0
        add $t2,$zero,$a1

loop3:
        lb $t3,($t1)  #load a byte from each string
        lb $t4,($t2)
        beqz $t3,checkt2 #str1 end
        beqz $t4,missmatch
        slt $t5,$t3,$t4  #compare two bytes
        bnez $t5,missmatch
        addi $t1,$t1,1  #t1 points to the next byte of str1
        addi $t2,$t2,1
        j loop3

missmatch: 
        addi $v0,$zero,1
        j endfunction
checkt2:
        bnez $t4,missmatch
        add $v0,$zero,$zero

endfunction:    
        move $a0,$v0
        li  $v0,1                       # Opção para imprimir uma string
        syscall

slt是“設置小於”指令。 只有當第一個字符串中的字符小於第二個字符串中的相應字符時,您才會檢測到不匹配 - 但在您的兩個失敗示例中,第一個字符串中的不等字符更大 我想你想要一個subu指令 - 只有當兩個字符相等時,減法的結果才會為零。 或者,用bne $t3, $t4, missmatch替換那里的兩行 - 如果您以后不打算使用它,則無需在 $t5 中放置值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM