Если у вас есть компилятор MIPS C, вы всегда можете скомпилировать его с отключенными оптимизациями:
int main()
{
int one, three, five;
int result;
one = 1;
three = 3;
five = 5;
result = (((five + one) - (one + three) + (five - three)) - one) -
five + three;
return result;
}
, затем запустить objdump для результирующего объектного кода.Это не так, как ваш профессор хочет, чтобы вы это делали, но вы уже сделали это, и вы узнаете больше.
Редактировать :
Я обычно запускаюC препроцессором на моих языках ассемблера перед передачей их ассемблеру.Это может значительно облегчить чтение, когда для определенных вещей используются конкретные регистры:
#define FIVE $t0
#define ONE $t1
#define THREE $t2
#define FIVE_PLUS_ONE $t3
#define ONE_PLUS_THREE $t4
#define FIVE_MINUS_THREE $t5
#define ACCUM $t6
main:
li FIVE 5
li ONE 1
li THREE 3
// (((5 + 1) - (1 + 3) + (5 - 3)) - 1) – 5 + 3
// becomes ((($t0 + $t1) - ($t1 + $t2) + ($t0 - $t2)) - $t1) - $t0 + $t2
// ((( $t3 ) - ( $t4 ) + ( $t5 )) - $t1) - $t0 + $t2
add FIVE_PLUS_ONE, FIVE, ONE
add ONE_PLUS_THREE, ONE, THREE
sub FIVE_MINUS_THREE, FIVE, THREE
sub ACCUM, FIVE_PLUS_ONE, ONE_PLUS_THREE
add ACCUM, ACCUM, FIVE_MINUS_THREE
sub ACCUM, ACCUM, ONE
sub ACCUM, ACCUM, FIVE
add $a0, ACCUM, THREE
li $v0, 1 // print $a0
syscall
li $v0, 10 // system call 10... lets us exit, load 10 in $v0
syscall // call the exit.