jueves, 31 de octubre de 2013

Programa 24.Octubre.2013


Tenemos el programa ejecutándolo en el cmd y al final, también el programa ejecutado manualmente.






REVERSE.

El programa de reverse, una vez creado y convertido a .asm.
Abrimos el cmd y ahí lo mandamos llamar, así como también vemos los registros que tiene así como los movimientos de los mismos aplicando el debug.





Una vez que nos saca del debug porque ya no hay instrucciones, a continuación hay un ejemplo de lo que realmente hace el programa de reverse. 


JMP Ejecutado 10 veces.








Mientras que de forma manual está así:

miércoles, 30 de octubre de 2013

Análisis y pruebas de programa Loop.



Este programa define el número de líneas como máximo para listar en la página en la primera línea. Al igual que en el otro programa de JMP define el título y el modelo de memoria.

Luego, inicia el código. En este código se comienza mediante la generación de código empezando en el desplazamiento de dirección 100.
Se inicia el proceso.

Asigna valor a AX, BX y DX moviendo 01 a dichos registros y moviendo 10 al registro CX.

Luego está el nombre de la etiqueta indicando las veces de iteraciones que se tendrán, en este caso 20.

Luego, suma 1 al valor del registro AX, después suma el valor de AX al registro BX, posteriormente multiplica por 2 a DX e inicia el ciclo, restando de uno en uno hasta que sea cero.

Luego hace un movimiento del valor hexadecimal 4C00 al registro AX, ocurre la interrupción al cumplirse lo anterior y termina el proceso.

Finaliza el programa.







lunes, 28 de octubre de 2013

Análisis del programa JMP.


Este programa define el número de líneas que tendrá una página como máximo.
En seguida asignamos el título del programa, seguido del modelo de memoria.
Se genera el código empezando con un desplazamiento en la dirección 100.
El proceso inicia.
Se asigna moviendo 01 a los registros AX,  BX y CX.
El nombre de la etiqueta, asimismo indicando el número de iteraciones.
Se suma 1 al registro AX.
Se suma el valor de AX al registro BX.
Multiplica por 2 a DX.
Aquí se salta de nuevo a la etiqueta A20, haciendo un tipo de ciclo.
Se finaliza el proceso, y terminando, se termina el programa.

 





lunes, 21 de octubre de 2013

Entrada desde el teclado.

Al principio ya después de haberlo tecleado aquí vemos como lo mandamos llamar desde el cmd.
Nos pregunta si son buenas tardes o si es de mañana, esto lo contestamos ingresando una T o una M respectivamente.

Luego de eso, vemos a continuación un display que hacemos.

El display es de varios registros e iniciamos luego el debug.

Luego a esto, seguimos "debugueando" hasta poder encontrar la interrupción.

Luego de un tiempo encontramos la interrupción.

Posterior a la interrupción vemos que el programa ensamblador se ha salido ya que no hay otra instrucción para ejecutar.

Capítulo 4. Preguntas.

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.


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.


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) 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


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.


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.


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.


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.


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.


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.


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.


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



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.



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.


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



16) Defina una cadena de caracteres con nombre TITLE1 que contenga la constante: RGB Electronics.
TITLE1 DB 'RGB Electronics'


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 


18) Muestre el código objeto hexadecimal generado por 
a) DB '28' = 0001 22 28
b) DB 28 = 0001 1C


19) Determine el código objeto hexadecimal ensamblado para
a) DB 28H = 0001 28
b) DW 2845H = 0030 2845
c) DD 28733AH = 004A 3A732800
d) DQ 28733AH = 0062 3A73280000000000

miércoles, 2 de octubre de 2013

Instrucciones de programación en el lenguaje ensamblador.

INSTRUCCIONES:

DE TRANSFERENCIAS DE DATOS.
Estas instrucciones mueven datos de una parte a otra del sistema; desde y hacia la memoria principal, de y a los registros de datos, puertos de E/S y registros de segmentación. 

Las instrucciones de transferencia de datos son las siguientes: 
• MOV transfiere 
• XCHG intercambia 
• IN entrada 
• OUT salida 
• XLAT traduce usando una tabla 
• LEA carga la dirección efectiva 
• LDS carga el segmento de datos 
• LES carga el segmento extra 
• LAHF carga los indicadores en AH 
• SAHF guarda AH en los indicadores 
• PUSH FUENTE (sp) ‹ fuente 
• POP DESTINO destino ‹ (sp)

