A Arquitetura de Computadores
Por: Jean Michel • 21/8/2020 • Trabalho acadêmico • 1.245 Palavras (5 Páginas) • 243 Visualizações
Aluno: Jean Michel Fernandes Carvalho
Matrícula: 20181101516
Engenharia da Computação
Arquitetura dos Computadores
Rio de Janeiro
Junho de 2020
Universidade Veiga de Almeida
Professor André Lucio de Oliveira
QUESTÃO 1 – Utilizando os conceitos sobre a linguagem de máquina da arquitetura
MIPS [Organização e Arquitetura (Patterson e Henessy) - Capítulo 2] vistos nas
aulas, implemente um programa com as seguintes características (3,0):
A) Implementar a versão do programa em C, que deve ter:
● Uma função/procedimento que será acionada pelo main;
● Manipular um vetor de números inteiros dentro desta função;
● Fazer algum cálculo matemático dentro desta função, utilizando este
vetor;
● Este programa deverá solicitar alguma informação do usuário;
● Este programa deverá imprimir algum resultado de saída;
B) Implementar a versão deste programa em Assembly MIPS, utilizando a
ferramenta MARS [http://courses.missouristate.edu/KenVollmar/MARS/]
<<OBS-1>>: O programa em C deverá ser colocado aqui neste arquivo .doc, com
as respostas das demais questões. Já o programa em Assembly MIPS, deverá ser
colocado aqui neste .doc e ser enviado por e-mail com o arquivo extensão .asm
(extensão utilizada pelo MARS).
<<OBS-2>>: Não é permitido entregar um programa já visto em sala de aula.
<<OBS-3>>: Não é permitido entregar um programa igual ao dos colegas de turma.
<<OBS-4>>: O aluno que fizer um programa recursivo correto poderá ganhar até
1,0 ponto extra nesta atividade.
A)
#include <stdio.h>
void somamult(int v[], int *soma, int *mult){
*soma=v[0]+v[1];
*mult=v[0]*v[1]
}
void print(int soma, int mult){
printf("valor multiplicacao: %d\n",mult);
printf("valor soma: %d\n",soma);
}
int main(){
int v[2], mult, soma;
scanf("%d", &v[0]);
scanf("%d", &v[1]);
somamult(v, &soma, &mult);
print(soma, mult);
return 0;
}
B)
.data
vet:.space 8 # Vetor de 2 "words
p:.asciiz "\n"
vm:.asciiz "valor multiplicacao: "
vs:.asciiz "valor soma: "
.text
main:
addi $t0,$zero,0
li $v0, 5
syscall
sw $v0,vet($t0)
addi $t0, $t0, 4
li $v0, 5
syscall
sw $v0,vet($t0)
addi $t0,$zero,0
lw $s0, vet($t0)
addi $t0, $t0, 4
lw $s1 ,vet($t0)
jal somamult
j print
somamult:
mul $s2,$s0,$s1
add $s3,$s0,$s1
jr $ra
print:
li $v0, 4 #print mult
la $a0, vm
syscall
li $v0, 1 #valor mult
move $a0, $s2
syscall
li $v0, 4 #print pulo
la $a0, p
syscall
li $v0, 4 #print soma
la $a0, vs
syscall
li $v0, 1 #valor soma
move $a0, $s3
syscall
li $v0, 4 #print pulo
la $a0, p
syscall
QUESTÃO 2 – A seguir pode ser verificado um programa escrito na linguagem
Assembly da arquitetura MIPS. Considerando que $a0, $a1, $a2 e $a3 são
registradores que contém os valores de quatro variáveis de um programa de alto
nível, escreva o respectivo código em alto nível. Utilize a linguagem C (1,5).
main:
jal ex1
ex1:
subi $sp,$sp,12
sw $t1, 8($sp)
sw $t0, 4($sp)
sw $s0, 0($sp)
add $t0, $a0, $a1
add $t1, $a2, $a3
sub $s0, $t0, $t1
...