Resumen de Lenguaje ensamblador del procesador


REGISTROS INTERNOS DEL MICROPROCESADOR

La Unidad Central de Proceso (CPU, por sus siglas en inglés) tiene 14 registros in-ternos cada uno de 16 bits. Los primeros cuatro, AX, BX, CX y DX, son de uso general y se pueden usar también como registros de 8 bits. Es decir, AX se puede dividir en AH y AL (AH es el byte alto, high, y AL es el byte bajo, low) Lo mismo es aplicable a los otros tres (BX en BH y BL, CX en CH y CL y DX en DH y DL)

Estos son los únicos registros que pueden usarse de modo dual (en 8 o 16 bits)

Los registros de la CPU son conocidos por sus nombres propios, que son:

·    AX                (acumulador)
·         BX(registro base)

·         CX(registro contador)

·         DX(registro de datos)

·         DS(registro del segmento de datos)

·         ES(registro del segmento extra)

·         SS(registro del segmento de pila)

·         CS(registro del segmento de código)

·         BP(registro de apuntadores base)

·    SI                   (registro índice fuente)
·    DI                  (registro índice destino)
·         SP(registro del apuntador de pila)

·    IP                   (registro del apuntador de siguiente instrucción)
·    F                    (registro de banderas)


Significado de los bits:
·
Overflow



NV = no hay desbordamiento





OV = Sí lo hay
·
Direction



UP = hacia adelante





DN = hacia atrás
·
Interrupts



DI = desactivadas





EI = activadas
·
Sign



PL = positivo





NG = negativo
·
Zero



NZ = no es cero
·




ZR = sí lo es
Auxiliary Carry


NA = no hay acarreo auxiliar
·




AC = hay acarreo auxiliar
Parity



PO = paridad non





PE = paridad par
·
Carry



NC = no hay acarreo





CY = sí lo hay


Significado de los bits:
·
Overflow



NV = no hay desbordamiento





OV = Sí lo hay
·
Direction



UP = hacia adelante





DN = hacia atrás
·
Interrupts



DI = desactivadas





EI = activadas
·
Sign



PL = positivo





NG = negativo
·
Zero



NZ = no es cero
·




ZR = sí lo es
Auxiliary Carry


NA = no hay acarreo auxiliar
·




AC = hay acarreo auxiliar
Parity



PO = paridad non





PE = paridad par
·
Carry



NC = no hay acarreo





CY = sí lo hay


CONJUNTO DE INSTRUCCIONES (Microprocesadores 8086/8088)

Se pueden clasificar en los siguientes grupos:

Instrucciones de Transferencia de Datos.

Estas instrucciones mueven datos de una parte a otra del sistema; desde y hacia la me-moria principal, de y a los registros de datos, puertos de E/S y registros de segmentación.

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,LOOPNErealizar 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 co-mo 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


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




Iteraciones.

Con los saltos condicionales y no condicionales se pueden crear estructuras de iteración bastante complejas, aunque existen instrucciones específicas para ello tal como loop.

Esta instrucción es muy útil cuando se va a efectuar cierto bloque de instruccio-nes un número finito de veces. He aquí un ejemplo:

CUENTA:            DW, 100

.
..

MOV                     CX, CUENTA

ITERA:
.

.

LOOP                   ITERA

El bloque de instrucciones que se encuentra entre la etiqueta ITERA y la instruc-ción loop será ejecutado hasta que el registro CX sea igual a 0. Cada vez que se eje-cuta la instrucción loop, el registro CX es decrementado en 1 hasta llegar a 0. Esta ins-trucción tiene la limitante de que debe encontrarse en el rango de +128 a –127 (máxi-mo número de bytes entre ITERA y loop)

Iteraciones condicionales

Existen otras dos variantes de la instrucción loop. Las instrucciones loope y loopz decrementan CX e iteran si CX = 0 y ZF = 1, mientras que loopne y looppnz

iteran si CX ¹ 0 y ZF ¹ 0. Un punto importante es que al decrementarse CX las bande-ras NO RESULTAN AFECTADAS. Por lo tanto, le corresponde a usted afectarlas dentro del bloque de iteración.




FORMATO DE LAS INSTRUCCIONES

Cada instrucción en lenguaje ensamblador del 8088 está compuesta de 4 cam-

pos:

etiqueta operación  operando comentario

El campo comentario se utiliza para propósitos de documentación y es opcional.

Campo etiqueta: Una etiqueta debe comenzar con un carácter alfabético y puede contener hasta 31 caracteres, incluyendo:

·               Letras de la A a la Z

·               Números del 0 al 9

·               Los símbolos 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 pun-to debe ser el primer carácter.

Campo operación: Contiene el nemotécnico de la instrucción, que es de 2 a 6 caracteres.

Campo operando: Contiene la posición o posiciones donde están los datos que van a ser ma-nipulados por la instrucción.

