You are on page 1of 31

PORTADA

INTRODUCCIN
LENGUAJE ENSAMBLADOR
El lenguaje ensamblador como cualquier lenguaje de
programacin es un conjunto de palabras que le indican al
ordenador lo que tiene que hacer. Sin embargo la diferencia
fundamental es que cada instruccin escrita en lenguaje
ensamblador tiene una correspondencia exacta con una
operacin en el procesador.

INDICE
Contenido
INTRODUCCIN................................................................................................... 1
INDICE................................................................................................................. 2
IMPORTANCIA DE LA PROGRAMACION EN LENGUAJE ENSAMBLADOR.................4
EL PROCESADOR Y SUS REGISTROS INTERNOS..................................................4
LA MEMORIA PRINCIPAL (RAM)............................................................................ 5
CONCEPTO DE INTERRUPCIONES........................................................................6
Una interrupcin es una situacin especial que suspende la ejecucin de un
programa de modo que el sistema pueda realizar una accin para tratarla. Tal
situacin se da, por ejemplo, cuando un perifrico requiere la atencin del
procesador para realizar una operacin de E/S...................................................6
CONCEPTO DE INTERRUPCIONES........................................................................7
LLAMADAS A SERVICIOS DEL SISTEMA................................................................8
MODOS DE DIRECCIONAMIENTO DE DATOS........................................................9
PROCESO DE ENSAMBLADOR Y LIGADO............................................................9
DESPLEGADO DE MENSAJES EN EL MONITOR...................................................10
REGISTROS DE PROPOSITO GENERAL...............................................................11
REGISTROS DE SEGMENTO............................................................................... 12
REGISTRO DE BANDERAS.................................................................................. 13
REGISTROS Y MOVIMIENTO............................................................................... 15
REGISTROS Y MOVIMIENTO............................................................................... 16
TRANSFERENCIA DE DATOS............................................................................... 17
CONTROL DE BUCLES (INSTRUCCIONES SIMPLES)............................................18
INSTRUCCIONES DE PRUEBA, COMPARACIN Y SALTOS....................................19
INSTRUCCIONES DE LLAMADO Y RETORNO DE SUBRUTINAS............................20
INSTRUCCIONES ARITMTICAS..........................................................................20
INSTRUCCIONES LGICAS................................................................................. 21
INSTRUCCIONES DE DESPLAZAMIENTO, ROTACIN Y ADEUDOS. BSICAMENTE
PERMITEN MULTIPLICAR Y DIVIDIR POR POTENCIAS DE 2..................................22
2

INSTRUCCIONES DE PILA................................................................................... 22
INSTRUCCIONES DE CONTROL DEL MICROPROCESADOR.................................22
INSTRUCCIONES DE INTERRUPCIN..................................................................23
INSTRUCCIONES USADAS PARA COMPARAR DOS ENTEROS SIN SIGNO.............23
INSTRUCCIONES USADAS PARA COMPARAR DOS ENTEROS CON SIGNO:..........24
INSTRUCCIONES USADAS SEGN EL ESTADO DE BANDERAS............................24

IMPORTANCIA DE LA PROGRAMACION EN
LENGUAJE ENSAMBLADOR
La
importancia
del
lenguaje ensamblador radica
principalmente
que
se
trabaja
directamente
con
el microprocesador; por lo cual se debe de conocer el
funcionamiento interno de este, tiene la ventaja de que en l
se puede realizar cualquier tipo de programas que en los
lenguajes de alto nivel no lo pueden realizar. Otro punto sera
que los programas en ensamblador ocupan menos espacio
en memoria.

EL PROCESADOR Y SUS REGISTROS


INTERNOS
DEFINICIN DE REGISTROS.
Un registro es una memoria de alta velocidad y poca
capacidad, integrada en el microprocesador, que permite
guardar transitoriamente y acceder a valores muy usados,
generalmente en operaciones matemticas.
FUNCIN DE LOS REGISTROS:
Los registros estn en la cumbre de la jerarqua de memoria, y
son la manera ms rpida que tiene el sistema de almacenar
datos. Los registros se miden generalmente por el nmero de
bits que almacenan; por ejemplo, un "registro de 8 bits" o un
"registro de 32 bits.
La CPU contiene un conjunto de localidades de
almacenamiento temporal de datos de alta velocidad llamada
registro. Algunos de los registros estn dedicados al control, y
solo la unidad de control tiene acceso a ellos. Los registros
restantes son los registros de uso general y el programador es
el usuario que tiene acceso a ellos.
4

