Sie sind auf Seite 1von 12

Universidad de San Carlos de Guatemala

Faculta de Ingeniería

Escuela de Ciencias y Sistemas

Arquitectura de Computadoras 1

Documento de Especificaciones

Assembler

Randy Alberto Ruano Morales

200819081

12 de marzo de 2011
Introducción

El siguiente documento trata sobre el lenguaje ensamblador, específicamente del lenguaje


conocido como FASM sobre el ide EMU8086, este simula un microprocesador 8086 el cual es uno
de los más utilizados. Para utilizar este manual se deben de tener conocimientos no muy altos
sobre este lenguaje, lo más importante que debemos conocer es que este está manejando
registros en nuestra memoria directamente, por lo que debemos tener cuidad a la hora de utilizar
otra herramienta para el lenguaje.

El término ensamblador (del inglés assembler) se refiere a un tipo de programa informático que se
encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto que
contiene código máquina, ejecutable directamente por la máquina para la que se ha generado. El
propósito para el que se crearon este tipo de aplicaciones es la de facilitar la escritura de
programas, ya que escribir directamente en código binario, que es el único código entendible por
la computadora, es en la práctica imposible. La evolución de los lenguajes de programación a
partir del lenguaje ensamblador originó también la evolución de este programa ensamblador hacia
lo que se conoce como programa compilador.
Objetivos

 Conocer el lenguaje ensamblador, sus principales instrucciones y sintaxis.

 Poder describir los procesos que se llevan a cabo al ejecutar assembler.

 Conocer y manejar fácilmente los registros.


Contenido

Introducción Página 2

Objetivos Página 3

Marco Teórico Página 5

Diagrama de Aplicación Página 7

Conclusión Página 9

Bibliografía Página 10
Marco Teórico

1. Descripción de Macros:

Las macros son instrucciones complejas, formada por otras instrucciones más sencillas. Esto permite la
automatización de tareas repetitivas. Se pueden programar macros en casi todos los lenguajes de
programación y sus utilidades son muy variadas, para el lenguaje assembler un macro se define de la
siguiente manera:

programa.EXE:

INICIAREGS MACRO ;Define macro


MOV AX, @data ; } Cuerpo de
MOV DS, AX ; } la definición
MOV ES, AX ; } de la macro
ENDM ; Fin de la macro

Manejo de parámetros Para hacer una macro flexible, puede definir nombres en ella como argumentos
mudos (ficticios).La definición de la macro siguiente, llamada DESPLEGAR_MSG, proporciona el uso de la
función 09H del DOS para desplegar cualquier mensaje. Cuando se usa la macroinstrucción el programador
tiene que proporcionar el nombre del mensaje, el cual hace referencia a un área de datos terminada por un
signo de dólar.

DESPLEGAR_MSG MACRO MENSAJE ; Argumento mudo


MOV AH, 09H
LEA DX, MENSAJE
INT 21H
ENDM ; Fin de la macro

Manejo de etiquetas locales Algunas macros necesitan que se definan elementos de datos y etiquetas de
instrucciones dentro de la definición de la macro. Si utiliza la macro más de una vez en el mismo programa y
el ensamblador define los elementos de datos para cada aparición, los nombres duplicados harían que el
ensamblador genere un mensaje de error. Para asegurar que cada nombre generado es único, hay que
codificar la directiva LOCAL inmediatamente después de la instrucción MACRO. Su formato general es:
LOCAL Etiqueta1, Etiqueta2...Etiquetan.

Bibliotecas de Macros Definir una macro y usarla solo una vez en un programa no es muy productivo. El
enfoque habitual es catalogar las macros en una biblioteca en disco bajo un nombre descriptivo, como
MACRO.LIB. Usted solo tiene que reunir todas las definiciones de sus macros en un archivo y almacenar el
archivo en disco:

Macro1 MACRO
....
ENDM
Macro2 MACRO
....
ENDM
2. Descripción de Instrucciones Utilizadas:

A continuación se encuentra una tabla con las instrucciones quizá más simples, pero más utilizadas
en el lenguaje ensamblador:

TRANSFERENCIA
Nombre Comentario Operación
MOV Mover (copiar) MOV Dest,Fuente
XCHG Intercambiar XCHG Op1,Op2
PUSH Apilar en la pila PUSH Fuente

ARITMETICOS
Nombre Comentario Operación
ADD Suma ADD Dest,Fuente
SUB Resta SUB Dest,Fuente
DIV División (sin signo) DIV Op
IDIV División entera con signo IDIV Op
MUL Multiplicación (sin signo) MUL Op
IMUL Multiplicación entera con signo IMUL Op
INC Incrementar INC Op
DEC Decrementar DEC Op
CMP Comparar CMP Op1,Op2

LOGICOS
Nombre Comentario Operación
NOT Invertir cada bit NOT Op
AND 'Y' (And) lógico AND Dest,Fuente
OR 'O' (Or) lógico OR Dest,Fuente
XOR 'O' (Or) exclusivo XOR Dest,Fuente

MISCELANEOS
Nombre Comentario Operación
INT Interrupción INT Num

SALTOS (generales)
Nombre Comentario Operación
CALL Llamado a subrutina CALL Proc
JMP Saltar JMP Dest
JE Saltar si es igual JE Dest
JZ Saltar si es cero JZ Dest
RET Retorno de subrutina RET
JNE Saltar si no es igual JNE Dest
JNZ Saltar si no es cero JNZ Dest
JECXZ Saltar si ECX es cero JECXZ Dest
JNP Saltar si no hay paridad JNP Dest
JPO Saltar si hay paridad impar JPO Dest

SALTOS Con Signo (Integer)


JG Saltar si es mayor JG Dest
JGE Saltar si es mayor o igual JGE Dest
JL Saltar si es menor JL Dest
JLE Saltar si es menor o igual JLE Dest
JNG Saltar si no es mayor JNG Dest
JNGE Saltar si no es mayor o igual JNGE Dest
JNL Saltar si no es inferior JNL Dest
JNLE Saltar si no es menor o igual JNLE Dest
JO Saltar si hay Overflow JO Dest
JNO Saltar si no hay Overflow JNO Dest
JS Saltar si hay Signo (=negativo) JS Dest
JNS Saltar si No hay Signo (=positivo) JNS Dest

REGISTROS INTERNOS DE LA UNIDAD CENTRAL DE PROCESO (UCP):

La UCP o CPU tiene 14 registros internos, cada uno de ellos de 16 bits (una palabra). Los
bits están enumerados de derecha a izquierda, de tal modo que el bit menos significativo es
el bit 0.

Los registros se pueden clasificar de la siguiente forma:

Registros de datos:

AX: Registro acumulador. Es el principal empleado en las operaciones aritméticas.


BX: Registro base. Se usa para indicar un desplazamiento.
CX: Registro contador. Se usa como contador en los bucles.
DX: Registro de datos. También se usa en las operaciones aritméticas.

Estos registros son de uso general y también pueden ser utilizados como registros de 8 bits,
para utilizarlos como tales es necesario referirse a ellos como por ejemplo: AH y AL, que
son los bytes alto (high) y bajo (low) del registro AX. Esta nomenclatura es aplicable
también a los registros BX, CX y DX.
Registros de segmentos:

CS: Registro de segmento de código. Contiene la dirección de las instrucciones del


programa.
DS: Registro segmento de datos. Contiene la dirección del área de memoria donde se
encuentran los datos del programa.
SS: Registro segmento de pila. Contiene la dirección del segmento de pila. La pila es un
espacio de memoria temporal que se usa para almacenar valores de 16 bits (palabras).
ES: Registro segmento extra. Contiene la dirección del segmento extra. Se trata de un
segmento de datos adicional que se utiliza para superar la limitación de los 64Kb del
segmento de datos y para hacer transferencias de datos entre segmentos.

Registros punteros de pila:

SP: Puntero de la pila. Contiene la dirección relativa al segmento de la pila.


BP: Puntero base. Se utiliza para fijar el puntero de pila y así poder acceder a los elementos
de la pila.

Registros índices:

SI: Índice fuente.


DI: Índice destino.

Puntero de instrucciones:

IP: Registro puntero de instrucción o contador de programa (PC). Contiene el


desplazamiento de la siguiente instrucción a ejecutar respecto al segmento de código en
ejecución. Por lo tanto, la dirección completa de la siguiente instrucción sería CS:IP. La
única forma de influir en este registro es de forma indirecta mediante instrucciones de
bifurcación.

Registro de banderas (flags):


Cada bandera es un bit y se usa para registrar la información de estado y de control de las
operaciones del microprocesador. Hay nueve banderas (los 7 bits restantes no se utilizan):

Banderas de estado: Registran el estado del procesador, normalmente asociado a una


comparación o a una instrucción aritmética.

CF: Bandera de acareo.


OF: Bandera de desbordamiento (aritmético).
ZF: Bandera de resultado 0 o comparación igual.
SF: Bandera de resultado o comparación negativa.
PF: Bandera de paridad (número par de bits).
AF: Bandera auxiliar. Indica si hay necesidad de ajuste en las operaciones aritméticas con
números BCD.
Banderas de control:
DF: Bandera de dirección. Controla la dirección de las operaciones con cadenas de
caracteres incrementando o decrementando automáticamente los registros índices (SI y DI)
IF: Bandera de interrupciones. Indica si están permitidas o no las interrupciones de los
dispositivos externos.
INTERRUPCIONES.

DIRECCION INTERRUPCION FUNCION


(hex) (hex)
0-3 0 Division by zero
4-7 1 Single step trace
8-B 2 Non maskable interrupt
C-F 3 Break point instruction
10-13 4 Overflow
14-17 5 Print screen
18-1F 6,7 Reserved
20-23 8 Timer
24-27 9 Keyboard interrupt
28-37 A,B,C,D Reserved
38-3B E Diskette interrupt
3C-3F F Reserved
40-43 10 Video screen I/O
44-47 11 Equipment check
48-4B 12 Memory size check
4C-4F 13 Diskette I/O
50-53 14 Communication I/O
54-57 15 Cassette I/O
58-5B 16 Keyboard input
5C-5F 17 Printer Output
60-63 18 ROM Basic entry code
64-67 19 Bootstrap loader
68-6B 1A Time of day
6C-6F 1B Get control on keyboard break
70-73 1C Get control on timer interrupt
74-77 1D Pointer to video initialization table
78-7B 1E Pointer to diskette parameter table
7C-7F 1F Pointer to table for graphics characters
80-83 20 DOS program terminate
84-87 21 DOS function call
88-8B 22 DOS terminate address
90-93 24 DOS fatal error vector
94-97 25 DOS absolute disk read
98-9B 26 DOS absolute disk write
9C-9F 27 DOS terminate, fix in storage
A0-FF 28-3F Reserved for DOS
100-1FF 40-7F Not used
200-217 80-85 Reserved by BASIC
218-3C3 86-F0 Used by BASIC interpreter
3C4-3FF F1-FF Not Used

3. Diagramas de Flujo:

Lectura de teclado y concatenación:


Diagrama de Aplicación:

Conclusiones

El lenguaje ensamblador es el lenguaje comprendido directamente por la máquina, es una


herramienta capaz de realizar cualquier operación que deseemos, pero es demasiado complicado y
trabajoso ya que estamos hablando en el lenguaje nativo de la computadora. Y debido a los
avances en los lenguajes de alto nivel es casi imposible encontrar sistemas que sean puramente en
assembler.

Das könnte Ihnen auch gefallen