O código objeto é criado a partir da conversão do código-fonte em linguagem de máquina, sendo criado após passar por todas as etapas de compilação e não encontrar nenhum erro no código-fonte. Para cada arquivo de código fonte é gerado um arquivo com código objeto, que posteriormente será "ligado" aos outros, através de um linker, resultando em um arquivo executável ou biblioteca. Apresente o código objeto resultante do código de três endereços otimizado obtido na Questão 05, utilizando no máximo quatro registradores (R0 a R3).
Código de três endereços otimizado, representado por quádruplas| | oper | arg1 | arg2 | result |
|---|
| (0) | * | a | b | T1 |
| (1) | - | c | d | T2 |
| (2) | + | T1 | T2 | T3 |
| (3) | = | T3 | | x |
| (4) | / | e | T1 | T4 |
| (5) | + | T4 | T2 | T5 |
| (6) | = | T5 | | y |
| (7) | + | e | T2 | T6 |
| (8) | + | T1 | T6 | T7 |
| (9) | = | T7 | | z |
Código objeto resultante do código de três endereços otimizado obtido na Questão 5| Código objeto | Comentário | R0 | R1 | R2 | R3 |
|---|
| LOAD a, R0 | R0 = a | a | | | |
|---|
| LOAD b, R1 | R1 = b | a | b | | |
|---|
| MUL R1, R0 | R0 = R0 * R1 (a * b) | a * b | b | | |
|---|
| COPY R0, R1 | R1 = R0 (a * b) | a * b | a * b | | |
|---|
| LOAD c, R2 | R2 = c | a * b | a * b | c | |
|---|
| LOAD d, R3 | R3 = d | a * b | a * b | c | d |
|---|
| SUB R3, R2 | R2 = R2 - R3 (c - d) | a * b | a * b | c - d | d |
|---|
| ADD R2, R0 | R0 = R0 + R2 ((a * b) + (c - d)) | (a * b) + (c - d) | a * b | c - d | d |
|---|
| STORE R0, x | x = R0 ((a * b) + (c - d)) | (a * b) + (c - d) | a * b | c - d | d |
|---|
| LOAD e, R0 | R0 = e | e | a * b | c - d | d |
|---|
| COPY R0, R3 | R3 = R0 | e | a * b | c - d | e |
|---|
| DIV R1, R0 | R0 = R0 / R1 (e / (a * b)) | e / (a * b) | a * b | c - d | e |
|---|
| ADD R2, R0 | R0 = R0 + R2 ((e / (a * b)) + (c - d)) | (e / (a * b)) + (c - d) | a * b | c - d | e |
|---|
| STORE R0, y | y = R0 ((e / (a * b)) + (c - d)) | (e / (a * b)) + (c - d) | a * b | c - d | e |
|---|
| ADD R2, R3 | R3 = R3 + R2 (e + (c - d)) | (e / (a * b)) + (c - d) | a * b | c - d | e + (c - d) |
|---|
| ADD R3, R1 | R1 = R1 + R3 ((a * b) + (e + (c - d))) | (e / (a * b)) + (c - d) | (a * b) + (e + (c - d)) | c - d | e + (c - d) |
|---|
| STORE R1, z | z = R1 ((a * b) + (e + (c - d))) | (e / (a * b)) + (c - d) | (a * b) + (e + (c - d)) | c - d | e + (c - d) |
|---|