Algunos registros bsicos:


Dentro del conjunto bsico de registros de control se deben
incluir a los siguientes:
Contador de programa (PC).
Registro de direcciones de la memoria (MAR).
Registro de datos (RD).
Registro de instrucciones (IR).
Palabra de estado de programa (PSW).

LA MEMORIA PRINCIPAL (RAM)


Este tipo de memoria puede ser borrada y grabada las veces
que deseemos. La nica desventaja es que la informacin
grabada en ella solo puede ser utilizada mientras tenga
energa. En cuanto se corte la alimentacin, los datos que se
grabaron se borrarn instantneamente. Se usan solo como
almacenamiento temporal.

La RAM tiene dos modos de operacin posibles:

RAM esttica: flips-flops internos que almacenan


informacin binaria. La informacin almacenada es vlida
mientras la unidad est encendida.

RAM dinmica: conjunto de pequeos condensadores que


pueden estar cargados o descargados. Debe refrescarse
cada pocos milisegundos para impedir la prdida de
informacin. Tienen mayor capacidad que las estticas.

CONCEPTO DE INTERRUPCIONES
Una interrupcin es una situacin especial que suspende la
ejecucin de un programa de modo que el sistema pueda
realizar una accin para tratarla. Tal situacin se da, por
ejemplo, cuando un perifrico requiere la atencin del
procesador para realizar una operacin de E/S.
Las interrupciones constituyen quiz el mecanismo ms
importante para la conexin del microcontrolador con el
mundo exterior, sincronizando la ejecucin de programas con
acontecimientos externos.

PASOS PARA EL PROCESAMIENTO

1. Terminar la ejecucin de la instruccin mquina en curso.

2. Salva el valor de contador de programa, IP, en la pila, de


manera que en la CPU, al terminar el proceso, pueda seguir
ejecutando el programa a partir de la ltima instruccin.

3. La CPU salta a la direccin donde est almacenada la rutina


de servicio de interrupcin (ISR, Interrupt Service Routine) y
ejecuta esa rutina que tiene como objetivo atender al
dispositivo que gener la interrupcin.

4. Una vez que la rutina de la interrupcin termina, el


procesador restaura el estado que haba guardado en la pila
en el paso 2 y retorna al programa que se estaba usando
anteriormente.

CONCEPTO DE INTERRUPCIONES

EJEMPLOS DE INTERRUPCIONES

int
int
int
int
int
int
int
int
int
int
int
int
int

01h-->un solo paso


02h-->interrupcin no enmascarable
03h--> punto de interrupcin
04h-->desbordamiento
05h-->impresin de pantalla
08h-->Cronometro
15h-->Servicios del sistema
16h-->Funciones de entrada del teclado
18h-->Entrada con el Basic de Rom
19h-->Cargador de arranque
1Ah-->Leer y establecer la hora
1Bh-->Obtener el control con una interrupcin de teclado.
2oh-->Terminar un programa

int 33h->Funciones del Ratn

10

LLAMADAS A SERVICIOS DEL SISTEMA


Una llamada al sistema es un mtodo o funcin que puede
invocar un proceso para solicitar un cierto servicio al sistema
operativo. Dado que el acceso a ciertos recursos del sistema
requiere la ejecucin de cdigo en modo privilegiado, el
sistema operativo ofrece un conjunto de mtodos o funciones
que el programa puede emplear para acceder a dichos
recursos. En otras palabras, el sistema operativo acta como
intermediario, ofreciendo una interfaz de programacin (API)
que el programa puede usar en cualquier momento para
solicitar recursos gestionados por el sistema operativo.

Algunos ejemplos de llamadas al sistema son las siguientes:

Time: que permite obtener la fecha y hora del


sistema.

Write: que se emplea para escribir un dato en un


cierto dispositivo de salida, tales como una pantalla
o un disco magntico.

Read: que es usada para leer de un dispositivo de


entrada, tales como un teclado o un disco
magntico.

11

Open: que es usada para obtener un descriptor de


un fichero del sistema, ese fichero suele pasarse a
write.

12

MODOS DE DIRECCIONAMIENTO DE DATOS


