Professional Documents
Culture Documents
Que es?
El ensamblador es una variante legible para el ser humano del
lenguaje de maquina que usan las computadoras. Este lenguaje
le da la facilidad y las herramientas necesarias para tomar el
control de todo el PC.
El lenguaje ensamblador, o assembler (assembly language en
ingls) es un lenguaje de programacin de bajo nivel para los
computadores, y otros circuitos integrados programables.
Que es?
Se dice que existe una relacin 1:1 entre el lenguaje de maquina y el
lenguaje ensamblador. Por tanto, El Lenguaje Ensamblador es directamente
traducible al Lenguaje de Mquina, y viceversa.
Fuente
Objeto
Ejecutable
(.exe)
Basic
27 bytes
651 bytes
12814 bytes
Ensamblador
162 bytes
169 bytes
543 bytes
Palabras Reservadas
Las palabras reservadas son para uso estricto del ensamblador. stas incluyen a
los operadores, directivas y smbolos predefinidos. Estas palabras no pueden
usarse como identificadores.
stack
Esta directiva reserva espacio de memoria para la pila del programa, un rea
de memoria que almacena valores temporales empleados por las subrutinas
y las direcciones de regreso de las subrutinas.
CX (16 bits): El registro CX es conocido como el registro contador. Puede contener un valor para
controlar el nmero de veces que un ciclo se repite o un valor para corrimiento de bits.
BL (8 bits)
BH (8 bits)
CL (8 bits)
CH (8 bits)
DL (8 bits)
DH (8 bits)
SI:
DI:
ndice
origen
ndice
destino
Puntero a
base
Puntero de
pila
Segmento de cdigo
registro CS.
DS: La direccin inicial de un segmento de datos de programa es almacenada en el registro Segmento de dato
DS.
ES: Algunas operaciones con cadenas de caracteres utilizan el registro extra de segmento
Segmento Extra
Segmento de pila
Apuntador de instrucciones
IP: El registro IP de 16 bits contiene el desplazamiento de direccin de la siguiente instruccin que se ejecuta
Registro de Bandera
- - - - O D I T S Z - A - P - C
OF (overflow, desbordamiento): Indica desbordamiento del bit de mayor orden despus de una operacin aritmtica de nmeros
signados (1=existe overflow; 0=no existe overflow). Para operaciones sin signo, no se toma en cuenta esta bandera
DF (direccin): Controla la seleccin de incremento o decremento de los registros SI o DI en las operaciones con cadenas de caracteres
(1=decremento automtico; 0=incremento). La bandera DF se controla con las instrucciones STD y CLD.
IF (interrupcin): Indica que una interrupcin externa sea procesada o ignorada (1=habilita la interrupcin; 0=deshabilita la
interrupcin). El estado de la bandera IF se controla con las instrucciones STI y CLI.
TF (trampa): Permite la operacin del procesador en modo de depuracin (paso a paso)
SF (signo): Contiene el signo resultante de una operacin aritmtica (0=positivo; 1=negativo).
ZF (cero): Indica el resultado de una operacin aritmtica o de comparacin (0=resultado diferente de cero; 1=resultado igual a cero).
ZF (cero): Indica el resultado de una operacin aritmtica o de comparacin (0=resultado diferente de cero; 1=resultado igual a cero).
PF (paridad): Indica paridad par o impar en una operacin de datos de ocho bits (0=paridad impar; 1=paridad par).
CF (acarreo): Contiene el acarreo de los bits de mayor orden despus de una operacin aritmtica; tambin almacena el contenido del
ltimo bit en una operacin de corrimiento o de rotacin.
EJ: 2A54:0022
Al desplazar el segmento 4 bit a la izquierda, nos quedara
2A540
Luego
2A540
+0022
______
2A562 Hex
De esta manera obtendremos la direccion absoluta de memoria.
Note que el resultado es de 20 bits
Interrupciones
Es un mecanismo de transferencia de control, bsicamente ocasiona que la CPU
detenga su ejecucin del programa actual y transfiera el control a una rutina de
servicio.
Al terminar de ejecutar la interrupcin, el CPU continua con los procesos que se
estaban ejecutando antes de la interrupcin.
Interrupciones
Int 21h
Verifica si existe una tecla a ser procesada
Ejemplo:
Funcion 09H
Enva una cadena de caracteres al dispositivo de salida estndar STDOUT.
AH = 09H
DS:DX = Apuntador a una cadena de caracteres terminada con el simbolo
$
Interrupciones
Int 16h
Lee un carcter del teclado
Ejemplo:
Funcion 00H
Enva una cadena de caracteres al dispositivo de salida estndar STDOUT.
llamada AH = 00H
Retorno AH= Cdigo de escaneo del teclado
AL= Valor ASCII del carcter
Ejemplo de llamada
Mov AH,0
Int 16h
registro, registro
registro, memoria
memoria, registro
memoria, valor inmediato
registro, valor inmediato
memoria, acumulador
acumulador, memoria
Registro de segmento, memoria
registro, registro de segmento
registro de segmento, memoria
memoria, registro de segmento
Instruccin Xlat
Xlat es una instruccin que se utiliza para trabajar con tablas (o
arreglos). Se utilizan los registros AL y BX.
La instruccin xlat reemplaza el valor de AL por un nuevo valor
tomado de la tabla y el registro BX contiene la direccin del
primer elemento de la tabla.
Ejemplo:
Tabla DB ABCEDEFGHIJK
.
Mov Bx, Offset Tabla
Mov AL, 3
Mov DL,AL ; Prepara dato para mostrar por pantalla
Mov AH,2 ; Funcin 2 de la int 21h. Donde DL debe tener
carcter a desplegar.
Int 21h
; Se muestra por pantalla el tercer carcter de la tabla
Instruccin Loop
Loop es una instruccin cuya funcin es realizar un bucle.
trabaja en conjunto con el registro CX, donde cx
contiene el numero de repeticiones que se debe realizar.
Mov CX,5
Mov Ax,1
Programa:
add ax,1
loop Programa
Rutinas, saltos
Las rutinas son secuencias o bloques de cdigo que pueden
reutilizarse. Estas rutinas son invocadas por la instruccin
CALL.
Existen dos tipos de instrucciones de salto o alteracin del flujo
de ejecucin.
La instruccin jmp altera el flujo de ejecucin enviando el
control en forma incondicional a la direccin indicada.
Las instrucciones de salto condicional basan su bifurcacin en el
estatus que tengan ciertas banderas del registro
correspondiente. Ejemplo.. Jnz (salta si el resultado es <> 0)
y jz (salta si el resultado es cero)
Ejemplo de Rutinas
. .model small
.data
.stack
.code
Inicio:
mov cx,5
call ciclo
mov ah,0
int 16h
ciclo:
add al,1
loop ciclo
ret
End inici
Ejemplo de Saltos
.model small
.data
.stack
.code
Inicio:
mov cx,5
cmp cx,5
jz ciclo
ciclo:
add al,1
loop ciclo
mov ah,0
int 16h
End inicio