Conversão De C Para Assembly
Monografias: Conversão De C Para Assembly. Pesquise 862.000+ trabalhos acadêmicosPor: alexandreschmitz • 6/4/2014 • 758 Palavras (4 Páginas) • 408 Visualizações
Conversão C para Assembly [MIPS]
Registradores:
Nome N° Uso Preservado
na chamada?
$zero 0 Valor da constante 0 NA
$at 1 Assembler Temporário Não
$v0 – $v1 2 – 3 Valores para guardar resultados e avaliar expressões Não
$a0 – $a3 4 – 7 Argumentos Não
$t0 – $t7 8 – 15 Temporários Não
$s0 – $s7 16 – 23 Temporários Salvos Sim
$t8 – $t9 24 – 25 Temporários Não
$k0 – $k1 26 – 27 Reservados para o Sistema Operacional Não
$gp 28 Global Pointer Sim
$sp 29 Stack Pointer Sim
$fp 30 Frame Pointer Sim
$ra 31 Return Address Sim
Exemplos:
C: a = b + c;
ASM: add $s0, $s1, $s2
C: a = b + c + d;
e = f – a
ASM: add $t0, $t1, $t2
add $t0, $t0, $t3
sub $t4, $t5, $t0
C: f = (g + h) – (i + j);
$t0 $t1
ASM: add $t0, $s0, $s1
add $t1, $s3, $s4
sub $s0, $t0, $t1
1
C: g = h + a[i];
Carrega no $t0
2
d e
add $s0, $s1, $t0 # que neste exemplo está contido no $t2.
C: a[i] = h + a[i]
:
sw $s0, astart($t2)
: L1;
L1: f = f – i;
:
L1: sub $s0, $s0, $t0
:
g + h;
f = g – h;
:
$s2
$s0, $s1, $s2 # f = g + h
Endif:
ASM: lw $t0, astart($t2) # astart é o endereço inicial do seu vetor o valor entre () é o
in ic
ASM lw $t0, astart($t2)
add $s0, $s1, $t0
C if (i == j) goto
f = g + h;
ASM beq $t0, $t1, L1
add $s0, $s1, $s2
C if (i == j)
f =
else
ASM beq $t0, $t1, Soma
sub $s0, $s1, j Endif
Soma: add
Posição onde começa o vetor:
Multiplicar i por 4.
C: while (save[i] == k) {
i = i + j; Assumindo que: # $t0 = deslocamento
}
...