MIPS检查是否等于某个字符

时间:2013-04-19 07:46:51

标签: ascii mips

我正在尝试用mips写sprinf。首先,我想计算有多少个字符。

sprintf:
    addi $sp, $sp, -12
    sw $ra, 8($sp)
    sw $s1, 4($sp)
    sw $s2, 0($sp)




        li      $s0, 0          # len = 1
        la      $s1, ($a1)        # s = str
test:
        lb      $s2, 0($s1)     # c = *s
        beqz    $s2, done       # if c == '\0', branch to "done"
        beq $s2, '5', done
        addi    $s0, $s0, 1     # len = len + 1
        addi    $s1, $s1, 1     # s = s + 1
        j       test

percent:




done:
        li      $v0, 1          # syscall code: print_int
        move    $a0, $s0
        syscall
        li      $v0, 11         # syscall code: print_char
        li      $a0, 10         # pass newline character
        syscall

        jr      $ra

但是当有%d或%c等时,需要检查格式是否

如何检查某个特定字符? 我看到这是为了mips ascii http://galia.fc.uaslp.mx/~luis/arquitectura_files/table.pdf

但是beq会是什么样子?

1 个答案:

答案 0 :(得分:3)

无需查阅ASCII表。任何值得使用的汇编程序都支持字符immediates。所以你可以这样做:

lbu $s2,($s1)
li $t0,'%'
bne $s2,$t0,not_percent_sign

或者如果你的汇编程序支持immediates分支pseduo指令:

lbu $s2,($s1)
bne $s2,'%',not_percent_sign