Anda di halaman 1dari 67

Assembler

Set de Instrucciones

Introduccin
Creado para facilitar la elaboracin de

programas.
Al "hablar" en Assembler, estamos

dicindole a la mquina, en lo ms
cercano a su idioma posible, lo que tiene
que hacer.

Sintaxis del Assembler


Las rdenes en Assembler pueden ser:
Mnemnicos (instrucciones)
(Ej. MOV, ADD, JMP)

Directivas (palabras reservadas)


(Ej. EQU, ORG, END)

Formato general de una orden:


mnemnico [Param1 [,Param2]]
La lnea de cdigo consta de cuatro partes:
Etiquetas
Directiva o instruccin
Operando(s)
Comentarios

Delimitadores:

Los campos van separados slo con espacios


y/o tabulaciones. No se debe agregar nunca
otros caracteres (comas, puntos, etc ).

No utilizar espacios extra, particularmente


despus de comas que separan operandos.
( Ej: movlw 5,w )

No usar caracteres delimitadores (espacios y


tabulaciones) en nombres o etiquetas.

Etiquetas:

No ms de una etiqueta por instruccin.

No usar palabras reservadas (EQU) o


instrucciones (MOV).

No usar nmeros o caracteres no numricos


como 1 letra.

Usar siempre letras y en mayscula.

Desventajas del Assembler


Amplias diferencias entre el set de

instrucciones y tareas a realizarse.

No Portable.
Como remedio de lo anterior, se utilizan
lenguajes de medio o alto nivel como C o
Pascal.

MOV (move)
Copia el contenido del parmetro origen al
destino.
Ejemplo:

MOV AX, BX

equivale a

AX = BX; (C)

MOVSX & MOVZX


Transfieren el operando origen a un

registro y luego realizan la extensin


MOVSX (move with sign extension)
MOVZX (move with zero extension)

MOVS (Move String)


Transfiere los elementos del string

especificados por la direccin del registro


ESI a la direccin especificada por el
registro EDI.

Los elementos a ser operados se

identifican con los registro ESI (source


string element) y EDI (destination string
element).

MOVS (Move String)


MOVSB (move byte string)
MOVSW (move word string)
MOVSD (move doubleword string)

MOV Restricciones
NO se puede mover datos
Entre posiciones de memoria

MOV datos1, datos2 es ilegal


En su lugar se escribe:
MOV AX, datos2
MOV datos1, AX (Utilizacin de variable
puente)

MOV Restricciones
NO se puede mover datos
De un

registro de segmento a otro

MOV DS, ES es ilegal


En su lugar se escribe:
MOV AX, ES
MOV DS, AX

MOV Restricciones
NO se puede mover
Una constante directamente a un registro de

segmento.
MOV DS, 1234H es ilegal
En su lugar se escribe:
MOV AX, 1234H
MOV DS, AX

MOV Restricciones
NO se puede
CS (code segment) no debera usarse

como operando destino


Podra tener el efecto de cambiar el
segmento que donde se esta ejecutando
el cdigo.

XCHG (exchange)
Intercambia el contenido de dos

operandos.
No requiere una direccin temporaria.

XCHG Dato1, Dato2

Manipulacin de pila PUSH


Decrementa el puntero de pila (ESP),

luego copia el operando al tope de la


misma.

Manipulacin de pila POP


Copia el dato del tope de la pila (ESP) a la

direccin especificada con el operando y


luego incrementa el registro ESP para
apuntar al nuevo tope de la pila.

PUSHA (push all registers)


Guarda el contenido de los ocho registros

de propsito general en la pila.


Los registros se ingresan el la pila en el

siguiente orden: EAX, ECX, EDX, EBX, el


valor inicial de ESP antes de que EAX sea
ingresado en la pila, EBP, ESI, y EDI.

PUSHA (push all registers)

POPA (pop all registers)


Saca los ltimos ocho words o

doublewords del tope de la pila y los


coloca en los registros de propsito
general, con excepcin del registro ESP.
El registro ESP se restaura por la accin

de retirar los elementos de la pila.

POPA (pop all registers)

Conversin de Tipos
CBW (convert byte to word)
CWDE (convert word to doubleword extended)
CWD (convert word to doubleword)
CDQ (convert doubleword to quadword)

Instruccin CMP
Realiza

comparaciones entre dos


operandos
Sintaxis:
CMP registro,registro
CMP registro,memoria
CMP memoria,registro
CMP registro,valor
CMP valor,registro
Los datos a comparar deben ser del mismo tamao.
Las comparaciones estn ntimamente ligadas con los
saltos condicionales.

CMPS (Compare string)


Resta los elementos del string destino de

los elementos del string origen y actualiza


las banderas de estado (CF, ZF, OF, SF,
PF, y AF) en el registro EFLAGS de
acuerdo a los resultados.
Ningn elemento del string se escribe en

