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

MIPSкак конвертировать C в код сборки 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 

ИЛИ ...

.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

В примере кода C для 'else if' нет логической причины, так же будет выполняться один' if'. Второй 'else' также бесполезен. – usr2564301

ответ

0

Я уверен, что должен быть другой способ, но вы можете скомпилировать его, а затем разобрать.

+2

Просто используйте компилятор в режиме сборки ('-S' для gcc). Не нужно декомпилировать – ldrumm

+0

Гораздо лучше :-) – aalku

0

Это работает путем ветвления, если i больше нуля или меньше нуля и продолжает с нормальным исполнением, если 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, чтобы просмотреть информацию о сборке. i.e gcc file.c -S file.s

+2

Это собирается быть x86 AT & T assembly. Вам нужна опция командной строки для преобразования в MIPS - по крайней мере, это работает с as. – gnometorule

Смежные вопросы