Anda di halaman 1dari 9

2.1 Importancia del lenguaje ensamblador.

La importancia del lenguaje ensamblador radica principalmente que se trabaja


directamente con el microprocesador; por lo cual se debe de conocer el
funcionamiento interno de este, tiene la ventaja de que en el se puede realizar
cualquier tipo de programas que en los lenguajes de alto nivel no lo pueden
realizar. Otro punto sería que los programas en ensamblador ocupan menos
espacio en memoria.
Permitirá adentrarnos al estudio del hardware de una PC.
Este lenguaje proporciona las herramientas para tomar control sobre todo lo que la
computadora realiza físicamente.
Es importante como se puede ver, el Lenguaje Ensamblador es directamente
traducible al Lenguaje de Máquina, y viceversa; simplemente, es una abstracción
que facilita su uso para los seres humanos. Por otro lado, la computadora no
entiende directamente al Lenguaje Ensamblador; es necesario traducirle a
Lenguaje de Máquina. Pero, al ser tan directa la traducción, pronto aparecieron los
programas Ensambladores, que son traductores que convierten el código fuente
(en Lenguaje Ensamblador) a código objeto (es decir, a Lenguaje de Máquina.
Surge como una necesidad de facilitar al programador la tarea de trabajar con
lenguaje máquina sin perder el control directo con el hardware.

2.2 Manejo de la memoria: Direccionamiento (interno y externo)


El manejo de la memoria depende de que procesador tenga la máquina, entre los cuales a
continuación se mencionan los siguientes: 
        Memoria de Programa
        Memoria Externa de Datos
        Memoria Interna de Datos
        Registros de Funciones Especiales
        Memoria de Bit.
El espacio de la Memoria de Programa contiene todas las instrucciones, datos, tablas y cadenas
de caracteres (strings) usadas en los programas. Esta memoria se direcciona principalmente
usando el registro de 16 bits llamado Data Pointer. El tamaño máximo de la Memoria de
Programa es de 64 Kbytes. 
La Memoria Externa de Datos contiene todas las variables y estructuras de datos que no caben
en la memoria interna del Microprocesador. Esta memoria se direcciona principalmente por el
registro de 16 bits Data Pointer , aunque también se puede direccionar un banco de Memoria
Externa de Datos de 256 bytes usando los dos primeros registros de propósito general .

2.3Modos de direccionamiento
Se les llama modos de direccionamiento a las distintas formas de combinar los
operandos según el acceso que se hace a memoria.

Dicho de otra manera, un modo de direccionamiento será una forma de parámetro


para las instrucciones. Una instrucción que lleve un parámetro, por lo tanto, usará
un modo de direccionamiento, que dependerá de cómo direccionará (accesará) al
parámetro; una instrucción de dos parámetros, combinará dos modos de
direccionamiento.

Direccionamiento implícito

Depende solamente de la instrucción, es decir, la instrucción no lleva parámetros.

Particularmente en instrucciones que no accesan memoria, o bien que tienen una


forma específica de accesarla.

Ejemplos: PUSHF, POPF, NOP

Modo registro

Usa solamente registros como operandos

Es el más rápido, pues minimiza los recursos necesarios (toda la información fluye
dentro del EU del CPU)

Ejemplo:

MOV AX, BX

Modo inmediato

Tiene dos operandos: un registro y una constante que se usa por su valor.

El valor constante no se tiene que buscar en memoria, pues ya se obtuvo al hacer


el “fetch” de la instrucción.

Por tanto, es rápido aunque no tanto como el modo registro; requiere ir al BIU por
el dato.

Ejemplo:

MOV AH, 9
Modo directo

Uno de los operandos involucra una localidad específica de memoria

El valor constante se tiene que buscar en memoria, en la localidad especificada.

Es más lento que los anteriores, pero es el más rápido para ir a memoria, pues ya
“sabe” la localidad, la toma de la instrucción y no la tiene que calcular.

Ejemplo:

MOV AH, [0000]

MOV AH, Variable

Estas dos instrucciones serían equivalentes, si Variable está, por ejemplo, en la


localidad 0 de memoria. En la forma primitiva del lenguaje de máquina, como el
primer ejemplo, se tiene que indicar “mover a AH el contenido (indicado por los
corchetes), de la localidad 0 de los datos (lo de los datos es implícito). El lenguaje
Ensamblador, sin embargo, nos permite la abstracción del uso de variables, pero
como una variable tiene una localidad determinada en memoria, para el
procesador funciona igual. La única diferencia consiste en que el programador no
tiene que preocuparse por la dirección, ese manejo lo hace automáticamente el
Ensamblador.

Modo indirecto

Se usan los registros SI, DI como apuntadores

El operando indica una localidad de memoria, cuya dirección (sólo la parte


desplazamiento) está en SI o DI.

Es más lento que los anteriores, pues tiene que “calcular” la localidad

Ejemplos:

MOV AL, [SI]

MOV BL, ES:[SI] ; Aquí se dice que se usa un “segment override”, donde se indica
que en vez de usar el segmento de datos por defecto, se use en su lugar como
referencia el segmento extra.
Modo indexado de base

Formato:

BX o BP

+ SI o DI (opcionales)

+ constante (opcional)

BX o BP indica una localidad base de la memoria

A partir de BX o BP, se puede tener un desplazamiento variable y uno constante

La diferencia es el segmento sobre el que trabajan por defecto:

BX por defecto en el segmento de datos

BP por defecto en el segmento de pila.

Ejemplos:

MOV AX, [BX]

MOV DX, [BX+2]

MOV CX, [BX+DI]

MOV DL, [BX+SI+3]

2.4 Formato interno de un programa

Para poder comunicarnos en cualquier lenguaje, incluyendo los lenguajes de


programación, es necesario seguir un conjunto de reglas, de lo contrario no
podríamos expresar lo que deseamos.
En este apartado veremos algunas de las reglas que debemos seguir para escribir
un programa en lenguaje ensamblador, enfocándonos a la forma de escribir las
instrucciones para que el ensamblador sea capaz de interpretarlas.

Básicamente el formato de una línea de código en lenguaje ensamblador consta


de cuatro partes:

Etiqueta, variable o constante: No siempre es definida, si se define es necesario


utilizar separadores para diferenciarla de las otras partes, usualmente espacios, o
algún símbolo especial.
 
Directiva o instrucción: es el nombre con el que se conoce a la instrucción que
queremos que se ejecute.
 
Operando(s): la mayoría de las instrucciones en ensamblador trabajan con dos
operandos, aunque hay instrucciones que funcionan solo con uno. El primero
normalmente es el operando destino, que es el depósito del resultado de alguna
operación; y el segundo es el operando fuente, que lleva el dato que será
procesado. Los operandos se separan uno del otro por medio de una coma ",".
 
Comentario: como su nombre lo indica es tan solo un escrito informativo, usado
principalmente para explicar que está haciendo el programa en determinada linea;
se separa de las otras partes por medio de un punto y coma ";". Esta parte no es
necesaria en el programa, pero nos ayuda a depurar el programa en caso de
errores o modificaciones.

Como ejemplo podemos ver una linea de un programa escrito en ensamblador:

Etiq1: MOV AX,001AH ; Inicializa AX con el valor 001A

Aquí tenemos la etiqueta "Etiq1" (Identificable como etiqueta por el símbolo


final ":"), la instrucción "MOV", y los operandos "AX" como destino y "001A"
como fuente, ademas del comentario que sigue despues del ";".

Un ejemplo de una declaración de una constante esta dado por:

UNO EQU 0001H

Donde "UNO" es el nombre de la constante que definimos, "EQU" es la directiva


utilizada para usar a "UNO" como constante, y "0001H" es el operando, que en
este caso sera el valor que guarde UNO.
Formato Externo de un programa

Ademas de definir ciertas reglas para que el ensamblador pueda entender una
instrucción es necesario darle cierta información de los recursos que se van a
utilizar, como por ejemplo los segmentos de memoria que se van a utilizar, datos
iniciales del programa y también donde inicia y donde termina nuestro código.

Un programa sencillo puede ser el siguiente:

.MODEL SMALL
.CODE
Programa:
MOV AX,4C00H
INT 21H
.STACK
END Programa

El programa realmente no hace nada, únicamente coloca el valor 4C00H en el


registro AX, para que la interrupción 21H termine el programa, pero nos da una
idea del formato externo en un programa de ensamblador.

La directiva .MODEL define el tipo de memoria que se utilizará; la directiva


.CODE nos indica que lo que esta a continuación es nuestro programa; la etiqueta
Programa indica al ensamblador el inicio del programa; la directiva .

2.5 Proceso de ensamble y ligado.


Este proceso es muy sencillo y se describe a continuación:
Si está trabajando en MS-DOS siga estos pasos:
1.- Escriba el programa, tal y como aparece en el listado anterior, usando
su editor de texto preferido.
2.- Guárdelo con algún nombre y la extensión .ASM.
3.- En el símbolo del MS-DOS escriba lo siguiente 
C:\PASS32\BIN\>PASS32 Nombre.ASM –t <Enter>
4.- Ejecute el programa .COM que se genera.
Para probar el programa abra una ventana de MS-DOS y seleccione el
programa haciendo doble clic sobre el icono.
Directivas de ensamble (Seudo instrucciones)
Pass32 cuenta con algunas palabras reservadas que cumplen tareas
especiales para facilitar la programación en ensamblador, estas palabras
son llamadas seudo instrucciones o directivas de ensamble.
La siguiente es una lista de las directivas de ensamble más utilizadas en
Pass32:
DB Reserva un byte en memoria
DW Reserva una palabra (Word) en memoria o 2 bytes
DD Reserva una palabra doble (Double Word)
.EQU Se utiliza para reemplazar símbolos por valores
PROC-ENDP Se utilizan para declarar procedimientos en los programas
.MACRO-ENDM Se utilizan para declarar macros
DUP Sirve para inicializar cadenas de caracteres o arreglos numéricos 
.INCLUDE Se utiliza para obtener datos o subrutinas de otros programas
.EXTERN Declara un símbolo como externo, trabaja en conjunto con
.INCLUDE .PUBLIC Declara un símbolo como público
Los programas incluidos como ejemplos muestran la forma de utilizar
estas directivas.

2.6 Instrucciones
2.6.2 Instrucciones de comparación.

Instrucciones aritméticas. Se usan para realizar operaciones aritméticas sobre los


operandos.
ADC
ADD
DIV
IDIV
MUL
IMUL
SBB
SUB
2.6.2 Instrucciones de comparación.

Instrucciones de comparación Son usadas para comparar operandos, afectan al


contenido de las banderas.
CMP
CMPS (CMPSB) (CMPSW)

2.6.3 Instrucciones de saltos.

Instrucciones de salto Son utilizadas para transferir el flujo del proceso al


operando indicado.
JMP
JA (JNBE)
JAE (JNBE)
JB (JNAE)
JBE (JNA)
JE (JZ)
JNE (JNZ)
JG (JNLE)
JGE (JNL)
JL (JNGE)
JLE (JNG)
JC
JNC
JNO
JNP (JPO)
JNS
JO
JP (JPE)
JS

2.6.4 Instrucciones para el stack.

STACK le pide al ensamblador que reserve un espacio de memoria para las


operaciones de la pila; la instrucción END Programa marca el final del programa.

Ejemplo práctico de un programa

Aquí se ejemplificará un programa que escriba una cadena en pantalla:

.MODEL SMALL
.CODE
Programa:
MOV AX, @DATA
MOV DS, AX
MOV DX, Offset Texto
MOV AH, 9
INT 21H
MOV AX,4C00H
INT 21H
.DATA
Texto DB 'Mensaje en pantalla.$'
.STACK
END Programa

2.7 Macros
2.8 interrupciones
1) limpiar. colorear la pantalla
MOV AX,0600H
MOV BH,CO
MOV CX,FI
MOV DX,CL
INT 10H

2) mover cursois. colocar el cursor en determindada area de la ventanita del ms2


MOV AH,02H
MOV BH,00
MOV DH,FI
MOV DL,CO
INT 10H
3) entrada de datos. asignar o reservar un espacio para que pueda introducir mis datos
MOV AH,0AH 
LEA DX,ENTRADA1
INT 21H
4) desplegar. muestra una variable
MOV AH,09H
LEA DX,VAR1
INT 21H

Anda mungkin juga menyukai