Campo comentario: Se utiliza para documentar el código fuente del ensamblador. Debe sepa-rarse del último campo por al menos un espacio e iniciar con .

Cuando inicia un comentario en una línea ésta deberá tener en la pri-mera columna el carácter .


MODOS DE DIRECCIONAMIENTO Y GENERACIÓN DEL CÓDIGO OBJETO

Generación de la dirección de la instrucción.

Todos los registros internos del 8086/8088 son de 16 bits. El bus de dirección es de 20 bits, por lo que se usa más de un registro interno para generar la dirección de
20  bits.

Los 2 registros usados para la dirección de la instrucción son el IP y el CS. Se combinan en una forma especial para generar la dirección de 20 bits.

dirección de 20 bits = 1610 * CS + IP

Por ejemplo: Si los registros CS e IP contienen los valores:

CS = 1000H
IP   = 0414 H
Campo DATA. Si el registro de destino es de 1 byte, el dato debe estar en el segundo by-

te de la instrucción. Si el destino es de una palabra, el segundo byte de la instrucción son los 8 bits menos significativos (lsb) del dato, el tercer byte de la instrucción son los 8 bits más significativos (MSB) del dato. La siguiente tabla, muestra los nemotécnicos 2 o 3
bytes

NEMOTÉCNICO
CÓDIGO OBJETO
MOV
AX, 568
Instrucción de 3 bytes


B8


68


05
MOV
AL, 56
instrucción de 2 bytes


B0


56

Bit D, MOD y R/M

En este ejemplo, moveremos datos desde memoria o moveremos un registro hacia o desde otro registro. Usaremos una instrucción como:

MOV         AX, BX

Esta instrucción es de 2 bytes porque no nos referimos a memoria. Los bytes aparecerán como lo muestra la Figura E:


1000 10 DW

MOD REG  R/M












1er BYTE



2do BYT E








FIGURA E.

El primer byte contiene los 2 bits menos significativos como DW. El bit W es para word=1 o para byte=0. La D es para indicar si el dato será almacenado en el operando especifi-cado por los campos MOD y R/M (D = 0) o si va a ser almacenado en el registro especifi-cado por el campo REG (D = 1)

La Figura F muestra las asignaciones para MOD y R/M. Note en la descripción de MOD=11, el campo R/M es codificado con un formato de registro. Este formato se mostró en la Figura D.






El ensamblador puede usar archivos fuente que contengan caracteres ASCII estándar. Considere que no todos los procesadores de texto escriben archivos en disco usando solamente los caracteres ASCII estándar. Antes de ensamblar un programa verifique que esté en código ASCII.

Puede ver caracteres extraños en el programa. Muchos procesadores de texto agregan información de formateo adicional en el archivo. El ensamblador los trata como errores. Utilice la versión no documento de su procesador de texto. También se requie-re una línea en blanco después de la instrucción END

Para ensamblar el programa:

A>MASM PROGRAMA;

MICROSOFT ® MACRO ASSEMBLER VERSION 5.10

COPYRIGHT © MICROSOFT CORP 1981, 1988. ALL RIGHTS RESERVED

49822 + 219323 BYTES SYMBOL SPACE FREE

0 WARNING ERRORS
0 SEVERE ERRORS

A>


El ensamblador crea un archivo intermedio *.OBJ grama e información adicional usada por otro programa dor>.

Encadenar al archivo *.OBJ

el cual contiene nuestro pro-llamado LINKER <encadena-


A>LINK ARCHIVO;

Microsoft ® Overlay Linker Version 3.64
copyright © microsoft corp 1983-1988. All rights reserved

LINK : warning L4021: No Stack Segment


Hemos creado nuestro archivo sión *.COM. El archivo EXE2BIN.EXE BIN.

* .EXE. Ahora sí necesitamos crear nuestra ver-del DOS convierte un archivo EXE a un archivo


A>EXE2BIN ARCHIVO ARCHIVO.COM

A>
Etiquetas. Pueden tener hasta 31 caracteres y pueden contener letras, números y cuales-quiera de los siguientes símbolos:

¿                 interrogación

.punto
@               arroba
_                subrayado

$                dólar

Las etiquetas no deben iniciar con un número decimal y el punto se utiliza sola-mente como el primer carácter.

Una de las principales diferencias entre el DEBUG y el ensamblador reside en las etiquetas. Recuerde que con DEBUG debemos hacer el cálculo nosotros. El en-samblador refiere a etiquetas y él calcula el desplazamiento.

Cuando ponemos : después de una etiqueta, decimos que la etiqueta es cercana (NEAR). El término NEAR tiene que ver con los segmentos.

Procedimientos en ensamblador

El ensamblador asigna direcciones a las instrucciones. Cada vez que hacemos un cambio al programa, debemos ensamblar nuevamente dicho programa. Considére-se el siguiente programa:



Comentarios

Entradas populares de este blog