la memoria.

CMPS (Compare string)


CMPSB (compare byte strings)
CMPSW (compare word strings)
CMPSD (compare doubleword strings)

SCAS (Scan string)


Resta los elementos del string destino del

contenido del registro EAX, AX o AL


(dependiendo de la longitud del operando)
y actualiza las banderas de estado de
acuerdo a los resultados.
Ni los elementos del string ni el contenido

de los registros se modifican.

SCAS (Scan string)


SCASB (Scan byte string)
SCASW (Scan word string)
SCASD (Scan doubleword string)

LODS (Load string)


Carga los elementos del string origen

identificados por el registro ESI en el registro


EAX, AX o AL.
LODSB (load byte string).
LODSW (load word string).
LODSD (load doubleword string)

STOS (Store string)


Almacena los elementos del string origen

del registro EAX, AX o AL en la direccin


de memoria identificada por el registro
EDI.

STOSB (store byte string).


STOSW (store word string).
STOSD (store doubleword string).

Entrada / Salida
IN (input from port to register)
OUT (output from register to port)
Transfieren datos entre un puerto de E/S y

el registro EAX (32 bits), el registro AX (16


bits) o el registro AL (8 bits)
El puerto se especifica con un operando
inmediato (si esta entre 0 y 255) o con
una direccin en el registro DX.

Entrada / Salida (strings)


INS (input from

port to string)
OUTS (output string to port)
Los registros ESI y EDI se usan para especificar

los elementos del string en la memoria y los


prefijos de repeticin (REP) se usan para repetir
la instruccin para implementar una transferencia
de bloque.
Las instrucciones INS y OUTS usan una direccin
en el registro DX para especificar el puerto de
E/S.

Entrada / Salida (strings)


INSB (input byte)
INSW (input word)
INSD (input doubleword)
OUTB (output byte)
OUTW (output word)
OUTD (output doubleword)

Instrucciones Aritmticas Binarias


Operan con datos numricos de 8, 16 y 32 bits,
codificados como enteros binarios con signo y
sin signo.
Bsicamente Incluyen:
Suma

Resta

Multiplicacin

Divisin

Incremento

Decremento

Comparacin

Negacin

Instruccin ADD
Sintaxis:

ADD destino, fuente


Se suma ambos operandos y el resultado
se almacena en el operando destino. Si
se produce overflow se indica en los flags
OF y CF. El signo del resultado se indica
en el flag SF.

Instruccin ADD
ADD

AL,40 ;
le sumo al reg. AL el valor 40.
(AL+=40h

AL=AL+40h)

Instruccin SUB
Sintaxis:

SUB destino, fuente


Se suma ambos operandos y el resultado se
almacena en el operando destino.
Si se produce
overflow se indica en los flags OF y CF. El
signo del resultado se indica en el flag SF.

Instrucciones de
Multiplicacin y Divisin
MUL

Multiplicacin sin signo

IMUL

Multiplicacin con signo

DIV

Divisin sin signo

Divisin con signo

IDIV

Instruccin MUL
Sintaxis:

MUL fuente
Realiza la multiplicacin entre el operando
dado con el acumulador. El acumulador a
multiplicar va a depender del operador
fuente que se ingrese.
Tamao del
operando
Byte

Registro

Fuente

Destino

AL

r/m8

AX

Word

AX

r/m16

DX:AX

DoubleWord

EAX

r/m32

EDX:EAX

Instruccin IMUL
Sintaxis:

IMUL fuente
Un Operando
Tiene tres formas
segn el nmero
de operandos:

Dos Operandos
Tres Operandos

Instruccin IMUL
Un

Operando:
Es idntica a la instruccin MUL

Dos

Operandos:

IMUL destino, fuente


Dos

Operandos:

IMUL destino, fuente1, fuente2

Instruccin DIV
Sintaxis:

DIV divisor
Divide el valor en los registros AX, DX:AX o
EDX:EAX por el operando divisor. Esta
operacin arroja como resultado un cociente y
un resto, el modo en que se almacena lo
podemos observar en la siguiente tabla...
Tamao del
operando

Dividendo

Divisor

Cociente

Resto

Mximo
Cociente

Word/byte

AX

r/m8

AL

AH

255

Doubleword/
word
Quadword/d
oubleword

DX:AX

r/m16

AX

DX

65,535

EDX:EAX

r/m32

EAX

EDX

232 - 1

Instrucciones De
Incremento y Decremento
INC

DEC

Incremento
Decremento

Estas instrucciones adicionan 1 o restan 1


a un operando entero.
Sintaxis

INC AX o DEC AX
Equivale a ADD AX,1 o SUB AX,1
(A++) (A--)