Un modo de direccionamiento especifica la forma de calcular
la direccin de memoria efectiva de un operando mediante el
uso de la informacin contenida en registros y / o constantes,
contenida dentro de una instruccin de la mquina o en otra
parte.

Imagen. Modos de direccionamiento


de datos

PROCESO DE ENSAMBLADOR Y LIGADO


El programa utiliza un editor de texto para crear un archivo de
texto ASCII, conocido como archivo de cdigo fuente.

El ensamblador lee el archivo de cdigo fuete y produce un


archivo de cdigo objeto, una traduccin del programa a
lenguaje mquina. De manera opcional, produce un archivo
de listado. Si ocurre un error, el programador debe regresar al
paso 1 y corregir el programa.

El enlazador lee el archivo de cdigo objeto y verifica si el


programa contiene alguna llamada a los procedimientos en
13

una biblioteca de enlace. El enlazador copia cualquier


procedimiento requerido de la biblioteca de enlace, lo
combina con el archivo de cdigo objeto y produce el archivo
ejecutable. De manera opcional, el enlazador puede producir
un archivo de mapa.

La herramienta cargador (loader) del sistema operativo lee el


archivo ejecutable y lo carga en memoria, y bifurca la CPU
hacia la direccin inicial del programa, para que ste empiece
a ejecutarse.

DESPLEGADO DE MENSAJES EN EL
MONITOR

Todos los grficos y el texto que se muestran en el monitor se


escriben en la RAM de visualizacin de video, para despus
enviarlos al monitor mediante el controlador de video. El
controlador de video es en s un microprocesador de propsito
especial, que libera a la CPU principal del trabajo de controlar
el hardware de video.

Un monitor de pantalla de cristal lquido (LCD) digital


directo recibe un flujo de bits digitales directamente desde
el controlador de video, y no requiere del barrido de trama.

14

Imagen. Desplegado de mensajes en el monitor

REGISTROS DE PROPOSITO GENERAL


REGISTRO AX.
El registro AX, el acumulador principal, es utilizado para
operaciones que implican entrada/salida y la mayor parte de
la aritmtica. Por ejemplo, las instrucciones para multiplicar,
dividir y traducir suponen el uso del AX. Tambin, algunas
operaciones generan cdigo ms eficiente si se refieren al AX
en lugar de a los otros registros.
REGISTRO BX.
El BX es conocido como el registro base ya que es el nico
registro de propsito general que puede ser ndice para
direccionamiento indexado. Tambin es comn emplear el BX
para clculos.
REGISTRO CX.

15

El CX conocido como el registro contador puede contener un


valor para controlar un nmero de veces que un ciclo se repite
o un valor para conocimiento de bits, hacia la derecha o hacia
la izquierda. El CX tambin es usado para muchos clculos.
REGISTRO DX.
El DX es conocido como el registro de datos.
operaciones de entrada/salida requieren uso,
operaciones de multiplicacin y divisin con cifras
suponen al DX y al AX trabajando juntos. Puede
registros de propsitos para suma y resta de 8,16, 32

Algunas
y las
grandes
usar los
bits .

REGISTROS DE SEGMENTO
REGISTRO CS.
El DOS almacena la direccin inicial del segmento de cdigo
de un programa en el registro CS. Esta direccin de segmento,
ms un valor de desplazamiento en el registro apuntador de
instruccin (IP), indica la direccin de una instruccin que es
buscada para su ejecucin.
REGISTRO DS.
La direccin inicial de un segmento de datos de programa es
almacenada en el registro DS. En trminos sencillos, esta
direccin, ms un valor de desplazamiento en una instruccin,
16

genera una referencia a la localidad de un byte especifico en


el segmento de datos.
REGISTRO SS.
El registro SS permite la colocacin en memoria de una pila,
para almacenamiento temporal de direcciones y datos. El DOS
almacena la direccin de inicio del segmento de pila de un
programa en el registro SS. Esta direccin de segmento, ms
un valor de desplazamiento en el registro del apuntador de
pila (SP), indica la palabra actual en la pila que est siendo
direccionada.
REGISTROS ES.
Algunas operaciones con cadenas de caracteres (datos de
caracteres) utilizan el registro extra de segmento para
manejar el direccionamiento de memoria. En este contexto, el
registro ES esta asociado con el registro DI (ndice). Un
programa que requiere el uso del registro ES puede
inicializarlo con una direccin de segmento apropiada.
REGISTROS FS Y GS.
Son registros extra de segmento en los procesadores 80386 y
posteriores.

