2013-04-19 3 views
0

mips에서 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

하지만 beq는 어떻게 생겼을까요?

답변

2

ASCII 테이블을 참조 할 필요가 없습니다. 사용 가치가있는 모든 어셈블러는 문자 바로 가기를 지원합니다.

lbu $s2,($s1) 
bne $s2,'%',not_percent_sign 
: 어셈블러는 immediate 만에 분기 pseduo 명령어를 지원하는 경우

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

을 또는 : 그래서 당신은 할 수있다

관련 문제