miércoles, 30 de octubre de 2013

Actividad 28 Oct


#1(Implementación de la condición if-then)

Se pretende realizar un programa en lenguaje ensamblador equivalente al siguiente 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;
 }
 
Este programa calcula el máximo de los elementos del array a, almacenádolo en la variable max.

Analisis:
Primero que nada tome en cuenta que variables iba a utilizar el programa, que son el arreglo "a", "n", y "max", estas las declare despues de .DATA en mi codigo de lenguaje ensamblador. Luego tome en cuenta como debia actuar el programa, antes que nada tenia que hacer lo basico, que es mover AX a DS, luego cargar los valores de "a" y de "max", en SI y DI respectivamente, para luego comenzar un ciclo que compare cada uno de los numeros en el arreglo "a", con la variable "max", para que se guarde en max el numero con el que compara si este es mayor que lo que esta en max. Una vez que compara todos, sale al DOS.
 
 

Para comprobar que esta bien el programa, se utiliza el debug, primero escribiendo el programa en un bloc de notas y guardandolo como .asm, para despues ensamblaro y enlazarlo, y por ultimo usar el debug para ver como funciona, al correrlo paso por paso.


 
Ensamblado y enlazado
 
 
Mostrar registros DS,CS y SS
 
 
Ejecución del programa
 
 
 
Se observa como al correr paso por paso, las instrucciones van cambiando de acuerdo a lo que se tiene en el bloc de notas, y como se diseño el programa, observando que el registro CX decrement hasta ser 0 y es cuando el programa deja de ejecutarse, terminando su funcion, y estableciendo a "max" con el valor de 75.
 

#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:

#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;
}
 
Analisis:
Este programa es parecido al primero, con la unica diferencia que aqui usa un else, las variables a utilizar en el programa son el arreglo "a", "n", "npos" y "nneg", "max" no se usa para nada en este programa por lo que no lo tome en cuenta, estas las declare despues de .DATA en mi codigo de lenguaje ensamblador. Luego al igual que en el anterior tome en cuenta como debia actuar el programa, moviendo AX a DS para luego cargar los valores de "a" en SI, y despues comenzar un ciclo que compare cada uno de los numeros en el arreglo "a", con cero, para determinar si es positivo o negativo e ir incrementando npos o nneg, según sea el resultado, y por ultimo ir a la etiqueta salir para terminar el programa.



Para comprobar que esta bien el programa, se utiliza el debug, primero escribiendo el programa en un bloc de notas y guardandolo como .asm, para despues ensamblaro y enlazarlo, y por ultimo usar el debug para ver como funciona, al correrlo paso por paso. El tipo de salto utilizado en este programa es JNS para comprobar si el número resultante no tiene signo, y si es asi entonces salta, de lo contrario continua con la siguiente instrucción.
 

 
Ensamblado y enlazado
 


 
Mostrar registros DS, CS y SS
 



 
Ejecución del programa
 



Observamos como en el registro DX se guardaron las veces que se contaron número negativos y positivos, en la parte alta(DH) los positivos y en la parte baja(DL) los negativos.
 

No hay comentarios:

Publicar un comentario