Instrucciones de
Comparacin y Negacin
Instruccin NEG
Sintaxis:
NEG destino
Genera el complemento a dos del
operando destino y lo almacena en este
mismo operando.
MOV AX,1234h
NEG AX
AX=EDCBh

Instrucciones Lgicas
AND

Conjuncin de dos operandos


OR
Disyuncin inclusiva lgica de
dos operandos
XOR Disyuncin exclusiva lgica de
dos operandos
NOT Negacin bit por bit del
operando

Instruccin AND
AND destino, fuente
Direccin de memoria

Cada bit del resultado se activa a 1 si


ambos bits de los operandos son 1, en
otro caso se pone a 0.
Fuente

Destino

Destino

1
1
0
0

1
0
1
0

1
0
0
0

Instruccin OR
OR destino, fuente
Direccin de memoria

Cada bit del resultado se pone en 0 si


ambos bits de los operandos son 0, en
otro caso se pone a 1.
Fuente

Destino

Destino

1
1
0
0

1
0
1
0

1
1
1
0

Instruccin XOR
XOR destino, fuente
Cada bit del resultado se activa a 1 si
ambos bits de los operandos son
diferentes, en otro caso es 0.
Fuente

Destino

Destino

Instruccin NOT
NOT destino
Cada bit 1 se pone a 0 y cada bit 0 se pone
a1

Transferencia de Control
Es un conjunto de instrucciones.
Permiten al programador romper el

secuencial en un programa.
Permite ejecutar trozos de cdigo.

flujo

Clasificacin:
Saltos incondicionales (JMP).
Bucles (LOOP).
Saltos condicionales (Jnnn).
Llamadas a procedimientos (CALL).
Llamadas a interrupciones (INT).

JMP (Salto incondicional)


Desva el flujo del programa
No verifica condiciones ni banderas
Transfiere a una direccin especificada

Sintaxis:
JMP destino

Tipos de Salto Incondicional


Ej:

; porcin de cdigo
Inicio:
JMP Ejemplo
MOV cx,7
Ejemplo:
MOV cx,6
; contina cdigo

Salto Condicional (Jnnn)


Ejecuta trozos de cdigo dependiendo del

valor de determinado registro o variable


Es necesario hacer una

comparacin

Salto Condicional (Jnnn)

Salto Condicional (Jnnn)

Bucle (LOOP)
Sirve para ejecutar un trozo de cdigo
un nmero de veces dado
Por ejemplo:
; porcin de cdigo
MOV CX,7
INICIO_BUCLE:
ADD WORD PTR BX,CX
INC BX
LOOP INICIO_BUCLE
MOV AX,BX
; contina cdigo

Llamada a interrupciones (INT)


Son las de tipo software

Ayuda en la creacin de programas


Una interrupcin es una operacin que
invoca la ejecucin de una rutina
especfica
Su sintaxis es la siguiente:

INT numero_interrupcin.

Llamada a interrupciones (INT)


Ejemplo:
INT 10H Provocara una llamada a la
interrupcin 10h (16 en decimal).

Llamada a Procedimientos (CALL)


Trozos de cdigo que van a ser usados en

distintas partes del programa.

Permiten tener un cdigo ms legible,


ms estructurado.

Sintaxis:
CALL nombre_procedimiento

Llamada a Procedimientos (CALL)


El

formato es el siguiente:

Inicializacin PROC
..
Cuerpo del procedimiento.
..
RET
Inicializacin ENDP

Llamada a Procedimientos (CALL)

Existen dos tipos de llamadas a procedimientos:

Llamadas directas (la llamada tiene


el nombre del procedimiento)

Llamadas indirectas (el llamado tiene


la direccin que contiene la direccin
de comienzo del procedimiento)

Declaracin de Variables
Es

la posibilidad de ponerle nombres a las


posiciones de memoria

Sintaxis:
Nombre Tipo Valor

Declaracin de Variables (Tipos)


DB Para definir un byte, dice que la variable es un byte, o un
array de Bytes

D
W

Para definir un Word o un array de Word.

DD Para definir un DWord, o un array de DWord.


DQ Para definir un QWord (QuadWord, u ocho bytes).
DT Para definir Ten Bytes (diez).

Declaracin de Variables
Ejemplos:
LETRA_A DB A ; variable con un carcter
NUMBER_1 DW 1 ; un nmero 1, pero word
STRING DB Hola, cmo ests!!!! ; cadena

Declaracin de Macros
Permiten

asignarle un nombre a una


secuencia de instrucciones

Luego

se utiliza el nombre de la macro


en el programa como si se usase la
secuencia de instrucciones anterior.

Las

macros no son lo mismo que las


subrutinas

Declaracin de Macros
La

declaracin de macros se hace a travs


de las directivas MACRO y ENDM.

Su sintaxis es:

[parmetros,,,]

nombre MACRO
declaraciones

ENDM