PUCRS - INSTITUTO DE INFORMÁTICA

ARQUITETURA DE COMPUTADORES I - TURMA 138

Prof. Eduardo Augusto Bezerra 17/11/97 PROVA P4

 

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). (4,0 pontos)

 

.data

x: .byte 0

y: .word 0, 1

.text

.globl __start

__start: addi $4, $0, 3

jal aa

add $4, $0, $2

L1: addi $2, $0, 1

syscall

addiu $v0, $0, 10

syscall

#####################################

aa: subiu $29, $29, 12

L2: sw $31, 4($29)

sw $30, 0($29)

addiu $30, $29, 8

sw $4, 0($30)

addi $4, $0, 256

jal malloc

addi $2, $0, 1

addi $3, $0, 2

L3: jal bb

L4: lw $2, 0($30)

lw $31, 4($29)

lw $30, 0($29)

L5: addiu $29, $29, 12

L6: jr $31

#####################################

bb: subu $29, $29, 20

sw $2, 16($29)

sw $3, 12($29)

sw $31, 4($29)

sw $30, 0($29)

addiu $30, $29, 8

sw $4, 0($30)

add $2, $0, $2

subu $3, $3, $2

beq $3, $0, L7

# ATENÇÃO !! Chamada recursiva a bb

jal bb

L7: addi $4, $0, 100

jal malloc

lw $30, 0($29)

lw $31, 4($29)

lw $3, 12($29)

lw $2, 16($29)

addiu $29, $29, 20

jr $31

#####################################

malloc: addi $2, $0, 9

add $4, $0, $4

syscall

jr $31

 

 

 

 

Label

Pilha

Heap

(variáveis dinâmicas)

L1

(0,1)

(0,1)

L2

(0,2)

(0,2)

L3

(0,3)

(0,3)

L4

(0,4)

(0,3)

L5

(0,4)

(0,4)

L6

(0,4)

(0,4)

L7

(0,2)

(0,3)

 

 

 

 

 

 

 

 

 

2. Para o programa em C abaixo, forneça o código equivalente em assembly para o MIPS, sem utilização de registradores para representar as variáveis (deverão ser definidas posições de memória para armazenamento das variáveis). (3,0 pontos)

 

 

 

struct MYSTRUCT {

int i, j;

int x[20];

} st1, st2, *ptr;

 

void main()

{

st1.i = 5;

st1.x[0] = st1.i;

}

 

 

 

 

 

 

 

 

3. Escreva um programa em assembly para o MIPS que calcule o somatório dos primeiros 20 valores inteiros positivos de 32 bits existentes a partir da posição IniNumeros da memória. O resultado deverá ser armazenado no registrador $2. O programa deverá estar inteiramente comentado de forma a facilitar sua compreensão. (3,0 pontos)

 

 

 

 

 

 

 

 

 

 

 

Atenção !!! A compreensão do enunciado faz parte da avaliação.

 

 

Vale dúvida:

?

?

?