Saltar al contenido

Codificar en lenguaje ensamblador CISC | Ejemplos Matrices

Codificar en lenguaje ensamblador CISC c贸digos realizados en C

En este dos ejemplos vamos a codificar en lenguaje ensamblador CISC la siguiente estructura hecha en C.
Suponemos que tenemos una matriz de 8 filas y 20 n煤meros enteros por fila, y queremos poner a 0 el elemento n煤mero 20 de cada fila.

El c贸digo en C, ser铆a as铆:

i = 0;
do {
Matriz[i][20]=0;
i = i+1;
}
while (i<8);

Y en lenguaje ensamblador CISC esta ser铆a la soluci贸n:

PUSH R1
MOV R1, 80
DO:
MOV [Matz + R1], 0
ADD R1, 80
CMP R1, 720聽 ; (640+80 iniciales)
JL DO
POP R1

Descripci贸n del c贸digo ensamblador:

PUSH R1
Guardamos el valor de R1 para que cuando acabe el subprograma devolvamos a R1 el valor que ten铆a antes de entrar en el subprograma.

MOV R1, 80
Le damos a R1 el valor en el que se va a encontrar el primer elemento dentro de la matriz Matz.
Si queremos acceder al elemento 0 de la matriz R1 ser铆a 0, el elemento 1 R1 ser铆a 4 pues 4 son los bytes que ocupa un n煤mero entero.
Entonces como queremos acceder a la columna 20 de la matriz R1 ser谩 igual a 20 x 4 bytes de cada elemento = 80 bytes.
Con esto podemos saber que cada fila de la matriz ocupar谩 en memoria 80 bytes.

MOV [Matz + R1], 0
Nos ponemos en el primer elemento y le asignamos un 0.

ADD R1, 80
Si cada fila son 80 bytes, podemos ir al siguiente elemento que se encuentra 80 bytes m谩s adelante, por eso sumamos 80 a R1.

CMP R1, 640
C贸mo el total de filas que queremos cambiar son 8, puesto que empezamos en la fila 0 y cambiaremos los valores hasta la fila 7 (8 filas en total),
Multiplicaremos el valor de cada fila 80 bytes por el n煤mero de filas que queremos remplazar que son 8, esto nos da 640.

JL DO
Despu茅s de la comparaci贸n valoramos si ha sido menor de 720 (640+80 iniciales) seguiremos realizando el bucle, sino finalizar谩 el subprograma.

POP R1
Devolvemos a R1 el valor que ten铆a antes.

Ahora realizaremos un segundo ejemplo solo que esta vez la matriz ser谩 de 100 columnas. Por consiguiente, la matriz tendr谩 8 filas por 100 columnas de n煤meros enteros.

El c贸digo en C, ser铆a igual que el anterior solo que el n煤mero de columnas cuando se declare la matriz ser谩 mayor:

i = 0;
do {
Matriz[i][20]=0;
i = i+1;
}
while (i<8);

Y esta ser铆a la soluci贸n en lenguaje ensamblador CISC:

PUSH R1
MOV R1, 80
DO:
MOV [Matz + R1], 0
ADD R1, 400聽 ; ahora la fila es de 100 elementos (100*4)
CMP R1, 3280 ; 8 f. * 400 bytes fila= 3200+80 iniciales
JL DO
POP R1

El desarrollo del c贸digo sigue el mismo procedimiento que el anterior.