Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1
Macro Assembler
El paquete d eeste lenguaje, trabaja bien con los compiladores de lenguajes de alto nivel
de Microsoft para las PC’s como Lenguaje C y el Lenguaje Pascal.
Donde:
Turbo Linker
El paquete Turbo Aseembler incluye el enlazador Turbo Linker, y es interoperable con el
depurador Turbo Debugger.
Donde:
Opciones:
Turbo Debugger
Turbo Debugger ayuda a depurar los programas escritos para Win16, Win32 y DOS.
Al monitorear las salidas del programa, como el código de fuente, las estructuras de datos
y valores del programa, es posible localizar aún los errores más difíciles.
TD archivo_ejecutable
Donde:
Proceso de ensamble
El archivo fuente debe tener una extensión .ASM parar que pueda ser reconocido por el
ensamblador.
El ensamblador también crea un encabezado al frente del módulo .OBJ generado, parte
de este encabezado tiene información acerca de las direcciones incompletas que
contenga dicho programa.
Durante el proceso de enlace, el programa enlazador (linker) lee los archivos objeto
(extensión .OBJ) creados por el ensamblador, los enlaza con el conjunto de instrucciones
del procesador que componen el programa fuente, escrito en lenguaje ensamblador, y
genera un archivo ejecutable de salida (extensión .EXE).
El enlazador enlaza las instrucciones que componen un módulo para formar un solo
programa con todas las instrucciones.
Otra de las tareas del enlazador es combinar los programas ensamblados en forma
separada en un solo programa ejecutable.
Este archivo se origina en la localidad 100H y tiene la ventaja de que requiere poco
espacio en disco y en memoria, además de que se ejecuta rápidamente.
.COM y .EXE
Un programa .COM consta de un solo segmento que contiene código, datos y pila.
Cuando se llama un programa desde el disco para su ejecución, el cargador del sistema
operativo realiza las siguientes acciones:
Transfiere el control al programa para ejecución, iniciando con la primera instrucción del
segmento de código.
En esta forma, el cargador del DOS inicializa los registros CS:IP y SS:SP.
Aunque se debe observar que el cargador almacena la dirección del PSP tanto en el
registro DS como en el ES, aunque normalmente se requiere la dirección del segmento de
datos en estos registros.
Como consecuencia, los programas tienen que inicializar el DS con la dirección del
segmento de datos.
Procedimiento de depuración
Una de las teorías en computación dice que el programa que funciona bien desde la
primera vez seguramente tiene errores.
El dominio de la arquitectura del sistema así como del lenguaje ensamblador facilitan la
escritura de programas sin errores.
Aún con esa ayuda, es posible que en el momento de ejecutar un programa, surjan
problemas de diseño que lleven a resultados erróneos.
Por todo lo anterior se recomienda desarrollar un programa paso a paso evitando “pensar
y teclear” inmediatamente.
Elaborar un algoritmo que establezca los pasos a seguir hasta terminar un procedimiento.
Elaborar un diagrama de flujo que defina claramente todas las rutas de ejecución del
programa, los procesos, entradas y salidas.
Definir las variables que se vayan a utilizar incluyendo los tipos y tamaños.
Codificar el programa utilizando correctamente la sintaxis del lenguaje, la arquitectura del
sistema, el conjunto de instrucciones, los modos de direccionamiento y el lenguaje
ensamblador.
Realizar una prueba de escritorio para evaluar todos los pasos anteriores, antes de
capturar el programa.
Además de que permite visualizar el estado de los registros del procesador y las banderas
que intervienen durante la ejecución del programa, también permite visualizar el contenido
de los segmentos en memoria.
La distancia debe ser un salto corto, desde –128 hasta + 128 bytes.
Para una operación que exceda ese límite, el ensamblador envía un mensaje como “salto
relativo fuera de rango”.
Cuando se utiliza esta instrucción dentro de un programa afecta los registros de banderas
durante la ejecución del mismo, como se muestra a continuación.
JMP (salto)
Dirección
Indicadores: OF DF IF TF SF ZF AF PF CF
- - - -- - -- - -- - -- - -- - -- - -
La bifurcación puede ser también directa o indirecta como se vio anteriormente, pero
además puede ser corta (tipo SHORT) con un desplazamiento comprendido entre -128 Y
127; o larga, con un desplazamiento de dos bytes con signo.
Si se hace un JMP SHORT y no llega el salto (porque está demasiado alejada esa
etiqueta) el ensamblador dará error.
Los buenos ensambladores (como TASM) cuando dan dos pasadas, colocan donde es
posible un salto corto, para economizar memoria, sin que el programador tenga que
ocuparse de poner la instrucción short.
Call Imprime
Jae SIGUE
Call Imprime
Jmp OTRA
SIGUE:
Call Imprime
Jmp OTRA
2.6. Ciclos Condicionales
Los ciclos inconcionales utilizan la instrucción LOOP para evaluar la condición que se
utilizará en el programa.
Cuando se utiliza esta instrucción dentro de un programa afecta los registros de banderas
durante la ejecución del mismo, como se muestra en el siguiente ejemplo:
Itera: ; Etiqueta
Otras instrucciones que se utilizan para los ciclos condicionales son las siguientes:
El resultado de una operación realizada con la instrucción CMP afecta las siguientes
banderas AF, CF, OF, PF, SF y ZF, aunque no se tienen que probar estas banderas de
forma individual.
Este ejemplo se puede realizar con dos tipos de instrucciones diferentes de la siguiente
forma:
Debido a que ZF tiene 1 (que significa una condición cero), JZ transfiere el control (salta)
a la dirección indicada por el operando B50.
Por ejemplo, ¿el valor del primer operando es mayor que, igual o menor que el valor del
segundo operando?
2.5 Saltos
Los saltos que se definen en un programa se utilizan para cambiar el flujo durante la
ejecución.
Un salto puede ser evaluado utilizando una instrucción dependiendo de las necesidades
o condiciones que se vayan a evaluar.
JA/JNBE Jump
Estas instrucciones son las más básicas a la hora de hacer operaciones con registros:
La instrucción INC incrementa el valor de un registro, o de cualquier posición en memoria,
en una unidad, y DEC lo decrementa.
INC WORD PTR [BX + 4], incrementa la palabra situada en CS: [BX +4] en uno.
La instrucción DEC AX, decrementa el registro AX en una unidad (le resta uno).
DEC WORD PTR [BX+4], decrementa la palabra situada en CS:[BX+4] en una unidad.
Estas dos instrucciones, son equivalentes a la instrucción “a++” o “a- -“ del lenguaje C.
Cada instrucción tiene capacidad para trabajar con operandos de 8 o 16 bits, con signo o
sin él.
ADD (suma)
MOV DX, 5
MOV DX, 6
ADD DX, CX
La instrucción ADD, también puede usarse con localidades de memoria como se muestra
en los siguientes ejemplos:
MOV AX, 5
MOV DX, 6
ADD AX, DX
ADD M1, AX
ADD destino, fuente: cuando se realiza esta operación se afecta el registro de banderas:
0 S Z A P C
Las instrucciones que se utilizan para llevar a cabo las operaciones aritméticas de suma
son:
Las instrucciones que se utilizan para llevar a cabo las operaciones aritméticas de resta
son:
Instrucciones que se utilizan para llevar a cabo las operaciones aritméticas para la división
son:
AJUSTES
Las operaciones que se llevan a cabo entre los registros y la memoria se realizan en
formatos binarios; cuando se desea presentar datos numéricos o resultados en pantalla,
generalmente se hace en formatos codificados, como código ASCII o BCD.
Sin embargo, el procesador también permite la manipulación aritmética de números tanto
en código BCD como en ASCII.
Esto se logra por medio de instrucciones que ajustan los números para aritmética BCD o
aritmética ASCII.
Sintaxis: DAA
Convierte el contenido del registro AL en un par de valores BCD. Si los cuatro bits menos
significativos de AL son un número mayor que 9, el indicador AF se pone a 1 y se suma 6
al registro AL.
Si los cuatro bits más significativos de AL tras la operación anterior son un número mayor
que 9, el indicador CF se pone a 1 y se suma 60h al registro AL.
La pila es una estructura de la memoria que utiliza el método LIF (último en entrar,
primero en salir) para manipular los datos.
La pila siempre crece de las localidades de memoria alta a las localidades de memoria
baja.
La pila se utiliza por omisión con las instrucciones, CALL, INT, RET, e IRET para guardar
o restaurar la dirección de retorno antes de ejecutar las rutinas indicadas por dichas
instrucciones.
También puede usarse para pasar parámetros entre rutinas, o bien de un lenguaje de alto
nivel a ensamblador.
Un concepto muy importante en el manejo de la pila es que los valores extraídos deben
estar en un orden inverso al que tenían cuando se guardaron (debido a que es una
estructura LIFO).
Las cuales efectúan sus operaciones bit por bit sobre sus operandos, la instrucción NOT
difiere de las demás instrucciones lógicas en que complementa todos los bits de su
operando.
AND (Y lógico),
o - - - x x ? x o
Ejemplos:
And ax, bx
And bl, byte ptr es:[si +10h]
OR (O Lógico):
Sintaxis: OR destino, origen
o - - - x x ? x o
Realiza una operación O lógico a nivel de bits ente los dos operandos, almacenándose
después el resultado en el operando destino
Ejemplo: OR ax,bx
- - - - - - - - - - - -
Realiza el complemento a uno del operando destino, invirtiendo cada uno de sus bits , los
indicadores no resultan afectados
Ejemplo: NOT ax
XOR (O logicco)
0 - - - x x ? x 0
Es obvio que la instrucción CMP no sirve para ese propósito, puesto que trabaja sobre el
conjunto de bits que forman el byte o palabra
En estos casos se usa la instrucción TEST, a cual establece si el bits sometido a prueba
no se encuentra encendido, la bandera de cero se enciende de lo contrario se apaga
El principal uso de esta instrucción se presenta al trabajar con puerto para probar el
estado de algún bits en particular:
Espera: In AL,DX
Test AL, 1
Jz Espera
Indicadores:
0 - - - x x ? x 0
Realiza una operación Y lógica entre los dos operandos pero sin almacenar el resultado.
Los indicadores son afectados con la operación
Indicadores
o - - - x x ? x x
dezplaza a la izquierda los bits del operando el numero de bits especificado en el segundo
operando que debe ser CL CL si es mayor que 1 los bits desplazados
o - - - x x ? x x
Desplaza a la derecha los bits del operando destino el numero de los bits especificados
en el segundo operando los bits de la izquierda se llenan con el valor de cero.
o - - - x x ? x x
desplaza a la derecha los bits del operando destino el numero de bits especificado en el
segundo operando.
Los bits de la izquierda se llenan con l bits de signo del primer operando
DESPLAZAMIENTO CIRCULAR
o - - - - - - - x
Rotar a la izquierda los bits del operando destino junto con el indicador de acarreo CF en
el número de bits especificado en el segundo operando
CF Alto bajo
RCL
Ndicadores: OF DF IF TF SF ZF AF PF CF
X-------x
Rotar a la derecha los bi¿ts del opernndo destino no junto con el indicador de acarreo
CF en numero de birts especificado en el segundo operando
Si el numero de bits es 1 se puede especificar directamente, en caso contrario su valor
debe cargarse en CL y especificar CL como segundo operando
incadores: OF DF IF TF SF ZF AF PF CF
X-------x
Rota a la izquiereda los bits del oprendo destino, el numero de bits especificando en el
Segundo operando, que puede ser 1 o CL peviamente cargado con el valor de numero de
veces
Indicadores: OF DF IF TF SF ZF AF PF CF
X-------x
Rota a ala derecha los bits del operando destino e numero de bits especificado en ele
Segundo operando
Alto bajo CF
EJEMPLOS