PUCRS - INSTITUTO DE INFORMÁTICA
ARQUITETURA DE COMPUTADORES I - TURMA 138
Prof. Eduardo Augusto Bezerra 13/11/97 PROVA P3
NOME DO ALUNO : __________________________________________________________
1. Considerando o programa abaixo, preencha a tabela com informações a respeito do total de bytes ocupados no segmento de memória indicado, antes da execução da instrução localizada no label indicado (o valor a ser atribuído para cada resposta correta encontra-se dentro da respectiva célula da tabela). (5,0 pontos)
# $2 == dado retornado por subrotina
# $4 == passagem de parâmetros para subrotina
# $29 == ponteiro para o topo da pilha
# $30 == ponteiro para o início dos
# parâmetros/variáveis locais na pilha
# $31 == armazena endereço de retorno
.data
x: .byte 0
msg: .asciiz "\nValor="
y: .word 0, 1
.text
.globl __start
__start: addi $4, $0, 3
L1: jal aa
add $4, $0, $2
L2: addi $2, $0, 1
# $2 == 1, print_int de $4
syscall
addiu $2, $0, 10
# $2 == 10, exit
syscall
#####################################
aa: subu $29, $29, 12
sw $31, 4($29)
sw $30, 0($29)
addu $30, $29, 8
sw $4, 0($30)
addi $4, $0, 256
L3: jal malloc
L4: jal bb
lw $2, 0($30)
lw $31, 4($29)
lw $30, 0($29)
L5: addu $29, $29, 12
jr $31
#####################################
bb: subu $29, $29, 20
sw $2, 16($29)
sw $3, 12($29)
sw $31, 4($29)
sw $30, 0($29)
addu $30, $29, 8
sw $4, 0($30)
add $2, $2, $2
add $3, $3, $2
addi $4, $0, 128
L6: jal malloc
lw $30, 0($29)
lw $31, 4($29)
lw $3, 12($29)
lw $2, 16($29)
addu $29, $29, 20
L7: jr $31
#####################################
malloc: addi $2, $0, 9
add $4, $0, $4
# $2 == 9, syscall aloca $4 bytes
syscall
jr $31
Label |
Segmento de Código |
Segmento de Dados |
Dados globais (variáveis estáticas) |
Pilha |
Heap (variáveis dinâmicas) |
L1 |
(0,07) |
(0,1) |
(0,07) |
(0,1) |
(0,1) |
L2 |
(0,07) |
(0,2) |
(0,07) |
(0,2) |
(0,1) |
L3 |
(0,07) |
(0,1) |
(0,07) |
(0,3) |
(0,2) |
L4 |
(0,07) |
(0,1) |
(0,07) |
(0,2) |
(0,3) |
L5 |
(0,07) |
(0,1) |
(0,07) |
(0,3) |
(0,1) |
L6 |
(0,07) |
(0,1) |
(0,07) |
(0,2) |
(0,2) |
L7 |
(0,07) |
(0,2) |
(0,07) |
(0,4) |
(0,4) |
2. Para as sentenças abaixo coloque Verdadeiro ou Falso (cada duas respostas erradas anulam uma correta - na dúvida, deixar em branco). (0,35 pontos cada item)
( ) um assembler (ou montador) é utilizado na geração de um programa em linguagem de máquina a partir de um programa em assembly;
( ) o programa carregador é responsável pela carga em uma determinada posição da memória do programa em assembly a ser executado;
( ) o programa ligador é responsável pela união dos diversos arquivos objeto que compõem um programa executável, solucionando referências não resolvidas;
( ) no método de montagem "translate and go" não é gerado um arquivo objeto em disco, evitando assim a necessidade de montagem de um programa em assembly sempre que se desejar executá-lo;
( ) nos métodos de montagem "translate and go" e "montador relocador + carregador relocador" o endereço de carga do programa é fornecido ao montador;
( ) no método de montagem "montador absoluto + carregador absoluto" é utilizada uma coluna na tabela de símbolos para identificar se o label representa um endereço absoluto ou relocável;
( ) a informação sobre o tamanho do código de um programa não é essêncial para os montadores, sendo opcional sua inclusão no arquivo objeto gerado pelo método "montador relocador + carregador relocador";
( ) no método de montagem "montador relocador + carregador relocador" o endereço de carga do programa deverá ser a primeira informação a ser armazenada no arquivo objeto;
3. Utilizando apenas instruções pertencentes ao conjunto de instruções do MIPS, escreva um trecho de programa que realize a divisão inteira do conteúdo de $8 por $4 e coloque o resto da divisão em $2. No caso de divisão por zero, deverá ser carregado 0x0FFFF em $2. (2,2 pontos)
Atenção !!! A compreensão do enunciado faz parte da avaliação.
Vale dúvida: |
? |
? |
? |