Ejemplo # 1 : (Implementacion de la condición if-them)
se pretende realizar un programa en lenguaje ensamblador equivalente al sig. código en C:
#include <iostream.h>
main()
{
int a[] = {12, 5, 34, 75, 10, 25};int n = 6;
int max, i;
for (max = i = 0; i < n; i++)
if (a[i] > max)
max = a[i];
cout << max << end1;
}
Codificación en ensamblador:
SI: registro indice fuente.
DI: Registro indice destino.
OFFSET: Dice el numero de posiciones de memoria sumadas a una direccion base para conseguir una direccion especifica.
.Data: Data Segment
CMP: Compara dos registros o un registro y una dirección de memoria.
@Data: Para pasar la referencia a AX.
Saltos condicionales: If, Else, then, for, while-do
JC, JNAE, JB: Comparan con el flag de acarreo se pone a 1.
LEA: Sirve para usar como puntero a Dx.
Debug:
Ejemplo # 2 (Implementación de la condición if-then-else) Se pretende realizar un programa en lenguaje ensamblador equivalente al siguiente código en C:
Código:
#include <iostream.h>
main()
{
int a[] = {-12, 5, -34, -75, -10, 25};
int n = 6;
int max, i;
int npos, nneg;
for (i = npos = nneg = 0; i < n; i++)
if (a[i] > 0)
npos++;
else
nneg++;
cout << “+: “ << npos << “; -: “ << nneg << end1;
main()
{
int a[] = {-12, 5, -34, -75, -10, 25};
int n = 6;
int max, i;
int npos, nneg;
for (i = npos = nneg = 0; i < n; i++)
if (a[i] > 0)
npos++;
else
nneg++;
cout << “+: “ << npos << “; -: “ << nneg << end1;
}
Analisis
Este programa usa un arreglo de numeros negativos y positivos que a diferencia de nuestro primer ejemplo solo eran positivos, fue un poco complicado encontrar
Codificacion en ensamblador:
Tecleamos el ejemplo 2 en un bloc de notas, para correrlo y ver si es correcto.
JNZ: salta si no es igual a cero
CMP: Compara dos registros o un registro y 1 dirección de memoria
LEA: Sirve para usar como puntero a DX
EQU: Asigna al símbolo contenido en el campo etiqueta el valor de la expresión en el campo operando. (En nuestro programa pusimos el de n equ 6, porque tenemos 6 valores en nuestro arreglo de números)
JNS: Salta si el signo es positivo