Sei sulla pagina 1di 29

LENGUAJE ENSAMBLADOR

El nico lenguaje que entienden los microprocesadores es el cdigo


mquina formado por ceros y unos del sistema binario.
El lenguaje ensamblador expresa las instrucciones de una forma ms
natural al hombre a la vez que muy cercana al microprocesador, ya que
cada una de esas instrucciones se corresponde con otra en cdigo
mquina.
El lenguaje ensamblador trabaja con nemnicos, que son grupos de
caracteres alfanumricos que simbolizan las rdenes o tareas a realizar.
La traduccin de los nemnicos a cdigo mquina entendible por el
microprocesador la lleva a cabo un programa ensamblador.
El programa escrito en lenguaje ensamblador se denomina cdigo fuente
(*.asm). El programa ensamblador proporciona a partir de este fichero el
correspondiente cdigo mquina, que suele tener la extensin *.hex.

El formato bsicodeuna
s e n t e n c ia e n l e n g u a j e n s a m b l a d o r e s :

etiqueta
comentario
OEl

operacin

operando

campo comentario se utiliza para propsitos de documentacin y es opcional.


etiqueta: Una etiqueta debe comenzar con un carcter alfabtico y puede contener
hasta 31 caracteres, incluyendo:
Letras de la A a la Z
Nmeros del 0 al 9
Los smbolos especiales: - $ . @ %
No se puede utilizar un nombre que coincida con una palabra reservada o
directiva del ensamblador. Si el nombre incluye un punto, entonces el punto debe ser el primer
carcter.
OCampo operacin: Contiene el nemotcnico de la instruccin, que es de 2 a 6 caracteres.
OCampo operando: Contiene la posicin o posiciones donde estn los datos que van a ser manipulados
Opor la instruccin.
OCampo comentario: Se utiliza para documentar el cdigo fuente del ensamblador. Debe separarse
Odel ltimo campo por al menos un espacio e iniciar con ;.
Cuando inicia un comentario en una lnea sta deber tener en la primera columna el carcter ;.
OCampo

EJEMPLO DE PROGRAMA
.MODEL SMALL
.CODE
PRINT _A_J PROC
MOV DL, A ; inicia con el carcter A
MOV CX, 10 ; imprime 10 caracteres
PRINT _LOOP:
CALL WRITE _CHAR ; imprime carcter
INC DL ; siguiente carcter del alfabeto
LOOP PRINT _LOOP ; continua
MOV AH, ACh ; retorna al DOS
INT 21h
PRINT _A_J ENDP
WRITE _CHAR PROC
MOV AH, 02 ; activa el cdigo de la funcin para sacar CHAR
INT 21h ; imprime el carcter que est en DL
RET : retorna de este procedimiento
WRITE _CHAR ENDP
END PRINT _A_J

PROC y ENDP son directivas para definir procedimientos. PROC define el inicio y
ENDP define el final.

En este ejemplo, tenemos 2 procedimientos; por lo tanto, necesitamos indicarle al ensamblador


cul debe usar como el procedimiento principal (donde debe el microprocesador iniciar la ejecucin
de nuestro programa) La directiva END indica al ensamblador cual es el procedimiento principal. El
procedimiento principal puede estar en cualquier lugar del programa.

INSTRUCCIONES PARA
OBTENER DIRECCIONES
LEAdestino,origen(Load Effective Address, cargar
direccin efectiva)
Carga la direccin efectiva del
operandoorigenendestino.
LEA AX,[BX+DI+2], calculara la suma BX+DI+2 e
introducira el resultado en AX (y no elcontenidode la
direccin apuntada por BX+DI+2, pues eso sera un
MOV).
Como destino no se puede usar un registro de segmento.
Si el destino es de 32 bits, el offset que se carga es de
este tipo. En modo protegido slo usaremos este ltimo,
pues offsets de 16 bits carecern de sentido.

LDS destino,origen (Load pointer using DS, cargar


puntero usando DS)
Esta instruccin y sus variantes ahorran mucho tiempo e
instrucciones en la carga de punteros. origen ser
siempre memoria conteniendo un puntero, es decir, un
segmento y un desplazamiento. La primera palabra
corresponde al offset y la segunda al segmento. El offset
se carga en destino y el segmento en DS. Si estamos
trabajando en un modo de 32 bits el desplazamiento
ser de 32 bits y el segmento de 16. Existen ms
instrucciones, una por cada registro de segmento:
LES,LFS,LGS y LSS (esta ultima se debe de tratar con
mucho cuidado)

