martes, 15 de octubre de 2013



Ejercicio en clase 







Compilación a mano. 



Ejemplos en ensamblador


Antes de empezar a ver los programas de ejemplo debemos de saber que:
JE = JZ Ambos comandos son para lo mismo, para saltar si es igual (el registro en CX), o saltar si es cero. 

JNE = JNZ  Salta si no es igual, o salta si no es cero.

JG = JNLE Salta si es mayor o salta si no es menor o igual. 



Ejemplo #1 Utilizando el "JE" o "JZ"

Tecleamos el programa el un bloc de notas como a continuación muestra nuestra imagen: 


Luego de teclear el código que queremos correr en nuestra consola, repetimos los pasos que anteriormente hemos hecho, guardar con extensión .asm y .exe en nuestra carpeta masm para poder ejecutarlos, a continuación vemos como corren en nuestra consola: 




Ejecutamos en el type para que nos muestre todo nuestro código como lo tenemos originalmente.


Ahora ejecutaremos los comandos para ver nuestras respuestas, letras en hexadecimal y cambio de numero de compilación. 






Ejemplo # 2 Utilizando "JNZ" 

Programa en bloc de notas: 





Ejecucion del programa en cmd: 


Ejecutando el Debug








Fuentes:

miércoles, 9 de octubre de 2013

Actividad Miercoles 09 de Octubre

Programa en ensamblador 

Paso # 1 .- Tecleamos el programa en un archivo .txt el cual al momento de guardarlo le cambiamos la extension .asm 






Paso # 2.- Guardamos el mismo archivo pero ahora con extension .exe 



Paso # 3 .- Abrimos la pantalla cmd, entramos al masm y ejecutamos nuestro archivo con la extension .asm 



Paso# 4.- Ahora ejecutamos el archivo .exe en el debug : 


.

Paso # 5 Corregimos nuestro programa en .txt asi como se muestra 

Ejecutamos de nuevo y estas pantallas deben de salir:
Muestra nuestro programa ya modificado y ahora no salen errores. 






Nuestro CX cambia cada vez que se este ejecutando, entonces tiene que llegar a cero, conforme decremente. 



Aqui termina con el proceso: 






Muestra en esta imagen como termina, y  vuelve a la carpeta masm 





martes, 8 de octubre de 2013

Primer Programa en Ensamblador
 
 
 
Primero tecleamos el codigo en nuestro bloc de notas:
 

 
Lo guardamos como tipo .asm
 
 
 
 
Nos vamos a Disco Local/masm ahi guardaremos nuestro archivo.
 
 

 
 
Nos vamos al CMD
 
entramos a nuestra ventana como a continuacion muestra:
 
 
 
 
Para ver nuestro codigo una vez que ya se ejecuto el programa tecleas TYPE y el nombre de tu archivo mas la extension.
 

 
 
Fuentes:
 

lunes, 7 de octubre de 2013

Actividad Lunes 30 de Septiembre

Preguntas del capitulo 4 
Requerimientos de lenguaje ensamblador.


1.- Señale las diferencias entre un compilador y un ensamblador.
     El Compilador usa lenguaje de alto nivel y el Ensamblador utiliza el lenguaje de bajo nivel, ambos son para programar, pero el lenguaje de bajo nivel o ensamblador da instrucciones simbólicas  mientras que el lenguaje de alto nivel genera muchas instrucciones para la maquina. 


2.- Que es una palabra reservada  en un lenguaje ensamblador? De dos ejemplos. 
     Son palabras que están guardadas o reservadas para un propósito propio, se usan para condiciones especiales.

Ejemplo: Las instrucciones como MOV y ADD que son operaciones que se pueden ejecutar. 
Otro ejemplo es el END o SEGMENT que son para poner los comandos al ensamblador. 


3.- Cuales son los dos tipos de identificadores? 
    Es el de etiqueta y el de nombre. 
Etiqueta: Es el que dice la dirección de una instrucción. 
Nombre: Dice la dirección de un elemento de dato. 


4.- Determine cuales de los nombres siguientes son validos: 
a) PC_AT: Es valido.
b) $50: Es valido.
c) @$_Z: Es valido.
d)34B7: No es valido. 
e) AX: Es valido.


