La nueva Programación en ensamblador mips
Enviado por natyla02 . • 3 de Julio de 2017 • Informe • 2.752 Palabras (12 Páginas) • 192 Visitas
Programación en ensamblador MIPS
Práctica #3
Asunto | Programación en ensamblador MIPS - Práctica #3 |
Fecha | 21 de Octubre del 2016 |
Programación en ensamblador MIPS
- En el centro de un jardín cuadrado de A metros de lado hay una piscina también cuadrada, de B metros de largo. Calcule el área exclusiva de solo jardín. Si el área del jardín es mayor a los 5000m2, se almacena el área calculada en R[10], si es menor o igual a 5000m2, el área calculada se almacena en R[23]. A y B son adquiridos de memoria externa, R es un vector también externo.
Implementación en Lenguaje de Alto Nivel JAVA
public static void calcularAreaExclusivaDeJardin(int A, int B, int R[]){
//Calcular area jardin
int areaJardin = 0;
areaJardin = areaJardin + A;
}
//Calcular area piscina
int areaPiscina = 0;
for(int i=0;i
areaPiscina = areaPiscina + B;
}
//areaExclusivaJardin = areaJardin - areaPiscina
int areaExclusivaJardin = areaJardin - areaPiscina;
//si el area exclusivaJardin es mayor a 5000 m2
//almacenar el valor en R[10]
if(areaExclusivaJardin>5000){
R[10] = areaExclusivaJardin;
}
//si el area exclusivaJardin es menor o igual
//a 5000 m2 almacenar el valor en R[23]
else{
R[23] = areaExclusivaJardin;
}
}
Implementación en Lenguaje de Bajo Nivel
addi $s0, $zero, 0 #A
addi $s1, $zero, 0 #B
addi $s2, $zero, 0 #areaJardin
addi $t3, $zero, 0 #i
Loop: beq $t3, $s0, END
add $s2, $s2, $s0 #areaJar=areaJardin+A
addi $t3, $t3, 1 #aumentando i
addi $s3, $zero, 0 #areaPiscina
Loop beq $t3, $s1, END
add $s3, $s3, $s1 #areaPis=areaPis+B
addi $t3, $t3, 1 #aumento el i
addi $s4, $zero, 0 #areaExclusivaJardin
sub $s4, $s2, $s3 # areaEx=areaJardin-areaPiscina
addi $s5, $zero, 5000
bgt $s4, $s5, E #f-Then-Else
E sw $s4, 40($s6) #en $s6 referencia R[]
ble $4, $$s5, L
L sw, $s4, 92($s6) #en $s6 referencia R
Código máquina
Instrucción Tipo R: sub $s4, $s2, $s3 # areaEx=areaJardin-areaPiscina
Formato R:
Opcode (6 bits) | Rs (5 bits) | Rt (5 bits) | Rd (5 bits) | shamt (5 bits) | funct (6 bits) | |
ten | 0 | 18 | 19 | 20 | 0 | 32 |
bin | 000000 | 10010 | 10011 | 10100 | 00000 | 100000 |
Código máquina:
Decimal: 39034912
Binario: 00000010010100111010000000100000
Hexa: 0253A020
Instrucción Tipo I: sw $s4, 40($s6) # en $s6 referencia R[]
Formato I:
Opcode (6 bits) | Rs (5 bits) | Rt (5 bits) | Cte o Add (16 bits) | |
ten | 35 | 22 | 20 | 40 |
bin | 100011 | 10110 | 10100 | 0000000000101000 |
Código máquina:
Decimal: 2379087872
Binario: 10001110110101000000000000101000
Hexa: 23D40028
Diagrama de Flujo
[pic 1]
2. Cierto módulo de software empieza a llenar un vector de 50 posiciones con el resultado de un conteo decimal empezando por un valor de 20 (V[0]=20...V[1]=21... V[3]=23), para el momento en que el contador toma un valor de ‘y’, se ejecuta la función F1 y por último el resultado de Y se almacena en la posición 4 del vector T. Los valores de B, C e ‘y’ son variables y deben ser adquiridos de memoria externa.
(F1) : Y = -B + V[y] – C + 10
Implementación en Lenguaje de Alto Nivel JAVA
public static void moduloSoftware(int y,int B, int C){
int V[] = new int[50];
int valorInicio = 20;
int resultadoEjecucionFuncion = 0;
for(int i=0;i<50;i++){
V[i] = valorInicio + i;
if(i==y){
resultadoEjecucionFuncion = -B + V[y] -C + 10;
}
}
V[4] = resultadoEjecucionFuncion;
}
Implementación en Lenguaje de Bajo Nivel
...