【问题标题】:accessing first character of an string and comparing it with an char MIPS访问字符串的第一个字符并将其与 char MIPS 进行比较
【发布时间】:2013-11-02 14:16:07
【问题描述】:

我想将字符串的第一个字符与“#”字符进行比较。如果这些相等,我想在 mips 中打印“它们相等”。为此,我编写了一段代码如下。但是,即使它们相等,它也不会给我一个输出。有没有人可以帮助我? 提前致谢。

.data 
input:          .space 201
string2:    .asciiz "they're equal.\n"
finish:         .byte '#'
.text
main:
        la $a0,input
        li $a1,201          #read 200 char 
        li $v0,8            #read string
        syscall 

        jal evaluate

evaluate:
        lw $t1, 0($a0)
        lw $t2,finish
        beq $t1,$t2,testi

testi:
        la $a0,string2
        li $v0,4
        syscall

        li $v0, 10
        syscall

【问题讨论】:

    标签: mips system-calls string-comparison


    【解决方案1】:

    是的,您已将分支放置为无论是否采用分支,下一条指令都是相同的。

    考虑把它改成这样:

    evaluate:
    
            lw $t1, 0($a0)
            lw $t2,finish
            bne $t1,$t2,testi
    
            la $a0,string2
            li $v0,4
            syscall
    
    test1:
            li $v0, 10
            syscall
    

    【讨论】:

    • lw 加载一个完整的 4 字节字(需要对齐)。 lbu 是一个字节加载。但是对于单个字符常量,没有必要加载它,只需 lbu $t1, 0($a0) / li $t2, '#' / bne $t1, $t2, target。您可以使用 .equ 常量和 li
    猜你喜欢
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2021-11-20
    相关资源
    最近更新 更多