1

我正在尝试在 mips 中编写 srinf。首先,我试图计算有多少个字符。

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 会是什么样子?

4

1 回答 1

3

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

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

或者,如果您的汇编器支持带有立即数的分支伪指令:

lbu $s2,($s1)
bne $s2,'%',not_percent_sign
于 2013-04-19T12:18:17.700 回答