我正在尝试用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会是什么样子?
答案 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