Está en la página 1de 8

5.2. Lenguaje Ensamblador.

Lenguaje ensamblador. Los traductores se pueden dividir a grandes rasgos en dos grupos, segn la relacin que haya entre el lenguaje fuente y el objeto. Cuando el lenguaje fuente es, en esencia, una representacin simblica de un lenguaje numrico de mquina, el traductor se llama ensamblador y el lenguaje fuente se llama lenguaje ensamblador. Cuando el lenguaje fuente es un lenguaje de alto nivel como el C o Pascal, y el lenguaje objeto es un lenguaje de mquina numrico o una representacin simblica de uno de ellos, el traductor se llama compilador. Qu es el lenguaje ensamblador? Un lenguaje ensamblador puro es aquel en que cada sentencia produce exactamente una instruccin mquina. En otras palabras, hay una correspondencia biunvoca entre las instrucciones de mquina y las sentencias del programa en ensamblador. Si cada lnea de un programa en ensamblador contuviera una sentencia ensamblador y si cada palabra de mquina contuviera una instruccin de mquina, entonces un programa de n lneas escrito en ensamblador producira un programa en lenguaje de mquina que ocupara n palabras. La razn por la que se usa el lenguaje ensamblador en lugar de programar el lenguaje mquina (octal o hexadecimal) consiste en que es mucho ms fcil programar en ensamblador. Es muy diferente usar nombres y direcciones simblicas que hacerlo en binario u octal. La mayora de la gente puede recordar que las abreviaturas para la adicin, la sustraccin, la multiplicacin y la divisin son ADD, SUB, MUL y DIV, pero pocos pueden recordar que las instrucciones mquina son 24576, 57344, 28672 y 29184. El programador en lenguaje ensamblador slo tiene que recordar los nombres simblicos ADD, SUB, MUL, DIV, ya que el ensamblador los traduce a las instrucciones mquina. Por el contrario, el programador en lenguaje mquina debe recordar, o consultar constantemente, los valores numricos. En cuanto a las direcciones, el programador en lenguaje ensamblador puede dar nombres simblicos a las posiciones de memoria y dejarle al ensamblador la tarea de suministrar los valores numricos correctos. El programador en lenguaje mquina debe trabajar siempre con los valores numricos de las direcciones. En

consecuencia, nadie programa hoy en da en lenguaje mquina, aunque se hacia hace aos, antes de que se inventaran los ensambladores. Los lenguajes ensambladores tienen otra propiedad, adems de la correspondencia uno a uno entre las sentencias en ensamblador y las instrucciones mquina, que los distngue de los lenguajes de alto nivel. El programador en ensamblador tiene acceso a todos los recursos e instrucciones de la mquina a la que se aplica, pero no el programador en un lenguaje de alto nivel. Por ejemplo si la mquina tiene un indicador de desbordamiento, el programador en lenguaje ensamblador puede examinarlo; uno en Pascal no puede hacerlo directamente. Es decir, que todo lo que puede hacerse en lenguaje mquina puede hacerse tambin en lenguaje ensamblador, pero muchas instrucciones, registros y otras cosas por el estilo no estn disponibles para que el programador en lenguaje de alto nivel las use. Los lenguajes para la programacin de sistemas suelen ser un hbrido entre ambos tipos, con la sintaxis de un lenguaje de alto nivel pero con las posibilidades de acceso a la mquina de un lenguaje ensamblador. Una diferencia final, consiste en que un programa en legaje ensamblador slo puede correr en una familia de mquinas, mientras que un programa escrito en lenguaje de alto nivel puede, en potencia, correr en muchas mquinas. La habilidad de poder mover software de una mquina a otra, resulta de gran importancia prctica para muchas aplicaciones.

Conjunto de instrucciones del 8088


Tipo Aritmtica Lgica Instruccin del 8088 ADC, ADD, DIV, IDIV, IMUL, MUL, SBB, SUB AND, NEG, NOT, OR, TEST, XOR Utilizadas para realizar operaciones lgicas sobre los operandos. El movimiento del contenido del operando se realiza utilizando estas instrucciones. Cada instruccin se puede utilizar con diferentes modos de direccionemiento. Se utiliza para cargar en los diferentes registros bytes o cadenas de bytes. Son especficas del registro. Comentarios Estas instrucciones se utilizan para realizar operaciones aritmticas sobre los operandos fuente y destino.

Transferencia

MOV, MOVS (MOVSB) (MOVSW)

Carga

LODS (LODSB) (LODSW), LAHF, LDS, LEA, LES

Salto

JA (JNBE), JAE (JNB) (JNC), JB, (JNAE) (JC), JBE (JNA), JCXZ, JE, (JZ), JG (JNLE), JGE (JNL), JL, (JNGE), JLE (JNG), JMP, JNE, (JNZ), JNO, JNP

Estas instrucciones transfieren el flujo del proceso al operando indicando. La transferencia puede ser incondicional o dependiente de la existencia de ciertas

(JPO), JNS, JO, JP (JPE), IS

condiciones, en el momento que se ejecuta un salto.

Loop

LOOP, LOOPE (LOOPZ), LOOPNE (LOOPNZ)

