TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Lista de Exercício de Organização de Computadores

Por:   •  29/8/2016  •  Trabalho acadêmico  •  2.043 Palavras (9 Páginas)  •  393 Visualizações

Página 1 de 9

Questão 1 (1 ponto): Mostre como o assembly MIPS acessa os ı́ndices de um vetor. Apresente um código em assembly MIPS que instancie um vetor de 5 posições e percorra o mesmo preenchendo as posições com valores informados pelo usuário.

.data

vetor: .space 20

tam: .word 5

str: .asciiz "\nDigite um valor: "

str2: .asciiz "\nResultado: "

.text

main: la $t0, vetor

la $t1, tam

lw $t1, 0($t1)

loop: beq $t1, $zero, fim

li $v0, 4

la $a0, str

syscall

li $v0, 5

syscall

sw $v0, 0($t0)

addi $t0, $t0, 4

addi $t1, $t1, -1

j loop

fim: la $t0, vetor

la $t1, tam

lw $t1, 0($t1)

li $v0, 4

la $a0, str2

syscall

loop2: beq $t1, $zero, fim2

li $v0, 1

lw $a0, 0($t0)

syscall

addi $t0, $t0, 4

addi $t1, $t1, -1

j loop2

fim2: li $v0, 10

syscall

Questão 2 (1 ponto): Qual o registrador MIPS que armazena o endereço de retorno de chamadas empilhadas? Mostre um código em assembly MIPS que mostre chamadas recursivas a uma função qualquer.

O registrador responsável por essa tarefa é o $ra. O código a seguir mostra o seu uso na função de Fibonacci:

.data

str: .asciiz "Digite um numero:\n"

str2: .asciiz "\nResultado:\n"

.text

main: li $v0, 4

la $a0, str

syscall # imprime a string str

li $v0, 5

syscall # le um valor

add $a0, $v0, $zero # salva em a0

jal fib

add $t0, $v0, $zero # salva o resultado em t0

li $v0, 4

la $a0, str2 # imprime a string str2

syscall

li $v0, 1

add $a0, $t0, $zero

syscall # imprime o resultado

li $v0, 10

syscall # finaliza o programa

fib: addi $sp, $sp, -12 # cria a pilha

sw $ra, 0($sp) # salva endereco de retorno,

sw $s0, 4($sp) # o argumento da funcao pai e

sw $s1, 8($sp) # o resultado da funcao irma

add $s0, $a0, $zero

bne $s0, $zero, naoeh0 # se s0 != 0 entao naoeh0

li $v0, 0 # fib(0) = 0

j sair

naoeh0: addi $t1, $zero, 1

bne $s0, $t1, naoeh1 # se s0 != 1 entao naoeh1

li $v0, 1 # fib(1) = 1

j sair

naoeh1: addi $a0, $s0, -1

jal fib # v0 = fib(a0 = s0 - 1)

add $s1, $v0, $zero # s1 = fib(s0 - 1)

addi $a0, $s0, -2

jal fib # v0 = fib(a0 = s0 - 2)

add $v0, $s1, $v0 # v0 = fib(s0-1) + fib(s0-2)

sair: lw $ra, 0($sp) # recupera os dados da pilha

lw $s0, 4($sp)

lw $s1, 8($sp)

addi $sp, $sp, 12 # oblitera a pilha

j $ra # volta para a funcao pai

Questão 3 (1 ponto): Implemente o código do SelectionSort em assembly MIPS para um vetor de 20 posições e valores inteiros distintos informados pelo usuário.

.data

vetor: .space 80

string: .asciiz "\nDigite um valor: "

string2: .asciiz "\nResultado: "

string3: .asciiz " "

tam: .word 20

.text

main: la $s0, vetor # s0 = &vetor

la $s1, tam # s1 = &tam

lw $s1, 0($s1) # s1 = tam

scan: beq $s1, $zero, fimscan # if s1 == 0 -> fimscan

li $v0, 4

la $a0, string

syscall # imprime string

li $v0, 5

syscall # le um valor

sw

...

Baixar como (para membros premium)  txt (6 Kb)   pdf (64.3 Kb)   docx (12.4 Kb)  
Continuar por mais 8 páginas »
Disponível apenas no TrabalhosGratuitos.com