CI212-Arquitetura, 2014-2                      © Roberto André Hexsel, 2014


Compile a o programa fat.c conforme descrito nos cinco passos abaixo,
estude o conteúdo dos arquivos fatorial.s e fatorial.x, e então responda às
perguntas que seguem.

main() { imprime(6, fact(6)); } int fact(int n) { if (n > 0) return (n * fact(n - 1)); else return (1); } int imprime(int w, int x) { return x; }
As páginas de manual de mips-gcc, mips-as, mips-ld e mips-objdump podem ser úteis. 1) Para usar o compilador e montador do MIPS ajuste seu ambiente: export MANPATH=$MANPATH:/home/soft/linux/mips/cross/man export PATH=$PATH:/home/soft/linux/mips/cross/bin export LANG=C 2) Para compilar fat.c e gerar fatorial.s diga: mips-gcc -O0 -S fat.c -o fatorial.s 3) Para montar fatorial.s diga: mips-as -O0 -EL -mips32 -o fatorial.o fatorial.s 4) Para produzir um executável (endereços a partir de 0x00400018), diga: Ignore aviso a respeito do símbolo "_start" mips-ld -EL -Ttext 0 -o fatorial fatorial.o 5) Para ler conteúdo do executável (gravado em fatorial.x) diga: mips-objdump -z -D -EL fatorial --section .text >fatorial.x --x-- Perguntas: a) Quais as diferenças entre fatorial.s e fatorial.x ? b) Qual a semântica de *todas* as instruções contidas em fatorial.x ? Por que algumas delas não aparecem na folha com o conjunto de instruções do MIPS? Pode ser necessário decodificar a versão hexadecimal. c) O que acontece quando, no passo 3 a chave -O0 é alterada para -O3 ? d) O que acontece quando, no passo 2 a chave -O0 é alterada para -O1 ? A razão para as mudanças será discutida nas aulas sobre segmentação. e) O que acontece quando, no passo 2 a chave -O0 é alterada para -O2 ? A razão para as mudanças será discutida nas aulas sobre segmentação. f) O que acontece quando, no passo 2 a chave -O0 é alterada para -O3 ? A razão para as mudanças será discutida nas aulas sobre segmentação. --x--