DE BUCLES.
Éstas posibilitan el grupo de control más elemental de nuestros programas. Un bucle es un bloque de código que se ejecuta varias veces. Hay 4 tipos de bucles básicos:
o Bucles sin fin 
o Bucles por conteo 
o Bucles hasta 
o Bucles mientras 

 Las instrucciones de control de bucles son las siguientes: 
• INC incrementar 
• DEC decrementar 
• LOOP realizar un bucle 
• LOOPZ,LOOPE realizar un bucle si es cero 
• LOOPNZ,LOOPNE realizar un bucle si no es cero 
• JCXZ salta si CX es cero

DE PRUEBA, COMPARACIÓN Y SALTOS.
Este grupo es una continuación del anterior, incluye las siguientes instrucciones: 
• TEST verifica 
• CMP compara 
• JMP salta 
• JE, JZ salta si es igual a cero 
• JNE, JNZ salta si no igual a cero 
• JS salta si signo negativo 
• JNS salta si signo no negativo 
• JP, JPE salta si paridad par 
• JNP, JOP salta si paridad impar 
• JO salta si hay capacidad excedida 
• JNO salta si no hay capacidad excedida

DE LLAMADA Y RETORNO DE SUBRUTINAS.
Para que los programas resulten eficientes y legibles tanto en lenguaje ensamblador como en lenguaje de alto nivel, resultan indispensables las subrutinas: 
• CALL llamada a subrutina 
• RET retorno al programa o subrutina que llamó

ARITMÉTICAS.
A. Grupo de adición: 
• ADD suma 
• ADC suma con acarreo 
• AAA ajuste ASCII para la suma 
• DAA ajuste decimal para la suma 

B. Grupo de sustracción: 
• SUB resta 
• SBB resta con acarreo negativo 
• AAS ajuste ASCII para la resta 
• DAS ajuste decimal para la resta 

C. Grupo de multiplicación: 
• MUL multiplicación 
• IMUL multiplicación entera 
• AAM ajuste ASCII para la multiplicación 

D. Grupo de división: 
• DIV división 
• IDIV división entera 
• AAD ajuste ASCII para la división 

E. Conversiones: 
• CBW pasar octeto a palabra 
• CWD pasar palabra a doble palabra 
• NEG negación 

F. Tratamiento de cadenas: 
Permiten el movimiento, comparación o búsqueda rápida en bloques de datos: 
• MOVC transferir carácter de una cadena 
• MOVW transferir palabra de una cadena 
• CMPC comparar carácter de una cadena 
• CMPW comparar palabra de una cadena 
• SCAC buscar carácter de una cadena 
• SCAW buscar palabra de una cadena 
• LODC cargar carácter de una cadena 
• LODW cargar palabra de una cadena 
• STOC guardar carácter de una cadena

LÓGICAS.
Son operaciones bit a bit que trabajan sobre octetos o palabras completas: 
• NOT negación 
• AND producto lógico 
• OR suma lógica 
• XOR suma lógica exclusiva

DE DESPLAZAMIENTO, ROTACIÓN Y ADEUDOS.
Básicamente permiten multiplicar y dividir por potencias de 2 
• SHL, SAL desplazar a la izquierda (desplazamient o aritmético) 
• SHR desplazar a la derecha 
• SAR desplazamiento aritmético a la derecha 
• ROL rotación a la izquierda
• ROR rotación a la derecha
• RCL rotación con acarreo a la izquierda

DE PILA.
Una de las funciones de la pila del sistema es la de salvaguardar (conservar) datos (la otra es la de salvaguardar las direcciones de retorno de las llamadas a subrutinas): 
• PUSH introducir
• POP extraer
• PUSHF introducir indicadores 
• POPF extraer indicadores

DE CONTROL DEL MICROPROCESADOR.
Hay varias instrucciones para el control de la CPU, ya sea a ella sola, o en conjunción con otros procesadores:
• NOP no operación 
• HLT parada 
• WAIT espera 
• LOCK bloquea 
• ESC escape

DE INTERRUPCIÓN.
• STI poner a 1 el indicador de interrupción 
• CLI borrar el indicador de interrupción 
• INT interrupción 
• INTO interrupción por capacidad excedida (desbordamiento) 
• IRET retorno de interrupción