5.- cuales son las diferencias entre una directiva y una instrucción?
Las instrucciones son una serie de pasos que están como en sintaxis para que el ensamblador las reconozca y haga lo que le piden, mientras que las directivas son enunciados que permiten controlar la manera que un programa ensambla y lista. 


6.- Que comandos hacen que el ensamblador 
(a) Imprima un encabezado en la parte superior de una pagina en el listado de un programa: El comando TITLE hace que el titulo de un programa aparezca , se imprima en la linea 2 de cada pagina. Su formato general es TITLE texto. 

(b) Salte a una nueva pagina: El comando PAGE nos dice el numero maximo de lineas que en una hoja puede haber, su formato es PAGE [logitud]{, ancho}


7.- Cual es el objetivo de cada uno de los tres segmentos descritos en este capitulo? 
   Define los elementos de datos y un segmento de código.
  1. Tipo alineación: Nos dice el limite en el que inicia el segmento.
  2. Tipo combinar: Indica si el segmento se combina con otros segmentos son enlazados después de enlazar. 
  3. Tipo clase: Agrupa segmentos cuando se enlazan.


8.- El formato de la directiva SEGMENT es

            nombre SEGMENT alineación combinar ´clase´

Explique el objetivo de: 
a) Alineación: Operando.
b) Combinar: Comentario.
c) ´Clase´: Comentario. 


9.-
    a)  Cual es el objetivo de un procedimiento? Continuar con una serie de pasos para que pueda ejecutarse correctamente o haga lo que indiques. 
    b)Como define el inicio y el final de un problema? El inicio es la idea y el final es como queremos que salga el resultado. 
    c) Cuando definirá un procedimiento como FAR y cuando como NEAR?  
 FAR: Es cuando nuestra interface es unit debe tener el atributo Far, porque no podrá ser invocada desde cualquier segmento de código.
 NEAR: Es el atributo que puede conectarse con el programa principal. 


10.- Explique que enunciados END particulares tratan la finalizacion de: 
 a)un programa: Marca el final del archivo fuente y opcionalmente indica el punto de entrada al programa END [dirección de inicio]

 b) un procedimiento: Marca el final de un bloque de repeticion o de un marco. ENDM 

 c)un segmento: Marca el final del segmento estructura o union actual ENDP nombre de segmento o nombre de estructura


11.- Establezca las diferencias entre los enunciados que finalizan un ensamblado y los enunciados que finalizan ejecución. 

Enunciados que finalizan un ensamblado: Terminan un proceso de ensamblado
enunciados que finalizan ejecución: Termina solo un segmento o un procedimiento.



12.- De los nombres STKSEG, DATASEG y CDSEG a los segmentos de la pila, de los datos y del código respectivamente y codifique el ASSUME necesario. 
  STKSEG: Contiene una entrada DW (definir palabra) que define 32 palabras inicializadas a cero, un tamaño adecuado para la mayoria de los programas.
DATASEG: Define tres palabras de datos de llamadas FLDA, FLDB, FLDC. 
CDSEG: CODESG al registro CS de modo que el sistema utilice la direccion de registro CS para direccionamiento de CODESG. 


13.- Considere la instrucción MOV AX 4CH00 utilizada con INT 21H
a)Que hace la instrucción? Hace  que se inserten INT 21H incerta 21 caracteres de tipo Hexadecimal

b) cual es la finalidad del 4C y el 00: Regresa al DOS Dice la direccion de memoria. 

14.- Para las directivas simplificadas de segmentos, la directiva MODEL proporciona los modelos TINY SMALL, MEDIUM, COMPACT y LARGE. Bajo que circunstancias se utilizaría cada uno de estos modelos. 
Para un programa autónomo (que no este enlazado con otro).
 TINY: Es solo para usarse en programas 
 Small: Da solo un cupo de 64K para el codigo asi como otro segmento de la misma capacidad. 
Medium: Es utilizado cuando manejemos mas de un segmento de código.
Compact: Este tipo de modelo sera utilizado cuando manejamos 1 segmento de código pero tenemos mas de un segmento de datos. 
Large: Este es el mas grande de todos se usa cuando tenemos mas se un segmento de código y mas de un segmento de dato. 


15.-  De 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: definir byte


16.- Defina una cadena de caracteres TITLE1 que contenga la constante: RGB Electronics.

