martes, 15 de octubre de 2013

Entrada desde Teclado

El siguiente programa muestra como imprime un mensaje de acuerdo a la entrada que le demos desde el teclado.
 
 
Después de ensamblar y enlazar el programa lo corremos y nos manda un mensaje preguntando si es de mañana o de tarde, y presionamos M para decir que es de mañana y nos manda mensaje de buenos dias, si ponemos T, nos manda mensaje de buenas tardes.

 
 
Aqui entramos en el debug y usamos un display en los registros DS, CS y SS para ver donde esta colocada la cadena.
 
 
En la siguiente imagen comenzamos a correr el programa paso por paso:

 
Vemos ahora como termina de ejecutarse el programa y sale del debug al no tener mas instrucciones por seguir.
 

Corrida Debug a mano

Este es el programa que es ejecutado a mano:






Aqui indicamos donde comienza la variable en memoria, mostrando el DS, de acuerdo al valor hexadecimal de la letra:



miércoles, 9 de octubre de 2013

Actividad Saltos

Primeramente creamos nuestro archivo fuente, el cual contiene el código de nuestro programa, en un bloc de notas, como se muestra a continuación.
 
 
Después lo guardamos en la carpeta "masm" que tenemos guardada en el directorio C, para poder ensamblar y enlazar nuestro archivo fuente, tal y como se muestra a continuación.

 
 
Luego de ensamblar y enlazar podemos ejecutar el archivo fuente con un "type" mas el nombre de nuestro archivo, y ocurrira lo siguiente.
 
 
 
Luego entramos en el debug del programa para ver que es lo que ocurre en memoria y en registro paso por paso, como se muestra en la siguiente imagen.
 


 
En la siguiente imagen se muestra como al seguir utilizando el comando "T" dentro del debug, va mostrando paso por paso los cambios que hay en memoria y en registros, donde mas se notan los cambios es en el registro IP y CX, que cambia por cada salto que se da, hasta que se muestra la interrupción y sale del debug.
 
 
 
En el siguiente programa realizamos los pasos anteriores pero ahora la ejecución de un programa con saltos.
 



 


 


martes, 8 de octubre de 2013

Programa en ensamblador

Primer programa en ensamblador
 
Primeramente creamos un archivo (programa fuente) en bloc de notas con el contenido que deseemos sobre el programa.
 
 
 
 
Después de crear el archivo lo guardamos con la extensión .asm, en este caso usamos el nombre Hola.asm, guardando el archivo el la carpeta llamada masm, que tenemos en C, para luego comenzar a correr el programa en ensamblador. Para comenzar a correrlo tenemos que usar cmd y establecernos en la carpeta masm, realizar los siguientes pasos que se muestran en la siguiente imagen:
 

 
 

El comando masm es para comenzar a ensamblar el archivo fuente y que establezca un objeto.
El comando link es para enlazar el este objeto y luego el comando type lo ejecute.


El siguiente programa es realizar los mismos pasos que en el anterior, solo que modificamos un poco su contenido.

Archivo fuente en bloc de notas:
 

Pasos para ejecutar el archivo:

domingo, 29 de septiembre de 2013

Preguntas capitulo 4

4-1. Señale las diferencias entre un compilador y un ensamblador.
 
La diferencia radica en que el compilador es usado en lenguajes de alto nivel para traducer el código fuente a lenguaje máquina, y el lenguaje ensamblador es usado por lenguajes de bajo nivel para realizer dicha traducción.

4-2. ¿Qué es una palabra reservada en un lenguaje ensamblador? Dé dos ejemplos.
 
Ciertas palabras en lenguaje ensamblador están reservadas para sus propósitos propios, y son usadas sólo bajo condiciones especiales. Por categorías, las palabras reservadas incluyen:
 
  • Instrucciones, como MOV y ADD, que son operaciones que la computadora puede ejecutar.
  • Directivas, como END o SEGMENT, que se emplean para proporcionar comandos al ensamblador.
  • Operadores, como FAR y SIZE, que se utilizan en expresiones.
  • Símbolos predefinidos, como @Data y @Model, que regresan información a su programa.

4-3. ¿Cuáles son los dos tipos de identificadores?
 
Nombre, que se refiere a la dirección de un elemento de dato, y Etiqueta, que se refiere a la dirección de una instrucción.
 
4-4. Determine cuales de los nombres siguientes son válidos:
 
a) PC_AT: Válido
 
b) $50: Válido
 
c) @$_Z: Válido
 
d) 34B7: No Válido
 
e) AX: No válido
 
4-5. ¿Cuáles son las diferencias entre una directiva y una instrucción?
 
La diferencia es que la directiva indica al ensamblador que realice una acción específica, como definir un elemento de dato y las instrucciones, como MOV y ADD, son traducidas por el ensamblador a código objeto.
 