Permite la transferencia, ya sea condicional o incondicional, del flujo del proceso a un destino hasta que el contador del loop se decrementa hasta cero.

Stack

POP, POPF, PUSH, PUSHF

Estas instrucciones proporcionan las localidades para colocar operandos y direcciones y retirarlos del stack.

Conteo

DEC, INC

Instrucciones empleadas para incrementar o decrementar el contenido de los contadores.

Comparacin

CMP, CMPS, (CMPSB) (CMPSW) Utilizadas para comparar operandos. Afectan el estado de las banderas.

Bandera

CLC, CLD, CLI, CMC, STC, STD, STI Afectan el estado de las banderas.

5.2. Lenguaje Ensamblador.


Instrucciones Lgicas.
Instruccin AND destino, fuente Propsito AND lgica Comentarios Lleva a cabo la conjuncin, bit a bit, de los dos operandos:

S D D

1
NEG destino NOT destino OR destino, fuente Generar complemento- 2 NOT lgico OR inclusivo lgico

0 1 0

TEST destino, XOR destino, fuente

Comparacin lgica OR exclusivo

0 0 0

Esta instruccin general el complemento- 2 del operando destino. Lleva a cabo la negacin, bit a bit, del operando destino. Efecta, bit a bit, la disyuncin inclusiva lgica de los dos operandos:

S D D

1 1 1

1 0 1

0 1 1

Realiza la conjuncin, bit a bit, de los operandos, pero no proporciona el resultado, slo tiene efecto sobre el estado de banderas. Efecta, bit a bit, la disyuncin exclusiva lgica de los dos operandos:

S D D

1 1 0

0 0 1

0 1 1

0 0 0

5.2. Lenguaje Ensamblador.


Instrucciones Aritmticas.

Iinstruccin ADC destino, fuente ADD destino, fuente DIV fuente

Propsito Adicin con acarreo Adicin

Comentarios Lleva a cabo la adicin de dos operandos y suma un uno al resultado si la bandera CF est activada. Efecta la adicin de dos operandos.

Divisin sin signo Efecta la divisin sin signo del numerador entre el divisor, que se encuentra en el operando fuente. El numerador se encuentra, para operaciones con bytes, en AL y AH mientras que para operaciones con palabras (dos bytes) est contenido en AX y DX. Los valores de longitud doble (palabras) regresan un cociente de longitud sencilla (byte) (en AL o AX) y al residuo en (AH o DX). Lleva a cabo la divisin con signo utilizando para ello los mismos registros que la instruccin DIV. Multiplica AL o AX veces la fuente y regresa el producto de longitud doble a AL y AH (byte) o bien a AX y DX (palabra). Multiplica AL o AX veces la fuente y regresa el producto de longitud doble a AL y AH (byte) o bien a AX y DX (palabra). Resta los dos operandos y resta el resultado en uno si CF est activada. El operando fuente siempre se resta del destino. Resta el operando fuente del destino.

IDIV fuente IMUL fuente

Divisin de enteros con signo Multiplicacin sin signo

MUL fuente

Multiplicacin sin signo

SBB destino, fuente SUB destino, fuente

Substraccin con "prstamo" Substraccin

5.2. Lenguaje Ensamblador.


Ejemplo sencillo de programacin. PAGE 40, 132 TITEL SORT ORDENACION POR INTERCAMBIO (SORT, ASM) ; ; DESCRIPCION: Este programa realiza la ordenacin ; por intercambio en TABLE1. ; contenida en el segmento STACK de datos. ; STACK SEGMENT PARA STACK STACK ; DB 64 DUP (STACK)

; STACK DATA TABLE1 14, 13, 12, 11 2, 1 ; TOTAL DATA CSEG SSORT DW ENDS ; SEGMENT PARA PUBLIC CODE PROC ASSUME PUSH SUB PUSH MOV MOV ; FAR CS:CSEG,DS:DATA,SS:STACK ; DS AX,AX AX ; AX, SEG DATA ; DS, AX ; ; SI, 0FFSET ; ; ; ; DI, SI SI, 0 DI ; DL,TABLE1 [SI] ; ; ; I 20 ; ENDS ; SEGMENT PARA PUBLIC DATA DB 20, 19, 18, 17, 16, 15, DB 10, 9, 8, 7, 6, 5, 4, 3,

MOV Inicializa ndice I MOV CX, TOTAL Establece el ndice de conteo I: SUB CX, 1 DO1 : Comienza loop (externo) MOV Inicializa ndice J MOV Inicializa ndice de la lista INC + 1 DO2 : Comienza loop (interno) MOV

; Mueve I

MOV CMP IF1 compara I con J JNAE IF1 IF INC Incrementa ndice J CPM Compara ndice del loop interno JNAE DO2 loop (interno) INC SI CPM SI, CX Compara ndice externo JNA DO1 loop externo RET SSORT ENDP CSEG ENDS END SSORT

BL, TABLE1 [DI] DL,BL ; IF1 MOV MOV ; THEN I TABLE1 [SI],BL TABLE1 [DI],DL ; Termina DI DI, TOTAL ; ;

; Mueve J

; Comienz

; Termina ; ; Termina

También podría gustarte