miércoles, 10 de abril de 2013

Saltos


Screenshoots





Codigo

title jejgjne
.model small
.stack 64
.data
.code
start:
MOV AX,1111h
MOV BX,1112h
CMP AX,BX
JB tirapalante
HLT
tirapalante: DEC BX
CMP AX,BX
JNE Acaba 
JE Continua
Continua: DEC BX
CMP AX,BX
JE Acaba ; No son iguales, por tanto no saltará
JB Acaba ; No es menor, tampoco salta
JG Acaba ; Es mayor, ahora SI saltará
Acaba: XOR AX,AX.
End

lunes, 8 de abril de 2013

Programa 5-6


Codigo:

title codigo506(EXE)
.MODEL SMALL
.STACK 64
.CODE
BEGIN PROC FAR
MOV AL ,40H
SHL AL,1
MOV BL,22H
MUL BL
MOV AX ,4C00H
INT 21H
BEGIN ENDP
END BEGIN

Corriendo el programa en MASM:


Debug and Link del programa:







domingo, 7 de abril de 2013

Resumen Capitulo 7



ESCRITURAS DE PROGRAMAS .COM
Las ventajas de programas .COM están en que son mas pequeños que programas .EXE comparables y son más fáciles de adaptar para actuar como programas residentes de memoria.
DIFERENCIAS ENTRE  PROGRAMAS .COM Y .EXE
TAMAYO DEL PROGRAMA:
El .EXE puede ser de cualquier Tamaño, mientras que un programa .COM está restringido a un segmento y a un máximo de 62 k, incluyendo el PSP.
El PSP en un bloque de 256 bytes (100H) que el DOS inserte antes de los programas .COM y .EXE cuando se carga a la memoria.
Un programa .COM siempre es más pequeño que su contraparte .EXE; una razón es que el bloque de encabezado de 512 bytes a un programa  .EXE  no procede a un programa .COM.
SEGMENTOS
Es más fácil su uso en .COM que el .EXE
                SEGMENTO PILA.- en .EXE se define un segmento de pila, mientras que en .COM se genera automáticamente una pila. Cuando se escribe un programa en .COM se omite la definición de la pila. Si no se es suficiente los 64 k que se le asigna el ensamblador establece la pila fuera del programa, en la memoria superior.
                SEGMENTO DE DATOS.-en .EXE define un segmento de datos e inicializa el registro DS con la dirección de ese segmento. Como este definido dentro del segmento de código, tampoco tiene que definir el segmento de datos.
                SEGMENTO DE CÓDIGO.-  en .COM completo combina el PS, la pila, el segmento de datos y el segmento de código es un segmento de código de un máximo de 64k.
INICIALIZACIÓN
Cuando el DOS carga un programa.COM para ejecución, inicializa de forma automática todos los registros de segmentos con la dirección de PSP. Ya que los registros CS yDS contendrán las direcciones de segmento inicial correcta, su programa no tiene que cargarlos.
La dirección ORG le indica al ensamblador que empiece la generación del código objeto en un desplazamiento de 100H bytes pasando el inicio del PSP, en donde el programa .COM real inicia.



CONVERSIÓN A FORMATO .COM
Si su programa fuente ya está escrito en formato .EXE , puede utilizar un editor para convertir las instrucciones a formato .COM. Los formatos MASM Y TASM para .COM son idénticos. Cuando la conversión a .COM esta completa, puede borrar los archivos .OBJ y .EXE.
Conversión con Microsoft
Para ambos programas, con MASM de Microsoft se ensambla y produce un archivo .OBJ y después se enlaza para producir .EXE.
Si escribió el programa para ejecutarse como un programa .COM, el enlazador produce un mensaje:

Suponiendo que EXE2BIN está en la unidad por omisión, y que el archivo enlazado llamado CALC.EXE está en la unidad D, teclee:

EJEMPLO DE UN PROGRAMA .COM
*No existen definidos una pila o un segmento de datos.
*Un enunciado ASSUME le indica al ensamblador que inicie los desplazamientos desde el inicio del segmento de código.
*ORG 100H establece un desplazamiento para inicio de ejecución.
*Una instrucción JMP transfiere el control a la ejecución pasando los datos.
  
LA PILA DE .COM

Aquí están los pasos  para convertir el programa MASM y TASM:

Los programas .EXE y .COM son de 792 bytes y de 24 bytes, respectivamente
PILAS DE .COM
Para un programa .COM,el DOS define de manera automática una pila y establece la misma dirección de segmento de 64k para el programa es suficientemente grande, Dos establece la pila al final del segmento y carga el registro SP con FFFEH, a parte superior de la pila (tope de la pila).
Su programa es grande, o si la memoria está limitada, debe tener cuidado al enviar palabras a la pila. El comando DIR indicada el tamaño de un archivo y dará una idea del espacio disponible para una pila.

SUGERENCIAS PARA LA DEPURACIÓN
Si ejecuta un programa .COM con el DEBUG, utilice D CS: 100 para ver los datos e instrucciones. No siga el programa hasta su terminación; en lugar de eso, utilice el comando Q de DEBUG.
PUNTOS CLAVE
·         Un programa .COM está restringido a un segmento de 64k.
·         Un programa .COM es las pequeño que su programa.EXE contraparte.
·         Un programador escritorio para correr como .COM no define una pila o un segmento de datos ni inicializa el registro DS.

martes, 5 de marzo de 2013

Instrucciones Principales de lenguaje Ensablador

Instrucciones Principales de lenguaje Ensablador


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)

Control de Bucles (instrucciones simples)

É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

 

Instrucciones 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

· JB, JNAE: salta si por abajo (no encima o igual)

· JNB, JAE: salta si no está por abajo (encima o igual)

· JBE, JNA: salta si por abajo o igual (no encima)

· JNBE, JA: salta si no por abajo o igual (encima)

· JL, JNGE: salta si menor que (no mayor o igual)

· JNL, JGE: salta si no menor que (mayor o igual)

· JLE, JNG: salta si menor que o igual (no mayor)

· JNLE, JG: salta si no menor que o igual (mayor)

Instrucciones de Llamado 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ó

Instrucciones Aritméticas.

Estas instrucciones son las que realiza directamente el 8086/8088

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

· STOW: guardar palabra de una cadena

· REP: repetir

· CLD: poner a 0 el indicador de dirección

· STD: poner a 1 el indicador de dirección

Instrucciones 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

Instrucciones 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

· RCR: rotación con acarreo a la derecha

· CLC: borrar acarreo

· STC: poner acarreo a 1

Instrucciones 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

Instrucciones 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

Instrucciones 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