4-6. ¿Qué comandos hacen que el ensamblador...
 
a) Imprima un encabezado en la parte superior de una página en el listado de un programa? Comando TITLE.
 
b) Salte a una nueva página? Comando PAGE.
 
4-7. ¿Cuál es el objetivo de cada uno de los tres segmentos descritos en este capítulo?
 
  • Un segmento de pila define el almacén de la pila.
  • Un segmento de datos define los elementos de datos.
  • Un segmento de código proporciona un código ejecutable.
 
4-8. El formato de la directiva SEGMENT es
 
nombre SEGMENT alineación combinar 'clase'
 
Explique el objetivo de
 
a) Alineación: Indica el límite en el que inicia el segmento.
 
b) Combinar: Indica si el segmento se combina con otros segmentos cuando son enlazados después de ensamblar.
 
c) Clase: Es utilizada para agrupar segmentos cuando se enlazan.
 
4-9. a) ¿Cuál es el objetivo de un procedimiento?

Cuando usted solicita la ejecución de un programa, el cargador de programas del DOS utiliza el nombre del procedimiento como el punto de entrada para la primera instrucción a ejecutar.
 
b) ¿Cómo define el inicio y el final de un procedimiento?

La directiva PROC inicia un procedimiento y la directiva ENDP lo finaliza.
 
c) ¿Cuándo definiría un procedimiento como FAR y cuándo como NEAR?

FAR cuando sea el primer procedimiento, y NEAR para cada procedimiento adicional.
 
4-10. Explique que enunciados END particulares tratan la finalización de
 
a) Un programa: La directiva END finaliza todo el programa.
 
b) Un procedimiento: La directiva ENDP finaliza un procedimiento.
 
c) Un segmento: La directiva ENDS finaliza un segmento.
 
4-11. Establezca las diferencias entre los enunciados que finalizan un ensamblado y los enunciados que finalizan una ejecución.

Los enunciados que finalizan un ensamblado es para terminar todo el proceso de ensamblado, en cambio los que finalizan una ejecución solo terminan un segmento o un procedimiento.
 
4-12. Dé los nombres STKSEG, DATSEG, y CDSEG a los segmentos de la pila, de los datos y del código, respectivamente, y codifique el ASSUME necesario.

STKSEG SEGMENT PARA STACK 'Stack'
STKSEG ENDS

DATSEG SEGMENT PARA 'Data'
DATSEG ENDS

CDSEG SEGMENT PARA 'Code'
BEGIN PROC FAR
    ASSUME SS: STKSEG, DS: DATSEG, CS: CDSEG
    MOV AX, DATSEG
    MOV DS, AX
    INT 21H
BEGIN ENDP
CDSEG ENDS
END BEGIN
 
4-13. Considere la instrucción MOV AX, 4C00H utilizada con INT 21H.
 
a) ¿Qué hace la instrucción? Después de la transferencia, se hace la petición para la terminación de un programa.
 
b) ¿Cuál es la finalidad del 4C y el 00? Indicar la dirección de memoria donde queremos mover el valor del registro AX.
 
4-14. Para las directivas simplificadas de segmentos, la directiva .MODEL proporciona los modelos TINY, SMALL, MEDIUM, COMPACT y LARGE. ¿Bajo qué circunstancias se utilizaría cada uno de estos modelos?
 
  • El modelo TINY esta destinado para uso exclusivo de programas .COM, los cuales tienen sus datos, código y pila en un segmento.
  • El modelo SMALL exige que el código quepa en un segmento de 64K y los datos en otro segmento de 64K.
  • El modelo MEDIUM se usaría cuando tengamos más de un segmento de código y un solo segmento de datos.
  • El modelo COMPACT se utilizaría cuando se tenga un segmento de código pero más de 1 segmento de datos.
  • El modelo LARGE se usaría cuando tengamos más de un segmento de código y más de un segmento de datos.
 
4-15. Dé las longitudes, en bytes, generadas por las siguientes directivas de datos
 
a) DD: 4 bytes
 
b) DW: 2 bytes
 
c) DT: 10 bytes
 
d) DQ: 8 bytes
 
e) DB: 1 byte
 
4-16. Defina una cadena de caracteres con nombre TITLE1 que contenga la constante: RGB Electronics.

TITLE1 DB 'RGB Electronics'
 
4-17. Defina los valores numéricos siguientes en elementos de datos FIELDA a FIELDE, respectivamente:
 
a) Un elemento de cuatro bytes con el equivalente hexadecimal del 215 decimal:

FIELDA DD EQU D7H
 
b) Un elemento de un byte con el equivalente hexadecimal del 35 decimal:

FIELDB DB EQU 25H
 
c) Un elemento de dos bytes con un valor no definido:

FIELDC DW EQU (?)
 
