5

Click here to load reader

Sintaxis del lenguaje ensamblador

Embed Size (px)

Citation preview

Page 1: Sintaxis del lenguaje ensamblador

Sintaxis del lenguaje ensamblador.

La sintaxis es la siguiente

Nombre de la instrucción Operando 1, Operando 2, Operando 3, Operando 4, ...

El nombre de la instrucción está formada por 2 o 3 letras, los operandos pueden ser

registros, constantes o direcciones de memoria. La cantidad de operandos dependerá de

la instrucción.

Por ejemplo:

MOV AL, [1000]

Esta instrucción indica que se copie el valor de la porción de la memoria que esté en la

ubicación 1000 (En hexadecimal) a la parte baja del registro AX (AL). Cuando un operando

es un valor de una dirección de memoria, ésta dirección se escribe entre corchetes,

recordar que el operando 1 es el destino y el operando 2 es el origen. Y cuando es una

constante dependerá del ensamblador, en el caso del debug (Un programa que sirve para

crear y editar aplicaciones que viene con el DOS) se interpretarán como hexadecimales, en

los siguientes ejemplos se interpretará que las constantes son números hexadecimales.

También se puede tomar un valor de la memoria apuntado por un registro, por ejemplo:

MOV AL, [DI]

DI está apuntado al valor que está en la memoria que será copiado al registro AL. El

nombre MOV viene de la palabra move, que es una palabra del ingles que significa mover.

Justamente la instrucción mencionada significa, mover el valor apuntado por DI a AL.

También se puede copiar el valor de un registro a otro

MOV AL, BL

En este caso se copia el valor de BL a AL

Igualmente se puede copiar el valor de la parte baja de un registro a la parte alta de otro

registro

MOV CH, DL

Así como también operar con las partes altas

MOV AH, DH

Inclusive se puede copiar el valor de un registro a una dirección de memoria

MOV [1000], AL

Igualmente apuntada la dirección de memoria a DI

Page 2: Sintaxis del lenguaje ensamblador

MOV [DI], AL

Y también con los registros completos (Solamente completos en el procesador 8086)

MOV AX, DX

También trabajar con los registros completos para todos los procesadores de 32 bits

MOV EBX, EDX

En éste caso mueve la totalidad del registro DX a la totalidad del registro BX, en éste caso

se está trabajando con los registros en forma extendida (32 bits), pero hay que tener

precaución ya que el procesador 8086 no interpretará correctamente ésta instrucción (El

procesador 8086 es obsoleto por ésta desventaja y otras más, por ejemplo sólo puede

direccionar 1 MB), además el debug no puede interpretar ésta instrucción.

No se puede realizar lo siguiente porque no se pueden pasar valores en la memoria sin la

intervención de un registro, además no se ha especificado el tamaño

MOV [1000], [2000]

Igualmente no se puede hacer lo siguiente

MOV [DI], [1000]

Así como también lo siguiente

MOV [DI], [SI]

Sin embargo lo siguiente es correcto

MOV [1000], AX

Pero no lo siguiente porque no se está especificando el tamaño

MOV [SI], 1F

Lo correcto sería lo siguiente

Si se quiere transferir un byte

MOV byte [SI], 1F

Si se quiere transferir una palabra (16 bits)

MOV word [SI], 1F

Si se quiere transferir una doble palabra (32 bits)

MOV dword [SI], 1F

Page 3: Sintaxis del lenguaje ensamblador

Instrucciones del leguaje ensamblador

Movimiento de datos con respecto a la memoria

Las instrucciones que se encargan de mover datos en relación con la memoria se pueden categorizar por tareas específicas:

· Las que transfieren datos de un registro a otro o entre la memoria y los registros.

· Las que preparan registros para accesar una localidad de memoria.

· Las que manipulan la pila.

· Las que mueven grandes bloques de datos.

· Las que interactúan con dispositivos periféricos a través de puertos.

La instrucción de movimiento mas común es “mov “ que requiere de dos operadores, su sintaxis es:

mov destino, fuente.

El destino no puede ser el registro de segmentos CS, no se puede mover un valor inmediato a un registro de segmentos para poder hacerlo utilice un registro intermedio como AX, ejemplo

Mov AX, 3

Mov DS, AX

Adicional a la instrucción “mov”, existen otras que operan bajo circunstancias diferentes con el mismo propósito, la instrucción “xchg” intercambia el contenido de la fuente con el destino.

Otra instrucción útil es “xlat” (traslate), se utiliza comúnmente al trabjar con tablas o arreglos, esta instrucción reemplaza el valor de AL por un nuevo valor tomado de la tabla que se compone de un conjunto de localidades contiguas en memoria, y supone que el registro BX contiene la dirección del primer elemento de la tabla.

En resumen:

mov src, dest

mov dest, src

Page 4: Sintaxis del lenguaje ensamblador

src : fuente: Inmediata. Registro. Memoria

dest : destino: Registro. Memoria

movz src, dest

movzx dest, src

src : fuente: Registro. Memoria

dest :destino: Registro

movs src, dest

movsx dest, src

src : fuente: Registro. Memoria

dest :destino: Registro

xchg src, dest

xchg dest, src

src : fuente: Registro. Memoria

dest : destino: Registro. Memoria

Administración de la pila

La pila es usada automáticamente por las instrucciones “call”, “int”, “ret” y “iret”, par guardar o restaurar la dirección de retorno antes de ejecutar las rutinas indicadas por dichas instrucciones. Otros servicios que presta es para pasar parámetros entre rutinas, o bien de un lenguaje de alto nivel al ensamblador, la pila se manipula mediante las instrucciones “push” (empuja o almacena en la pila) y “pop” (extrae o saca de la pila).

Por ejemplo la instrucción “push [1125]” empuja a la pila el contenido de la localidad de memoria 1125.

Otro ejemplo, las instrucciones “push ax”, “push bx” almacenan en la pila los valores de los registros AX y BX, para después sacarlos de la pila con las instrucciones “pop ax”, “pop bx”.

Movimiento bloques de datos

Page 5: Sintaxis del lenguaje ensamblador

En la programación de alto nivel normalmente se deben inicializar arreglos o copiar cadenas de caracteres, en lenguaje ensamblador existen instrucciones que permiten trabajar con bloques de datos, estas son “movs”, “stos” y “lods” los dos primeros se utilizan con un prefijo de repetición, como REP, lo que permite repetir una operación tantas veces como se estipule en el registro CX, lo que conlleva a una minimización del código.

Existen otros prefijos como REPE (repite hasta encontrar la igualdad) o REPZ (repite hasta que el valor sea cero), REPNE (repite mientras el valor no sea igual)o REPNZ (repite mientras el valor no sea cero) usados en combinación con las instrucciones “cmp” (comparar) y “scas” (escanerar-cadena).

Trabajo con bloques, El movimiento de grandes bloques de memoria y su inicialización se basan en fuente-destino controlados por SI-DI y un bit en el registro de flags que especifica la dirección o sentido en la cual se debe trabajar: “cdl” hacia adelante o “std” de atrás hacia adelante. Las instrucciones “movs” tiene dos modalidades, la primera puede mover bytes “movsb” o palabras “movsw” estando en función de los registros pares DS:SI como fuente y ES:DI como destino.

Referencia:

http://datateca.unad.edu.co/contenidos/309696/ECBTI_MPyMC_V_02/leccin__14_instru

cciones_bsicas_en_assembler.html