2013-12-16 1 views
-2
int sign (int i) { 
if (i > 0) 
return 1; 
else if (i < 0) 
return -1; 
else 
return 0; 

MIPSC를 MIPS 어셈블리 코드로 변환하는 방법은 무엇입니까?

.data 
    i:  .word 
.text 
    sign: 
      bgtz i, IF 
      bltz i, ELSE 
      addi $a0, $zero, $zero 
      j END 
    IF: addi $a0, $zero, 1 
    ELSE: addi $a0, $zero, -1 
    END: jr $ra 

OR ...

.data 
    i:  .word 
.text 
    sign: 
      bgtz i, IF 
      bltz i, ELSE 
      addi $ra, $zero, $zero 
      j END 
    IF: addi $ra, $zero, 1 
    ELSE: addi $ra, $zero, -1 
    END: jr $ra 

내가 여기에 일어나서는 ... 이러한 상황에서 ELSEIF 작업을 수행하는 방법을 ... 나는 그것을 검색 할 시도했지만이 나를 검토하고 살펴보기위한 모범이 아니 었습니다. 또한이 구현은 정확합니까?

+7

"C를 MIPS 어셈블리 코드로 변환하는 방법은 무엇입니까?" 아마도 MIPS 컴파일러를 사용하고 있을까요? –

+0

'else if'는 첫 번째'if'의'else' 브랜치에서 발생하는 또 다른'if'입니다. – Barmar

+0

'else if'에 대한 C 코드의 논리적 인 이유는 없습니다. 하나의'if'도 마찬가지입니다. 두 번째 'else'도 쓸모가 없다. – usr2564301

답변

0

다른 방법이 있어야하지만 컴파일 한 다음 해체 할 수는 있습니다.

+2

어셈블리 모드에서 컴파일러를 사용하십시오 (gcc의 경우'-S'). – ldrumm

+0

디 컴파일 필요 없음 훨씬 편리 :-) – aalku

0

i이 0보다 크거나 0보다 작은 경우 분기로 작동하고 i = 0 인 경우 정상 실행시 계속 입니다.

.data 
    i:  .word 
.text 
    sign: 
      bgtz i, IF // if i greater than zero, go to IF 
      bltz i, ELSE // if i less than zero go to ELSE 
      addi $ra, $zero, $zero // If we didn't branch, i not > 0 and i not < 0, i.e. i = 0 
      j END 
    IF: addi $ra, $zero, 1 // If body 
      j END // Note, I think you need this to avoid also executing the else body 
    ELSE: addi $ra, $zero, -1 // else body 
    END: jr $ra 
3

어셈블리 정보를 보려면 -S 옵션을 사용하여 컴파일하십시오. 즉 gcc file.c -S file.s

+2

x86 AT & T 어셈블리가 될 것입니다. MIPS로 변환하려면 명령 행 옵션이 필요합니다. – gnometorule