miércoles, 30 de octubre de 2013

PROGRAMAS


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;
              }



Analisis: 











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;

}
 

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




Debug: 




























sábado, 26 de octubre de 2013

Tarea ( publicar el lunes 28 de Octubre)

Instrucciones:  Investigar   como funcionan y  publicar un  programa ejemplo de uso de cada  instrucción ( un programa puede contener varias de este conjunto de instrucciones).

Ejemplo # 1 
Instruccion SHL que es el que se encarga de mover a la izquierda nuestros registros (Es un desplazamiento aritmético

En el siguiente .texto se muestra la instrucción en nuestro programa ensamblador.  

Ejecutando 









Ejemplo # 2 : Este ejemplo contiene cuatro tipos de instrucciones, SHR, SAR, ROR, RCR en un mismo programa. 

SHR: A diferencia del la instrucción anterior esta mueve hacia la derecha.

SAR: Desplazamiento aritmético a la derecha.

ROR: Rotación a la derecha. 

RCR: Rotación con acarreo a la derecha.

ROL:Rotacion a la izquierda 

SHL: Desplaza a la izquierda 

RCL:  Rotacion con acarreo a la izquierda 



Programa en .txt 












Ejemplo # 3 
CLC: Borra el acarreo 
STC: Pone de acarreo 1 

















Actividad 24 de Octubre

Ejecucion a mano y en cmd 

Programa en .txt








compilación a mano












martes, 22 de octubre de 2013

Martes 22 de Octubre

Actividad: Compilar el siguiente programa. 


Comenzamos tecleando el código en un Bloc de notas: 





Una vez guardado el archivo en nuestra carpeta masm ahora compilamos desde la ventana de cmd: 


...


Luego de compilarlo lo ejecutaremos directamente, ya que nuestro programa las funciones que esta ordenado a hacer, son las de poder entrar, teclear una palabra y automáticamente devolverla en tipo espejo, de izquierda a derecha, y compilamos para ver como cambian los registros. 




 Al momento de seguirlo ejecutando esto deberá aparecer (Es el aviso de que nuestra compilación ha terminado.



Por ultimo ya que sale esta ventana entonces el programa termina, y regresa originalmente al masm 





Compilación a mano












lunes, 21 de octubre de 2013

Lunes 21 de Octubre

ACTIVIDAD



Bloc de notas
Este es nuestro programa principal al cual lo modificaremos para que solo se compile 10 veces.



Modificado quedaria como  se muestra a continuacion:






compilacion:










Fuentes:
 http://lenguajes-interfaz-2013.blogspot.mx/?view=sidebar

viernes, 18 de octubre de 2013



Instrucción LOOP 

La instruccion LOOP va decrementando uno al CX, pero primero le da un numero que seria el tope, y de ahi va decrementando. 








Ejercicio de JMP 
Que pasa en el siguiente programa y porque?
Pasa que si lo analizamos bien no tiene fin, solo estamos sumandole valores a CX pero no estamos diciendo donde cortarlo, y seguira corriento mientras sigamos ejecutandolo, ya que no tiene una salida precisa. 





Podemos notar que en la salida de CX no cambia el valor. 




Fuentes: