Sei sulla pagina 1di 15

2011

Manual de Ensamblador
Arquitectura Ensambladores y
Computadores 1
Describe algunas instrucciones básicas, de una manera
sencilla con ejemplos y especificando que hacen cada uno.

Universidad de San Carlos de Guatemala | Confidencial


Julio Fernando Osorio Escobar
Universidad de San Carlos de Guatemala
01/01/2011
INTRODUCCION
• Lenguaje ensamblador es un programa de informática, que
convierte un código fuente en un código objeto con el propósito de
generar al final un ejecutable. Este lenguaje facilita la escritura del
código de maquina debido a que este son solo 0`s y 1`s, imposibles
de entender por ello se tiene el lenguaje de más bajo nivel conocido
como lenguaje ensamblador.

2
OBJETIVOS
• Comprender que es código de máquina y cuál es el lenguaje de
programación de más bajo nivel que se le parece.
• Conocer conceptos generales del lenguaje ensamblador
• Conocer algunas instrucciones básicas del lenguaje ensamblador y
como es que funcionan.

3
• Describe el contenido del Documento
CONTENIDO

• Una macro es un conjunto de instrucciones, para solucionar


un problema complejo, las macros pueden ser usadas tantas
veces como se necesite, ya que estas son creadas con un
MACRO
proposito en especifico, y son usadas como una instruccion.

• Una instruccion como su nombre lo indica, sirve para


realizar una funcionalidad: logica, aritmetica,trasferencia.
INSTRUCCI
ONES

• Especifica el diagrama de flujo de un ejemplo en lenguaje


ensamblador
DIAGRAMA

4
MACROS

Formato de un Macro:
Para la creación de un macro en ensamblador tienen cinco partes que los
constituyen. Las cuales son: el identificador, la palabra macro, parámetros
(si fuesen necesarios), bloque de instrucciones y la palabra endm que
significa fin de macro.

Ejemplos:
- Formato genérico de un macro

Identificador MACRO parámetro, [parámetro, […]]


Instrucciones ensamblador
Endm

- Macro para realizar una suma de dos números enteros e imprimir


el resultado

Suma macro OP1, OP2; declarando el macro suma, con


dos parámetros op1 y op2

XOR AX, AX; limpiando el registro ax


XOR BX, BX; limpiando el registro bx
MOV AX, OP1; copiando el op1 al registro ax
MOV BX, OP2; copiando el op2 al registro bx
ADD AX, BX; sumando los dos registros con la
Instrucción ADD y el resultado de la
suma se almacena en el registro ax
MOV AH, 9H; especificando que el registro ax está
en modo de impresión.
INT 21H; Esta es una interrupción de software, lo
hace que el kernel imprima el registro en
consola.
Endm; indicando fin del macro.

5
INSTRUCCIONES

Instrucción
Las instrucciones existen de distintos propósitos: transferencia,
aritméticas, lógicas, misc y saltos.

Instrucciones de Transferencia
Este tipo de registros lo que hacen es transferir sus valores de una fuente
a un destino (estos valores pueden ser registros, variables, posiciones de
memoria, etc.), ya sea su mismo valor o trasformado.

- Mov val1, val2  val1=val2


o Esta instrucción realiza una copia
- Xchg val1, val2  val1= val2 y val2=val1
o Esta instrucción intercambia los valores
- Push val1  incrementa SP y [sp]=val1
o Esta instrucción maneja el segmento de pila, lo que
hace cuando agregan un valor a la pila es
incrementar el apuntador de pila sp y almacena val1
en la pila con la posición obtenida sp.
- Pop val2  val2=[sp] y decremento sp
o Lo que realiza esta instrucción, es sacar el valor que
se tiene en la pila en el apuntador actual sp y
asignarlo a la variable val2, luego decremento el
apuntador de pila.
- In destino, puerto  destino=puerto
o Copia la información del puerto a un destino definido
- Out puerto, fuente  puerto=fuente
o Envía la información de la fuente al puerto indicado.

6
Instrucciones Aritméticas
Estas instrucciones son utilizadas para realizar cálculos aritméticos como:
suma, resta, multiplicación, división. Y el resultado de estas se almacena
en el operando izquierdo (el operando puede ser: registro, posición de
memoria, variable, etc.).

- ADD OP1, OP2  OP1= OP1+OP2


o Esta instrucción realiza una suma entre los dos
valores y su resultado de almacena en OP1.
- SUB OP1, OP2  OP1= OP1-OP2
o Esta instrucción realiza una restra entro los dos
valores y el resultado lo almacena en OP1.
-
Para realizar las instrucciones de suma y restra se pueden usar registros:
ax, bx, cx y dx, posiciones de memoria, variables. Pero para las
instrucciones de multiplicación y división es obligatorio el uso del registro
ax. Para usar las instrucciones de multiplicación y división el registro ax
ya debería tener algún valor.

