Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

(Ricarte, 2008) Dado o comando de atribuição x = (a + b) - (a - (c - d) * (e - f) + g) / h, apresente o código objeto gerado, considerando as otimizações disponíveis e a disponibilidade de no máximo três registradores.

 

LOAD   c, R0 // R0 = c
LOAD d, R1 // R1 = d
SUB R1, R0 // R0 = R0 - R1 (c - d)
LOAD e, R1 // R1 = e
LOAD f, R2 // R2 = f
SUB R2, R1 // R1 = R1 - R2 (e - f)
MUL R1, R0 // R0 = R0 * R1 (c - d) * (e - f)
LOAD g, R1 // R1 = g
ADD R1, R0 // R0 = R0 + R1 (c - d) * (e - f) + g
LOAD a, R1 // R1 = a
COPY R1, R2 // R2 = R1
SUB R0, R1 // R1 = R1 - R0 (a - (c - d) * (e - f) + g)
LOAD h, R0 // R0 = h
DIV R0, R1 // R1 = R1 / R0 (a - (c - d) * (e - f) + g) / h
LOAD b, R0 // R0 = b
ADD R0, R2 // R2 = R2 + R0 (a + b)
SUB R1, R2 // R2 = R2 - R1 (a + b) - (a - (c - d) * (e - f) + g) / h
STORE R2, x // x = R2

Ricarte, Ivan. (2008). Introdução à Compilação. Rio de Janeiro: Elsevier. 264 páginas.