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:

?

?

?