Load-effective address
instructions

STRING DATA TRANSFERS


Hay cinco instrucciones de
transferencia de datos de cadena:
-LODS (LOaD String)
-STOS
-MOVS
-INS
-OUTS

LODS (LOaD String)

La instruccin LODS (LOaD String), en sus versiones


LODSB y LODSW, se usa para cargar un byte o palabra
desde la direccin indicada por DS:SI en AL o AX. Si el
flag de direccin se encuentra a cero, SI se incrementa
en 1 o 2, y si est a 1 se decrementa en 1
o 2. De esta forma puede recorrerse la memoria en uno
u otro sentido.

Para poder utilizar LODS es necesario comprender el


flag de direccin.
Si el DF=0 SI se incrementa en uno para LODSB y dos
para LODSW (apunta al siguiente byte/palabra).
Si DF=1 se lee el array en direccin inversa, es decir, SI
se decrementa.
As, por ejemplo, podemos ir cargando en el acumulador
el contenido de un array a lo largo de un ciclo para
operar con l.

Forms of the
LODS instruction.

STOS (STOre String)


STOSBySTOSW(STOre String, Byte/Word) funcionan con
el mismo principio en cuanto al flag de direccin, y lo que
hacen es almacenar en ES:DI(EDI) el contenido del
acumulador (AL o AX segn cada caso). De manera anloga
podemos usarSTOSoperando.

Forms of the
STOS instruction.

MOVS (MOV String)


MOVSByMOVSW(MOV String, Byte/Word) van ms all;
mueven el byte o palabra en DS:SI a ES:DI. Vemos ahora
que SI es elSource Indexo ndice fuente, y DI
elDestination Indexo ndice destino. Tras el movimiento
de datos SI y DI son incrementados o decrementados
siguiendo la lgica descrita para LODS. Es admisible
adems la instruccin MOVSdestino,origen(ambos
operandos en memoria). El ensamblador emplea los
operandos para determinar si se trata de un MOVSB o
MOVSW al codificar la instruccin correspondiente;
adems el operando origen puede llevar un prefijo de
segmento (no as el destino) en cuyo caso se emplea se
registro de segmento como origen

INS (Input String)


Instruccin no disponible en los microprocesadores
8086/8088 transfiere un byte, palabra o doble
palabra de datos de un dispositivo de E / S en la
posicin de memoria del segmento extra abordado
por el registro DI. La direccin de E / S est
contenida en el registro DX. Esta instruccin es til
para la introduccin de un bloque de datos desde
un dispositivo de E / S externa directamente en la
memoria

Forms of the
INS instruction.

OUTS (OUTput String)


Instruccin no disponible en los microprocesadores
8086/8088 hace transferencias de un byte, palabra
o doble palabra de datos de la direccin de
ubicacin de memoria del segmento de datos por el
SI a un dispositivo de E / S. El dispositivo de E / S
est dirigida por el registro DX como lo es con la
instruccin INS.

Forms of the
OUTS instruction.

4.5- VARIAS INSTRUCCIONES DE


TRANSFERENCIA DE DATOS

Instruccin Intercambio (exchange)- XCHG: intercambia el


contenido de un registro con el contenido de cualquier otro
registro o memoria de localizacin.
No puede intercambiar registros de segmento o datos de
memoria a la memoria.

Instrucciones LAHF and SAHF: Las instrucciones


LAHF y SAHF rara vez se utilizan, ya que se han
diseado como puente de instrucciones. Estas
instrucciones permiten al 8085 (y anteriores) sea
traducido en software 8086 por un programa de
traduccin.
La instruccin LAHF transfiere los 8 bits de la derecha
de la bandera de registro en el registro AH.
La instruccin SAHF transfiere el registro AH en los 8
bits de la derecha de la bandera de registro.

Instruccin Traducir (Translate)-XLAT: Convierte


