Macroensamblador - Beatriz Beltrán Martínez

Download Report

Transcript Macroensamblador - Beatriz Beltrán Martínez

Macroensamblador
M C B EAT R I Z B E LT R Á N M A RT Í N EZ
VERANO 2014
Tipos de Ensambladores
Definición: Un ensamblador es un programa que
traduce mnemónicos de un procesador a si
correspondiente lenguaje de máquina.
Por la forma en que trabajan existen dos tipos de
ensambladores:
◦ Ensambladores de línea. Son aquellos que reciben
una sola línea de un programa y la ensambla
independientemente del resto del programa.
Ejemplo: el comando a del debug.
◦ Ensambladores de archivo. Son aquellos que
ensamblan todo un programa almacenado en un
archivo.
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
110
Tipos de Ensambladores
Por el tipo de información que manejan los
ensambladores se dividen también en:
◦ Ensambladores propios. (Residentes) Ensamblan
programas escritos en lenguaje del procesador con
el que trabaja la máquina. Ejemplo MASM
◦ Ensambladores
cruzados.
(Crossassembler)
Ensamblan programas escritos en lenguaje de un
procesador diferente al de la computadora de
trabajo, pero no puede ejecutarse.
◦ Macroensambladores. Ensambladores propios o
cruzados que permiten definición y expansión de
MACROS.
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
111
Macroensamblador
Facilidades de los ensambladores de archivo.
1. Nos permite definir etiquetas (nombre que nos
marca una dirección importante)
2. Nos permite reservar memoria con una etiqueta
asignada.
3. Nos permite ensamblar programas almacenados en
archivos.
4. Nos permite definir constantes.
5. Nos permite dar números en diferentes bases.
6. Nos permite evaluar expresiones aritméticas.
Ejemplo: mov ax, 30+2
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
112
Macroensamblador
MASM
◦ Recibe archivos ASCII editados en cualquier editor
que contenga programas en lenguaje ensamblador.
◦ Tales archivos deben tener extensión ASM y con una
forma específica.
◦ Algoritmo  Codificación en ensamblador  Editar
(archivo.asm)  ensamblar (masm archivo.asm) 
código de máquina (archivo.obj)  ligar  archivo
ejecutable (archivo.exe)  ejecutar.
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
113
Macroensamblador
◦ El archivo objeto no se puede ejecutar porque no
tiene la dirección de memoria donde se ejecutará y
será ligado.
◦ Definición. Una pseudoinstrucción es una
instrucción para el programa ensamblador, esto es,
que solo se ejecuta en el momento de ensamblar,
además no generar código.
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
114
Macroensamblador
Pseudoinstrucciones para definir segmentos:
◦ SEGMENT: Define el inicio de un nuevo segmento.
Su formato es:
nombre SEGMENT alineación combinación clase
◦ ENDS: Define el final de un segmento. Su formato
es:
nombre ENDS
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
115
Macroensamblador
Los parámetros del SEGMENT son información para el
ligador:
◦ Alineación: Define la dirección a partir de donde
puede colocarse el segmento:
◦ PARA: La dirección inicial del segmento es un
múltiplo de 16 (10h).
◦ PAGE: La dirección inicial del segmento es donde
empieza una página (múltiplo de 100h).
◦ WORD: La dirección inicial del segmento es una
dirección par.
◦ BYTE: EL segmento inicia donde sea.
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
116
Macroensamblador
◦ Combinación: Define la forma en que el segmento
puede combinarse con otros segmentos para que se
tenga el mismo nombre y clase.
◦ OMITIRLA: Segmento privado, es decir, no puede
combinarse.
◦ STACK: Segmento para usarse con el stack.
◦ PUBLIC: Este segmento puede unirse con todos
los segmentos del mismo y la misma clase para
formar una sola.
◦ COMMON: Todos los segmentos del mismo
nombre y clase se colocan a partir de la misma
dirección.
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
117
Macroensamblador
◦ Cuando se tienen dos segmentos con el mismo
nombre y clase y son públicos, al ligar se unen en un
solo segmento no importando que estén en
archivos distintos.
◦ Cuando se usa la psudoinstrucción COMMON van a
utilizar el mismo espacio de memoria, si son de
diferente tamaño en memoria, se toma el tamaño
del mayor bloque.
◦ Clase: Indica el tipo de datos que contiene el
segmento, siempre se ponen entre comillas y
pueden definirse propios.
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
118
Macroensamblador
◦ ‘DATA’: Datos.
◦ ‘CODE’: Código.
◦ ‘STACK’: Pila.
Pseudoinstrucciones para reservar memoria y definir
constantes:
◦ DB: Sirve para reservar un byte en la memoria con
un valor determinado. Su formato es:
[nombre] DB val1 [, val2, ..., valn]
◦ DW: Reserva un dato de dos bytes (una palabra)
con un valor inicial. Su formato es:
[nombre] DW val1 [, val2, ..., valn]
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
119
Macroensamblador
◦ DD: Reserva un dato de cuatro bytes (doble palabra)
con un valor inicial. Su formato es:
[nombre] DD val1 [, val2, ..., valn]
◦ DQ: Reserva un dato de ocho bytes (cuádruple
palabra) con un valor inicial. Su formato es:
[nombre] DQ val1 [, val2, ..., valn]
◦ DT: Reserva un dato de diez bytes con un valor
inicial. Su formato es:
[nombre] DT val1 [, val2, ..., valn]
vali representa una expresión formada por números en
cualquiera de las siguientes bases:
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
120
Macroensamblador
XXXXb
XXXXo
XXXXd
XXXX
XXXXh
MC Beatriz Beltrán Martínez
Binaria
Octal
Decimal
Decimal
Hexadecimal
ENSAMBLADOR
VERANO 2014
121
Macroensamblador
También pueden ser etiquetas o expresiones
aritméticas que involucren etiquetas o bien
cadenas de caracteres, entre apóstrofes.
◦ EQU: Permite definir constantes. Su formato es:
etiq EQU val
◦ ORG: Define un desplazamiento inicial para
ensamblar las siguientes líneas. Su formato es:
ORG val
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
122
Macroensamblador
Pseudoinstrucciones para definir procedimientos:
◦ PROC: Define el inicio de una subrutina.
nombre PROC tipo
◦ ENDP: Define el final de una subrutina.
nombre ENDP
◦ El tipo de la subrutina puede ser:
◦ NEAR: Cercano.
◦ FAR: Lejano.
◦ OMITIRLO: Se define por omisión de tipo NEAR.
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
123
Macroensamblador
Un ensamblador de archivo, revisa errores de sintaxis,
es decir, revisa que el programa esté bien escrito, más
no que funcione.
Para poner comentarios dentro del programa se inician
con un ‘;’ y todo lo que este a la derecha será un
comentario sobre el mismo renglón.
La estructura del archivo quedaría:
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
124
Macroensamblador
Datos SEGMENT PARA ‘DATA’
; Definición de variables y constantes
Datos ENDS
Pila SEGMENT PARA STACK ‘STACK’
DW 100 DUP (0) ; Indica que se tiene que
; repetir la instrucción n-veces con el
; valor que aparece en los paréntesis
Pila ENDS
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
125
Macroensamblador
Codigo SEGMENT PARA ‘CODE’
ASSUME DS:Datos, CS:Codigo, SS:Pila, ES:NOTHING
; Sirve para indicarle al macroensamblador cuales
; segmentos son usados por los registros
subrutina1 PROC
; Código de la rutina uno
subrutina1 ENDP
…
subrutina-n PROC
; Código de la rutina-n
subrutina-n ENDP
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
126
Macroensamblador
; Programa principal
Main PROC FAR
PUSH DS
; Sirve para cuando se termine el programa regrese
XOR AX, AX ; al debug o al sistema operativo según sea el caso.
PUSH AX
MOV AX, Datos
; Actualiza los registros de segmentos de datos y extra
MOV DS, AX
MOV ES, AX
Main ENDP
Codigo ENDS
END Main
; Código del programa principal.
; Le indica al macroensamblador que el ensamble terminó
MC Beatriz Beltrán Martínez
ENSAMBLADOR
VERANO 2014
127