TITLE RGB Electronics


17.- Defina los valores numericos siguientes en elementos de datos FIELDA a FIELDE respectivamente: 
a) Un elemento de cuatro bytes con el equivalente Hexadecimal del 215 decimal.
215=0010 0001 0101 

b)un elemento de un byte con el equivalente hexadecimal del 35 decimal.

 35=0010 0101

c) Un elemento de dos bytes con un valor no definido

d) Un elemento de un byte con el equivalente binario del 25 decimal 

e) un DW con los valores consecutivos 17,19,21,26 y 31. 



18.- Muestre el codigo objeto hexadecimal generado por 

a) DB 28H: 0001 28 
b) DW 2845H: 0030 2845 
c) DD28733AH: 004A 3A732800
d) DQ 28733AH: 0062 3A73280000000000




miércoles, 25 de septiembre de 2013

Actividad # 9

Realizar una investigación y en listar las principales instrucciones de programación en lenguaje ensamblador.
Las herramientas son de suma importancia ya que son las que se hacen cargo de convertir los archivos en código ASCII para que la maquina lo pueda comprender mejor.
En el lenguaje ensamblador existen 3 tipos de instrcciones:
Instrucciones con 2 operandos:
Mov AX, BX
Mov es el nemonico, Ax es el operando 1 y el BX es el operando 2.
Instrucciones con un operando:
INC BX
En este ejemplo INC es un nemonico, mientras que el unico operando es BX.
Intrucciones con 3 operandos:
PUSHF
Donde PUSHF es el nemonico y el unico elemento de nuestra instruccion.
Instrucciones de transferencia de datos: Estas instrucciones son como su nombre lo dice "transfieren datos" algunos ejemplos de ellas son:
  • Mov: Copia o transfiere los datos, de OP2 a OP1, por ejemplo de
    Mov AX,0 ; AX=0
  • LEA : Carga un registro con la direccion de dezplazamiento de alguna variable en memoria. Su formato es LEA REG, Variable, por ejemplo
    Data
    Mensaje db ´Hola´, ´$´
    Code
    -------
    Lea DX, Mensaje   ; DS:DX  -> Mensaje
  • LDS: Inicializa el registro DS.
  • LES: Inicializa el registro ES.

las instrucciones LDS y LES modifican directamente el registro de segmento DS y ES por lo que solo es recomendable para programadores avanzados. 

Instrucciones del ensamblador: 

Transferencia: Mueve el contenido de los operandos
 MOV
MOVS (MOVSB) (MOVSW).

Carga: Son las instrucciones especificas de los registros.
LODS (LODSB) (LODSW) 
LAHF
LDS
LEA
LES

Pila: Permite almacenar datos a la pila. 
POP
POPF
PUSH
PUSHF

NOTA: Todos los mencionados anteriormente tienen como finalidad transferir datos entre celdas de memoria, registros y acumuladores. 

MOV Destino Fuente: Fuente es donde están los datos y destino es hacia donde se moveran.
Un ejemplo claro es 
MOV AX, 0006h
MOV BX,AX
MOV AX, 4C00H
INT 21 H


Instruccion LODS, LODSB, LODSW: El porposito de estos tipos de cadenas es que cargan de un byte o palabra al acumulador. 

LODS: En esta instruccion la cadena que se encuentr en la direccion SI la carga al registro AK o AX y suma o resta 1 segun el estado del DF. 
Por ejemplo tenemos MOV SI, OFFSET VAR1 LODS 

Instruccion LAHF: verifica el estado de las banderas. 
Por ejemplo el SF, ZF ?, PF, CF, el signo de interrogacion quiere decir los bits que abra de un valor. 

LDS destino fuente: Dice la palabra asociada y lo cambia al destino donde le marque el desplazamiento. 

LEA: Carga direccion del operando fuente.

LES: Carga el registro del segmento extra.

POP: Recuperar un dato de pila. 

POPF: Extrae las banderas almacenadas en la pila.

PUSH: Pone la palabra en la pila. 

PUSHF: coloca el valor de la bandera en la pila 



Fuentes: 
http://moisesrbb.tripod.com/unidad3.htm
http://www.monografias.com/trabajos-pdf/programacion-ensamblador-procesadores/programacion-ensamblador-procesadores.pdf