el contenido del registro AL en un nmero guardado
en una tabla de memoria. Esta instruccin realiza la
tcnica de tabla de consulta directa a menudo se
utiliza para convertir un cdigo a otro.
Una instruccin XLAT aade primero el contenido de
AL a BX para formar una direccin de memoria
dentro del segmento de datos. A continuacin, copia
el contenido de esta direccin en AL. Esta es la nica
instruccin que aade un nmero de 8 bits a un
nmero de 16 bits.

Instruccin IN and OUT: A menudo, la instruccin que


se almacena en ROM tiene su nmero de puerto fijo de forma
permanente debido a la naturaleza de la memoria de slo
lectura. Una direccin de puerto fijo almacenado en la
memoria RAM se puede modificar, pero tal modificacin no se
ajusta a las buenas prcticas de programacin.

Instruccin MOVSX and MOVZX: MOVSX (move and signextend) and MOVZX (move and zero-extend). Estas instrucciones
mueven datos, y al mismo tiempo lo extienden ya sea signo o cero.

Cuando se extiende cero un nmero, la parte ms significativa se llena con


ceros. Por ejemplo, si un 34H 8-bit es cero extendi-en un nmero de 16
bits, se convierte en 0034H. Zero-extensin se utiliza a menudo para
convertir nmeros sin signo de 8 16 bits en nmeros sin signo de 16 o 32
bits mediante la instruccin MOVZX.

Un nmero es signo extendido cuando su bit de signo se copia en la parte


ms significativa. si un 84H de 8 bits se extendi firmar-en un nmero de 16
bits, se hace FF84H. El bit de signo de un 84H es un 1, que se copia en la
parte ms significativa del resultado de signo extendido. Extensin del signo
es la ms utilizada para convertir de 8 16 bits nmeros con signo a 16 o
32 bits con signo nmeros mediante la instruccin MOVSX.

Instruccin BSWAP: (Byte Swap) toma el contenido de


cualquier registro de 32 bits e intercambia el primer byte
con el cuarto, y el segundo con el tercero.
Por ejemplo, la instruccin BSWAP EAX EAX con swaps =
00112233H bytes en EAX, resultando en EAX =
33221100H. Observe que el orden de los 4 bytes se
invierte por esta instruccin. Esta instruccin se utiliza
para convertir los datos entre big y little endian. En la
operacin de 64 bits para el Pentium 4, los 8 bytes del
operando seleccionado se intercambian.

Instruccin CMOV: (Conditional move) La clase de


instruccin CMOV (movimiento condicional) es nueva
para los conjuntos de instrucciones Pentium Pro-Core2.
Hay muchas variaciones de la instruccin CMOV.
Estas instrucciones mueven los datos slo si la
condicin es verdadera.

Debido a que esta es una nueva instruccin, no se


puede utilizar con el ensamblador a menos que el
switch .686 se aada al programa

4.6- Prefijo reemplazo de


segmento (override prefix)
Que puede aadirse a casi cualquier instruccin en
cualquier modo de direccionamiento de memoria permite
que el programador se desve del segmento
predeterminado.
Es un byte adicional que aade la parte delantera de una
instruccin para seleccionar un registro de segmento
alternativo. Acerca de las nicas instrucciones que no
pueden tener el prefijo son las instrucciones de salto y de
llamadas que deben utilizar el registro de segmento de
cdigo para la generacin de direcciones. El reemplazo de
segmento tambin se utiliza para seleccionar los
segmentos FS y GS en el 80 386 a travs de los
microprocesadores Core2.

Preguntas
O Cuales son las 4 partes que integran una

instruccin en lenjuage ensamblador?


O Se pueden usar palabras reservadas en el campo
etiqueta?
O Cmo influye en DF (Direction Flag) en las
instrucciones de transferencia de cadenas?
O Cul es la funcin de la instruccin de intercambio
(XCHG)?
O Qu sucede si las condiciones son falsas en CMOV?
O Qu realiza la instruccin BSWAP?
O ?
O ?

Bibliografia

http://www.dte.us.es/tec_inf/itis/estr_comp/docweb
/tema4/tema4ec-3.pdf
http://azul2.bnct.ipn.mx/computacion5/Lenguaje
%20ensamblador%20del
%20microprocesador/Lenguaje%20ensamblador
%20del%20microprocesador.pdf
http://www.unioviedo.es/ate/alberto/TEMA3Ensamblador.pdf

Potrebbero piacerti anche