sábado, 9 de noviembre de 2013

Actividad #11

MILITARIZACIÓN

Ejemplos con PROC (Procedimientos)

Son aquello que nos permiten codificar bloques de sentencias a los que se asigna de un nombre, usa parámetros, y las sentencias son dictadas de una por una.
Ejemplo #1



Ejemplo #2



Ejemplos con macros

Macros es utilizado para disminuir las lineas de codigo de nuestro programa, ya que en lenguaje ensamblador se utilizan muchos procedimientos que suelen ser algo tediosos, o dicen lo mismo.

Estructura base de nuestros ejemplos con macro:

.MACRO Nombre [(parametro1, parametro2, etc)]
INSTRUCCIONES
ENDM
Nuevamente, lo que se encuentra entre paréntesis cuadrados es opcional.
De acuerdo con esto, la macro para imprimir cadenas quedaría de la siguiente forma:
.MACRO Imprime_Cad(Cadena)
Lea DX,Cadena
Mov Ah,09h
Int 21h
ENDM



Ejemplo #1



Ejemplo # 2 




Las diferencias entre macros y los procedimientos es que las macros son mas rápidas para ejecutarlas a comparación de los procedimientos, ya que los procedimientos hacen el código paso por paso, aunque en ocasiones suele ser mas fácil comprender un código que use procedimientos porque vemos paso por paso, registro por registro y en las macros solo la ejecuta ahorrando tiempo 


Fuente:

http://www.ilustrados.com/tema/3805/Programacion-lenguaje-ensamblador.html













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