1

sprinf を mips で書こうとしています。まず、文字数を数えようとしています。

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でこれを見ました

しかし、ベクはどのように見えるでしょうか?

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 に答える