2011-04-22 2 views
0

저는 Comp Sci 클래스에 대한 간단한 질문을하고 있습니다. 필자의 임무는 함수를 MIPS 어셈블리 언어로 변환하는 것입니다. 나는 정확한 답을 가지고 있다고 믿지만 그것을 검증하고 싶다.이 CIPS 프로그램의 MIPS 어셈블리 변환 방법은 무엇입니까?

이 C 함수

int strlen(char *s) { 
    int len; 

    len=0; 
    while(*s != '\0') { 
      len++; 
      s++; 
    } 
    return len; 
} 

감사에게있다!

strlen: 
    add $v0, $zero, $zero  
loop: 
    lbu $t0, 0($a0)    
    addi $a0, $a0, 1    
    addi $v0, $v0, 1    
    bne $t0, $zero, loop   
s_end: 
    addi $v0, $v0, -1   
    j $ra 
+3

http://codereview.stackexchange.com/에서 이것을 시도하고 어셈블러 버전을 포함 할 수 있습니다. 그리고 "숙제"꼬리표를 포함해서 아마 다치게하지 않을 것이다. –

+0

정답은 어디입니까? – Potatoswatter

+0

편집 : 내가 생각해 낸 내용이 포함되어 있습니다. –

답변

1

그래, 당신은 올바른 ASM 버전이, 그리고 당신이 메모리에서 로딩 가능한 한 많은 시간을 제공하기 위해 T0의 값을 테스트하기 전에 가능한 한 많은 일을한다는 사실을 좋아한다.

2

나는 while 루프는 = 0 그것은이 같은해야 S의 경우 옳지 않다 생각 :

... 
    lbu $t0, 0($a0) 

loop: 
    beq $t0, $zero, s_end # * 
    ... 
    b loop 

s_end: 
    ... 

매크로 명령을 사용할 수 있습니다 * (beqz의 $ t0의, s_end) beq 명령 대신.

관련 문제