REGISTRO DE BANDERAS
OF (OVERFLOW, DESBORDAMIENTO).
Indica desbordamiento de un bit de orden alto (ms a la
izquierda) despus de una operacin aritmtica.
DF (DIRECCIN).

17

Designa la direccin hacia la izquierda o hacia la derecha para


mover o comparar cadenas de caracteres.
IF (INTERRUPCIN).
Indica que una interrupcin externa, como la entrada desde
el teclado, sea procesada o ignorada.
TF (TRAMPA).
Permite la operacin del procesador en modo de un paso. Los
programas depuradores, como el DEBUG, activan esta
bandera de manera que usted pueda avanzar en la ejecucin
de una sola instruccin a un tiempo, para examinar el efecto
de esa instruccin sobre los registros de memoria.
SF (SIGNO).
Contiene el signo resultante de una operacin aritmtica (0 =
positivo y 1 = negativo).
ZF (CERO).
Indica el resultado de una operacin aritmtica o de
comparacin (0 = resultado diferente de cero y 1 = resultado
igual a cero).

AF (ACARREO AUXILIAR).
Contiene un acarreo externo del bit 3 en un dato de 8 bits
para aritmtica especializada.
PF (PARIDAD).
18

Indica paridad par o impar de una operacin en datos de 8


bits de bajo orden (ms a la derecha).
CF (ACARREO).
Contiene el acarreo de orden ms alto (ms a la izquierda)
despus de una operacin aritmtica; tambin lleva el
contenido del ultimo bit en una operacin de corrimiento o de
rotacin. Las banderas estn en el registro de banderas en las
siguientes posiciones:

19

REGISTROS Y MOVIMIENTO
BYTE
Los
datos
en
Byte
se
almacenan en dos formas enteros con signo o sin signo. Se
ver la nica diferencia entre las formas con signo y sin signo
es la ponderacin en la mxima posicin de bit hacia la
izquierda. En la forma con signo, el bit ms a la izquierda en
negativo y en la forma sin signo, en positivo o sin signo.

128

64

32
2

-128

64

16

32
2

16

20

MSB

LSB

REGISTROS Y MOVIMIENTO
PALABRA
Una palabra 16 bits se forma con 2 bytes de datos. El byte
menos significativo se almacena siempre en la localidad de
memoria que tenga el nmero ms bajo y el byte, ms
significativo, en la ms alta.
15

Most

Less
Palabra

21

El formato de doble palabra se utiliza para almacenar


nmeros de 32 bits (4 bytes), que son el producto despus de
la multiplicacin o el dividendo antes de la divisin.

MSB
31
0

LSB
25

24

16

15

Doble palabra

TRANSFERENCIA 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
segmentacin. 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 direccin efectiva
LDS carga el segmento de datos
22

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 ms elemental de
nuestros programas. Un bucle es un bloque de cdigo que se
ejecuta varias veces. Hay 4 tipos de bucles bsicos:
Bucles sin fin
Bucles por conteo
Bucles hasta
Bucles mientras
Las instrucciones de control de bucles son las siguientes:
INC incrementar
DEC decrementar
23

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,
COMPARACIN Y SALTOS
Este grupo es una continuacin 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
24

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 ARITMTICAS
Estas instrucciones son las que realiza directamente el
8086/8088 a. A.Grupo de adicin:
25

ADD suma
ADC suma con acarreo
AAA ajuste ASCII para la suma
DAA ajuste decimal para la suma

B. Grupo de sustraccin:

SUB resta
SBB resta con acarreo negativo
AAS ajuste ASCII para la resta
DAS ajuste decimal para la resta

C. Grupo de multiplicacin:
MUL multiplicacin
IMUL multiplicacin entera
AAM ajuste ASCII para la multiplicacin
D. Grupo de divisin:
DIV divisin
IDIV divisin entera
AAD ajuste ASCII para la divisin
E. Conversiones:
CBW pasar octeto a palabra
CWD pasar palabra a doble palabra
NEG negacin
F. Tratamiento de cadenas:
Permiten el movimiento, comparacin o bsqueda rpida en
bloques de datos:

MOVC transferir carcter de una cadena


MOVW transferir palabra de una cadena
CMPC comparar carcter de una cadena
CMPW comparar palabra de una cadena
26

SCAC buscar carcter de una cadena