- MUL OP1 AX=AX*OP1


o Esta instrucción multiplica el valor que tengo el
registro ax con el valor op1 y el resultado se
almacena en ax.
- DIV OP1  AX=AX/OP1
o Esta instrucción divide el valor del registro ax con el
calor de op1 y almacena el resultado en ax.
- INC OP1  OP1=OP1+1
o Esta instrucción es incrementa en uno el valor de
OP1, esto es usado para llevar un contador.
- DEC OP1  OP1=OP1-1
o Esta instrucción decrementa en uno el valor de OP1.

7
Instrucciones Lógicas
Son instrucciones que usan operadores lógicos como: AND, OR, XOR,
NOT. Para realizar ciertas acciones.

- NOT OP1
o Lo que hace es invertir los bit
- AND OP1,OP2  OP1=OP1 AND OP2
o Realice una operación lógica and entre op1 y op2 y el
resultado lo almacena en op1.
- OR OP1,OP2  OP1=OP1 OR OP2
o Realiza una operación lógica or entre op1 y op2 y el
resultado es almacenado en op1.
- XOR OP1,OP2  OP1=OP1 XOR OP2
o Realiza la operación lógica or exclusive (xor) entre op1
y op2 y el resultado se almacena en op1.

Instrucciones Misc
Son instrucciones importantes para el lenguaje ensamblador, para poder
realizar tareas especificas para la ejecución y complementación de la
aplicación.

- LEA VAL1,VAL2  VAL1= dirección de memoria(val2)


o Esta instrucción almacena en val1 la dirección de
memoria donde se encuentra almacenado el valor de
val2.
- INT VAL  INT 21H
o Esta instrucción es una interrupción de software, y
dependiendo del valor que se le indique de referencia
ejecuta distintos propósitos.

Otra instrucción importante de mencionar, es la utilizada para realizar


comparaciones entre valores (pueden ser registros, posiciones de memoria,
variables, etc.).

- CMP OP1, OP2


o Esta instrucción realiza una comparación entre op1 y
op2
Esta instrucción es usada para el manejo de saltos.

8
Saltos
Los saltos son usados, para dirigir a la aplicación por donde ir se. Existen
dos tipos de saltos los condicionales y los no condicionales.

No condicionales
Estos saltos se realizan sin depender de una condición para realizarse.

- JMP
o JMP DESTINO
o ………
o ……..
o DESTINO:
o Este salto indica que se debe ir la etiqueta destino(
las etiquetas tiene características similares a las
macros)

- RET
o JMP DESTINO
o …….
o ……
o DESTINO:
 ….
 ….
 RET
o Este salto lo que hace es regresar a la línea de código
donde fue llamado.

- CALL
o Segment función
 Sumar:
• ….
• Ret
o Segment code
 Call función:sumar
o Este es un salto para llamar a una etiqueta, macro o
procedimiento, aunque este no se encuentre en el
mismo segmento. (nota los otros saltos no pueden ir
a etiquetas, macros o procedimientos que no estén en
el mismo segmento de memoria).

9
Condicionales
Estos saltos son usados para indicar a la aplicación por donde ir se.
Dependiendo que cumpla o no ciertas condiciones. Para usar estos saltos
es necesario usar la instrucción que hace la comparación cmp para que
luego se use el salto que cumpla cierta condición requerida.
Cmp op1, op2
Salto condicional

- Formato genérico

o Salto etiqueta  en esta parte se indica si se cumple


la condición del salto que se debe
realizar.
o Etiqueta  en esta parte se indica que realizar si no
se cumple la condición del salto.
- JE
o JE sumar  comparación cmp, op1 = op2 ir a sumar
o Restar  sino restar
- JNE
o JNE sumar comparación cmp, op1 ¡= op2 ir sumar.
o Restar  sino restar

- JG  Si op1 es mayor op2


- JGE  Si op1 es mayor o igual op2
- JL  Si op1 es menor op2
- JLE  Si op1 es menor o igual op2
- JNG  Si op1 no es mayor op2
- JNGE  Si op1 no es mayor o igual op2
- JNL  Si op1 no es menor a op2
- JNLE  Si op1 no es menor o igual a op2

10
DIAGRAMA

Se realizara un ejemplo en el cual se le solicitara al usuario que presione