d) Un elemento de un byte con el equivalente binario del 25 decimal:

FIELDD DB EQU 00011001
 
e) Un DW con los valores consecutivos 17, 19, 21, 26 y 31:

FIELDE DW EQU 17
FIELDE 19 EQU DW
FIELDE 21 EQU DW
FIELDE 26 EQU DW
FIELDE 31 EQU DW
 
4-18. Muestre el código objeto hexadecimal generado por
 
a) DB '28' = 0001 22 28
 
b) DB 28 = 0001 1C
 
4-19. Determine el código objeto hexadecimal ensamblado para
 
a) DB 28H = 0001 28
 
b) DW 2845H = 0030 2845
 
c) DD 28733AH = 004A 3A732800
 

miércoles, 25 de septiembre de 2013

Instrucciones de programación del lenguaje ensamblador

Instrucciones de transferencia: Son utilizadas para mover los contenidos de los operandos. Cada instrucción se puede usar con diferentes modos de direccionamiento.
  • MOVTransferencia de datos entre celdas de memoria, registros y acumulador.

    Sintaxis: MOV Destino,Fuente

  • MOVS (MOVSB) (MOVSW) - Mover cadenas de bytes o palabras desde la fuente, direccionada por SI, hasta el destino direccionado por DI.

    Sintaxis: MOVS
Instrucciones de carga: Son instrucciones específicas de los registros. Son usadas para cargar en algœn registro bytes o cadenas de bytes.
  • LODS (LODSB) (LODSW): Cargar cadenas de un byte o palabra al acumulador.

    Sintaxis: LODS
  • LAHF: Transfiere al registro AH el contenido de las banderas.

    Sintaxis: LAHF
  • LDS: Cargar el registro del segmento de datos.

    Sintaxis: LDS destino, fuente
  • LEA: Carga la dirección del operando fuente.

    Sintaxis: LEA destino, fuente
  • LES: Carga el registro del segmento extra.

    Sintaxis: LES destino, fuente
Instrucciones de la pila: Estas instrucciones permiten el uso de la pila para almacenar y extraer datos.
  • POP: Recupera un dato de la pila.

    Sintaxis: POP destino
  • POPF: Trae las banderas almacenadas en la pila.

    Sintaxis: POPF
  • PUSH: Coloca una palabra en la pila.

    Sintaxis: PUSH fuente
  • PUSHF: Coloca el valor de las banderas en la pila.

    Sintaxis: PUSHF
En el siguiente link se pueden encontrar algunas instrucciones en una tabla:

http://www.sc.ehu.es/sbweb/webcentro/automatica/web_8051/Contenido/set_8051/set8051.htm


Instrucciones aritméticas:

Existen 8 instrucciones aritméticas básicas: ADD (Suma), SUB (Resta), MUL (Multiplicación sin signo), DIV (División sin signo), IMUL (Multiplicación con signo), IDIV (División con signo), INC (Incremento unitario) y DEC (Decremento unitario).
 
Las instrucciones ADD y SUB permiten realizar sumas y restas sencillas y tienen el siguiente formato:
 
ADD Destino, Fuente
SUB Destino, Fuente
 
Ejemplos:
ADD AX,BX ;AX=AX+BX
ADD AX,10 ;AX=AX+10
SUB AX,BX ;AX=AX-BX
SUB AX,10 ;AX=AX-10
 

Instrucciones de comparación y prueba:
 
Existen dos instrucciones especiales en el microprocesador 8086: CMP y TEST.
CMP (Comparar) compara si dos valores son iguales o diferentes. Su funcionamiento es similar al de la instrucción SUB (restar), sólo que no modifica el operando de destino, solamente modifica las banderas de signo (SF), de cero (ZF) y de acarreo (CF).
 
Por ejemplo:
CMP AX,1235


Por otro lado, la instrucción TEST realiza la operación AND de los operandos especificados sin que el resultado se almacene en algún registro, modificando únicamente ciertas banderas. Su aplicación más común es la de probar si algún bit es cero.
 
Ejemplo:
Test AL,1
Esta instrucción prueba si el bit menos significativo de AL es 1 y
Test AL,128
prueba si el bit más significativo de AL es 1.
 
 

Fuentes consultadas

http://moisesrbb.tripod.com/unidad3.htm

http://www.sisman.utm.edu.ec/libros/FACULTAD%20DE%20CIENCIAS%20ZOOT%C3%89CNICAS/CARRERA%20DE%20INGENIER%C3%8DA%20EN%20INFORMATICA%20AGROPECUARIA/05/PROGRAMACION%20IV/P.%20Avanzada%20lenguaje%20ensamblador.PDF 

http://www.monografias.com/trabajos-pdf/programacion-ensamblador-procesadores/programacion-ensamblador-procesadores.pdf