15
Universidad de San Carlos de Guatemala | Confidencial 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. Julio Fernando Osorio Escobar Universidad de San Carlos de Guatemala 01/01/2011 2011

Manual de Ensamblador

Embed Size (px)

Citation preview

Page 1: Manual de Ensamblador

Universidad de San Carlos de Guatemala | Confidencial

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.

Julio Fernando Osorio Escobar Universidad de San Carlos de Guatemala

01/01/2011

2011

Page 2: Manual de Ensamblador

2

INTRODUCCION

• Lenguaje ensamblador es un programa de informática, queconvierte un código fuente en un código objeto con el propósito degenerar al final un ejecutable. Este lenguaje facilita la escritura delcódigo de maquina debido a que este son solo 0`s y 1`s, imposiblesde entender por ello se tiene el lenguaje de más bajo nivel conocidocomo lenguaje ensamblador.

Page 3: Manual de Ensamblador

3

OBJETIVOS

• Comprender que es código de máquina y cuál es el lenguaje deprogramación de más bajo nivel que se le parece.

• Conocer conceptos generales del lenguaje ensamblador

• Conocer algunas instrucciones básicas del lenguaje ensamblador ycomo es que funcionan.

Page 4: Manual de Ensamblador

CONTENIDO

• Describe el contenido del Documento

MACRO

• 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 proposito en especifico, y son usadas como una instruccion.

INSTRUCCIONES

• Una instruccion como su nombre lo indica, sirve para realizar una funcionalidad: logica, aritmetica,trasferencia.

DIAGRAMA

• Especifica el diagrama de flujo de un ejemplo en lenguaje ensamblador

4

Describe el contenido del Documento

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 proposito en especifico, y son usadas como una instruccion.

Una instruccion como su nombre lo indica, sirve para realizar una funcionalidad: logica, aritmetica,trasferencia.

Especifica el diagrama de flujo de un ejemplo en lenguaje ensamblador

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 proposito en especifico, y son usadas como una instruccion.

Una instruccion como su nombre lo indica, sirve para realizar una funcionalidad: logica, aritmetica,trasferencia.

Especifica el diagrama de flujo de un ejemplo en lenguaje

Page 5: Manual de Ensamblador

5

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.

MACROS

Page 6: Manual de Ensamblador

6

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.

INSTRUCCIONES

Page 7: Manual de Ensamblador

7

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.

Page 8: Manual de Ensamblador

8

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.

Page 9: Manual de Ensamblador

9

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).

Page 10: Manual de Ensamblador

10

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

Page 11: Manual de Ensamblador

11

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

DIAGRAMA

Page 12: Manual de Ensamblador

12

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

Page 13: Manual de Ensamblador

13

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

Page 14: Manual de Ensamblador

14

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.

Page 15: Manual de Ensamblador

15

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.