una tecla 1-3 con el mensaje “presione una tecla del 1-3”, si el presiona la
tecla 2 se le mostrara un mensaje “Bienvenido al mundo ensamblador” en
caso contrario un mensaje “Hola mundo ensamblador”.
Para este ejemplo usaremos el formato MZ. Este formato es usado para el
uso de segmentos simplemente declarándolos sin tener que estar
asignando la memoria el automáticamente lo realiza.

Format MZ  indicamos el formato que manejaremos


Entry principal:inicio  indicando que es lo primero que se debe ejecutar

Segment Mensajes  segmento con el nombre mensajes para referenciarlo


Msj1 DB “presione una tecla del 1-3$”
Msj2 DB “Bienvenido al mundo ensamblador$”
Msj3 DB “Hola mundo ensamblador$”

msj1 es el identificador del mensaje, db es para indicar que estamos


definiendo un byte y $ para indicar que es el fin de cadena de esta forma
solo me almacena el mensaje, y no basura extra después del mensaje

Segment Mostrar  segmento con el nombre mostrar para referenciarlo

Mensaje1:  definiendo una etiqueta

Mov ax,Mensajes  indicando la posición de memoria del


segmento mensajes
Mov ds,ax  indicando la posición de memoria del segmento
mensajes desde ax, porque no está permitido
hacerlo directamente de segmento al registro ds.
Mov dx,Msj1  copiando los datos de la variable msj1 al
registro dx.
Mov ah,9h  indicando que debe imprimir en consola
Int 21h  interrupción, usada para ejecutar
Retf  para retornar de donde fue llamada

11
Mensaje2:  definiendo una etiqueta

Mov ax,Mensajes  indicando la posición de memoria del


segmento mensajes
Mov ds,ax  indicando la posición de memoria del segmento
mensajes desde ax, porque no está permitido
hacerlo directamente de segmento al registro ds.
Mov dx,Msj2  copiando los datos de la variable msj1 al
registro dx.
Mov ah,9h  indicando que debe imprimir en consola
Int 21h  interrupción, usada para ejecutar
Retf  para retornar de donde fue llamada

Mensaje3:  definiendo una etiqueta


Mov ax,Mensajes  indicando la posición de memoria del
segmento mensajes
Mov ds,ax  indicando la posición de memoria del segmento
mensajes desde ax, porque no está permitido
hacerlo directamente de segmento al registro ds.
Mov dx,Msj3  copiando los datos de la variable msj1 al
registro dx.
Mov ah,9h  indicando que debe imprimir en consola
Int 21h  interrupción, usada para ejecutar
Retf  para retornar de donde fue llamada

Segmento opción  segmento con el nombre opción para ser referenciado

Tecla:  etiqueta
Mov ah,08h  modo ingreso de tecla
Int 21h  interrupción, ejecuta lo pendiente
Retf  retorna donde fue llamada

12
Segmento principal  segmento con el nombre principal para ser
referenciado.

Inicio:  definiendo etiqueta


Call Mostrar:Mensaje1  llamando a la etiqueta
mensaje1 que está en el
segmento mostrar
Call opción:tecla  llamando a la etiqueta tecla que está
en el segmento opción
Cmp ax,32h  el valor de la tecla que capturo la
etiqueta tecla, se almacena en el registro
ax, por lo tanto comparo el valor de la
tecla con el numero 2 que en acii es 32h.
Je ver  verifica que el valor ax con 32h es igual, salta a
la etiqueta ver, sino es igual continua con la
siguiente línea de código.
Call Mostrar:Mensaje3  llama a la etiqueta Mensaje3
que esta en el segmento
mostrar
Retf  retorna de donde fue llamada

Ver:  define etiqueta


Call Mostar:Mensaje2  llama a la etiqueta Mensaje2
que esta en el segmento Mostrar
Retf  retorna de donde fue llamada

13
CONCLUCIONES
• El lenguaje ensamblador, es el lenguaje que mas se parece al codigo
de maquina solo que este es si se puede entender.
• Con el lenguaje ensamblador se puede programar cualquier
funcionalidad que se pueda hacer en lenguaje de alto nivel con la
diferencia que seria extremadamente complicado.
• Que la notacion del lenguaje ensamblador esta dada en post-orden.
• que existe mas instrucciones que las presentadas algunas son
variaciones de las ejemplificadas.

14
RECOMENDACIONES
• Este manual fue basado en la nomenclatura de fasm, que es un ide
para lenguaje ensamblador.
• Estudiar muchos conceptos de bytes, word, double word,
segmentacion para agilizar y entender mejor el lenguaje
ensamblador.
• Para realizar ejecutable con ensamblador, es recomendable que
usen algun emulador dos. Para no dañar la memoria de su
computador.

15

Potrebbero piacerti anche