SCAW buscar palabra de una cadena
LODC cargar carcter de una cadena
LODW cargar palabra de una cadena
STOC guardar carcter de una cadena
STOW guardar palabra de una cadena
REP repetir
CLD poner a 0 el indicador de direccin
STD poner a 1 el indicador de direccin

INSTRUCCIONES LGICAS
Son operaciones bit a bit que trabajan sobre octetos o
palabras completas:

NOT negacin
AND producto lgico
OR suma lgica
XOR suma lgica exclusiva

INSTRUCCIONES
DE
DESPLAZAMIENTO,
ROTACIN Y ADEUDOS. BSICAMENTE
PERMITEN MULTIPLICAR Y DIVIDIR POR
POTENCIAS DE 2
SHL, SAL desplazar a la izquierda (desplazamient
o aritmtico)
SHR desplazar a la derecha
SAR desplazamiento aritmtico a la derecha
ROL rotacin a la izquierda ROR rotacin a la
derecha
RCL rotacin con acarreo a la izquierda
RCR rotacin con acarreo a la derecha
27

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 conjuncin con otros procesadores:

NOP no operacin
HLT parada WAIT espera
LOCK bloquea
ESC escape

INSTRUCCIONES DE INTERRUPCIN
STI poner a 1 el indicador de interrupcin
CLI borrar el indicador de interrupcin
INT interrupcin
INTO interrupcin por capacidad excedida
(desbordamiento)
IRET retorno de interrupcin

28

INSTRUCCIONES USADAS PARA COMPARAR


DOS ENTEROS SIN SIGNO
JA o JNBE. Salta si est arriba o salta si no est abajo o si
no es igual (jump if above o jump if not below or equal)
El salto se efecta si la bandera ce CF = 0 o si la bandera
de ZF = 0
JAE o JNB. Salta si est arriba o es igual o salta si no est
abajo (jump if above or equal o jump if not below) El
salto se efecta si CF = 0.
JB o JNAE. Salta si est abajo o salta si no est arriba o si
no es igual (jump if below or equal o jump if not above or
equal) El salto se efecta si CF = 1. d. JBE o JNA. Salta si
est abajo o si es igual o salta si no est arriba (jump if
below or equal o jump if not above) El salto se efecta si
CF = 1.
JE o JZ. Salta si es igual o salta si es cero (jump equal o
jump if zero) El salto se efecta si ZF = 1 (tambin se
aplica a comparaciones de enteros con signo) f. JNE o
JNZ. Salta si no es igual o salta si no es cero (jump if not
equal o jump if not zero) El salto se efecta si ZF = 0
(tambin se aplica a comparaciones de enteros con
signo)

INSTRUCCIONES USADAS PARA COMPARAR


DOS ENTEROS CON SIGNO:
JG o JNLE. Salta si es ms grande o salta si no es menor o
igual (jump if greater o jump if not less or equal) El salto
se efecta si ZF = 0 o OF = SF.
29

JGE o JNL. Salta si es ms grande o igual o salta si no es


menor que (jump if greater or equal o jump if not less) El
salto se efecta si SF = OF.
JL o JNGE. Salta si es menor que o salta si no es mayor o
igual (jump if less o jump if not greater or equal) El salto
se efecta si SF = OF.
JLE o JNG. Salta si es menor o igual o salta si no es ms
grande (jump if less or equal o jump if not greater) El
salto se efecta si ZF = 1 o SF = OF.

INSTRUCCIONES USADAS SEGN EL


ESTADO DE BANDERAS
JC Salta si hay acarreo (jump if carry) El salto se efecta
si CF = 1.
JNC Salta si no hay acarreo (jump if not carry) El salto se
efecta si CF = 0.
JNO Salta si no hay desbordamiento (jump if not
overflow) El salto se efecta si OF = 0.
JNP o JPO Salta si no hay paridad o salta si la paridad en
non. El salto se efecta si PF = 0. e. JNS Salta si el signo
est apagado (jump if not sign) El salto se efecta si SF
= 0.
JO Salta si hay desbordamiento (jump if overflow) El salto
se efecta si OF = 1. g. JP o JPE Salta si hay paridad o
salta si la paridad es par (jump if parity o jump if parity
even) El salto se efecta si PF = 1. h. JS Salta si el signo
est prendido (jump if sign set) El salto se efecta si SF
= 1.

30