Está en la página 1de 14

PRODUCTO ACADÉMICO 02

Asignatura
ARQUITECTURA DEL
COMPUTADOR

Rogelio Alexander Barcena Checca


NRC: 26810

Arequipa - 2023

1|Página
Evaluación de desarrollo

Lenguaje ensamblador
1. Codifica en ensamblador la siguiente condición IF-THEN-ELSE:

if (x >= y) {

x = x+2;

y = y+2;

else {

x = x‐2;

y = y‐2;

Codigo

li $t1, 5 #variable x $t1

li $t2, 4 #variable y $t2

IF: #Función IF

bge $t1, $t2, THEN #etiqueta

ELSE: addi $t1,$t1,-2 #restamos al registro x

addi $t2,$t2,-2 #restamos al registro y

j END

THEN:

addi $t1,$t1,+2 #sumamos al registro x

addi $t2,$t2,+2 #sumamos al registro y

END:

2|Página
Ejecución cuando X > Y

3|Página
Ejecución cuando X < Y

4|Página
Ejecución cuando X = Y

5|Página
2. Codifica en ensamblador el siguiente bucle WHILE-DO:
n = 5;
fant = 1;
f = 1;
i = 2;
while (i <= n) {
faux = f;
f = f + fant;
fant = faux;
i = i+1;

Codigo
li $t0,5 # n=5;

li $t1,1 # fant=1;

li $t2,1 # f=1;

li $t3,2 # i=2;

while: bge $t3,$t0,end # $t3 es mayor o igual a $t0 y cumple cuando $t3 es menor o igual a $t0 es
verdadero (i <= n)

#Bucle

move $t4,$t2 # $t4 = faux;

add $t2,$t2,$t1 # f = f + fant;

move $t1, $t4 # fant = faux;

addi $t3,$t3,1 # i = i+1;

b while

end:

6|Página
7|Página
8|Página
3. El siguiente programa calcula el máximo común divisor de dos números a y b según el
algoritmo de restas de Euclides. Traducirlo a ensamblador:
int a=5, b=15, mcd;
While (a≠b){
if (a>b)
a=a‐b;

else

b=b‐a;

mcd=a;

Codigo
li $t0, 5 # a=5;

li $t1, 15 # b=15;

li $a0, 0 # Inicia mcd=0;

while1: beq $t0 $t1 fin1 # Si a ($t0) es igual a b ($t1), salta a fin1

if_1: blt $t0 $t1 else_1 # Si a ($t0) es menor que b ($t1), salta a then_1

then_1: sub $t0 $t0 $t1 #Resta a ($t0) de b ($t1) y almacena el resultado en $t1

b while1 # vuelve al bucle while1

else_1: sub $t1 $t1 $t0 #resta b ($t1) de a ($t0) y almacena el resultado en $t0

b while1 # vuelve al bucle while1

fin1:

move $a0 $t0 #mueve el resultado $t0 a $a0

9|Página
10 | P á g i n a
11 | P á g i n a
4. Traduce el siguiente programa escrito en un lenguaje de alto nivel a lenguaje ensamblador. La
órden swap(a, b) intercambia los valores de las variables a y b.

int a=13, b=16;


While (a>10){
a=a‐1;
b=b+2;

if (a<b)
swap (a, b);
else
b= a‐1;

Codigo

li $t0 13 #a=13
li $t1 16 #b=16
while1:
ble $t0 10 fin1 # si a ($t0) es menor o igual a 10, salta a fin1
sub $t0 $t0 1 # a=a-1
add $t1 $t1 2 # b=b+2
b while1 # vuelve al bucle while1
fin1:
if_1:
bgt $t0 $t1 else1 # Si a ($t0) es mayor que b ($t1), salta a else1
then1:
move $v0 $t0 #funcion swap (a, b)
move $t0 $t1 #funcion swap (a, b)
move $t1 $v0 #funcion swap (a, b)
b fin2
else1: sub $t1 $t0 1 # b=a-1
b fin2
fin2:

12 | P á g i n a
13 | P á g i n a
14 | P á g i n a

También podría gustarte