[英]Strcmp using assembly mips
我有我的代碼的問題,我開發它當一個字符串等於它返回0,當它是不同的,它返回1.我測試我的代碼與此字符串首先bruno
和bruna
這個程序返回0,並將其與發生crazy
和craza
。 當嘗試使用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.