Está en la página 1de 16

LENGUAJE ENSAMBLADOR

SEBASTIAN ENRIQUE FUENTES TORRES

TRABAJO ESCRITO

PROFESOR ALEX JIMENEZ DE LA CRUZ

FUNDACION UNIVERSITARIA TECNOLOGICO COMFENALCO


RESUMEN
En el presente proyecto investigativo nos centraremos en el lenguaje ensamblador, presentaremos el
concepto general de lenguaje ensamblador, sus características y algunas ventajas y desventajas que trae
consigo la implementación de este lenguaje. En particular prestaremos atención a toda la estructura que
tiene el programa ensamblador, incluyendo registros, instrucciones, directivas, modos de
direccionamiento, etc. Se realizó un estudio explicativo donde se ejecutó una amplia búsqueda de
información con el fin de presentar en detalle todo lo que trae consigo la utilización de este lenguaje,
además de presentar algunos ejemplos de su implementación, para facilitar la comprensión de este
lenguaje por parte del lector.

ABSTRACT
In this research project we will focus on the assembly language, we will present the general concept of
assembly language, its characteristics and some advantages and disadvantages that the implementation
of this language brings. In particular, we will pay attention to the entire structure of the assembly
program, including registers, instructions, directives, addressing modes, etc. An explanatory study was
carried out where a wide search for information was carried out in order to present in detail everything
that the use of this language brings, in addition to presenting some examples of its implementation, to
facilitate the understanding of this language by of the reader.

INTRODUCCION
Es una realidad que los ordenadores solo entienden el lenguaje binario que se encuentra conformado
por unos y ceros o código máquina para codificar cualquier acción por lo que surgió el lenguaje
ensamblador, el cual se presentó como un sustituto del lenguaje maquina buscando una mayor cercanía
al utilizado por los humanos, este es un lenguaje de bajo nivel que se desarrolló para acelerar la
velocidad de programación y reducir los errores que se presentan al momento de codificar. Se
encuentra íntimamente relacionado con el hardware, especialmente con el microprocesador lo que
resulta ser su mayor virtud porque el código que se genera al programar en ensamblador es bastante
optimo y competente, sin embargo, como este lenguaje es tan dependiente del microprocesador con el
que se esté trabajando, es muy probable que al momento de programar para otro tipo de
microprocesador en ocasiones no será posible debido a que el lenguaje y sus características cambian.
OBJETIVOS
 Adquirir una sólida vista del funcionamiento interno de los microprocesadores
 Comprender y utilizar eficazmente el entorno de programación en lenguaje ensamblador.
 Aprenda sobre registros, instrucciones, modos de direccionamiento y directivas que forman
parte del ensamblador

LENGUAJE ENSAMBLADOR
Inicialmente debemos tratar de definir lo que es el lenguaje ensamblador, conocido como código objeto,
es el lenguaje dominante de las computadoras, construido sobe la base de los valores únicos y ceros, es
utilizado para escribir programas informáticos de bajo nivel y además se presenta como un lenguaje de
representación más directa para cada arquitectura informática especifica de maquina legible para un
programador. Hasta el día de hoy, se usa para programar controladores de dispositivos hardware, a
partir de lo anterior podemos inferir que un ensamblador no es mas que un programa que le permite
leer un archivo de texto escrito de acuerdo con las reglas de sintaxis o el código fuente que contiene
instrucciones, datos y solicitudes de usuarios para solucionar problemas de una computadora.

CARACTERISTICAS
Los programas escritos en lenguaje ensamblador expresan las instrucciones de una manera más natural
al hombre a la vez que muy cercano al microcontrolador dado que el lenguaje ensamblador en sí mismo
es el lenguaje maquina representado por símbolos y palabras, este lenguaje trabaja con mnemónicos
que son un grupo de caracteres alfanuméricos que simbolizan las ordenes o tareas a realizar, lo que
permite que sea más fácil recordarlas, en lugar de usar números binarios como la programación en
lenguaje de maquina puro y cada una de esas sentencias corresponde a la otra en el código máquina,
este lenguaje se programan directamente en el hardware y generalmente son más rápidos y usan menos
recursos del sistema (RAM y ROM) por lo que al tener la capacidad de afectar directamente el hardware
de la CPU, existe una estrecha relación entre el funcionamiento interno del dispositivo y la lógica de
programación, los programas escritos en lenguaje ensamblador se llaman código fuente (*.asm). El
programa ensamblador facilita gracias a este fichero el correspondiente código máquina, que
generalmente tiene la extensión (*.hex).
VENTAJAS
 Velocidad: Como este lenguaje trabaja directamente con el microprocesador al ejecutar un
programa es más cercano a la máquina, mucho más compacto y por lo tanto la computadora lo
procesa más rápido.
 Tamaño: El uso del lenguaje ensamblador es más útil si se quiere reducir el tamaño del
ejecutable, mejorar el uso de la memoria y obtener beneficios de velocidad. Entre los programas
donde es muy importante minimizar el consumo de memoria se encuentran los virus y los
administradores de dispositivos (drivers). Por supuesto, muchos de ellos están escritos en
lenguaje ensamblador.
 Flexibilidad: Es flexible porque todo lo que se puede hacer en una máquina se puede hacer en
lenguaje ensamblador para esa máquina. Los lenguajes de alto nivel están restringidos de una
forma u otra para hacer un uso completo de los recursos de la máquina, los lenguajes
ensambladores no, es decir, en el lenguaje ensamblador puede realizar algunas tareas que los
lenguajes de nivel alto no pueden hacer.
 Proporciona un mayor control sobre el hardware de la computadora.

DESVENTAJAS
 Tiempo de programación: Dado que es un lenguaje de programación de bajo nivel, requiere un
mayor número de instrucciones para completar el mismo proceso que un lenguaje de alto nivel.
Po lo tanto, requiere más atención por parte del desarrollador ya que introduce errores lógicos
que se reflejan con mayor fuerza y frecuencia durante la ejecución.
 Programas fuentes grandes: Del mismo modo, el tiempo se extiende como el programa de
origen, solo necesitamos instrucciones más primitivas para describir un proceso equivalente.
Esto es un inconveniente porque hace que el programa sea más difícil de mantener y, a su vez,
reduce el rendimiento del desarrollador.
 Peligro de afectar recursos inesperadamente: Cualquier error que podamos cometer o cualquier
riesgo que podamos correr puede afectar los recursos de la máquina y la situación de
programación más común en este lenguaje es un erro o un reinicio de la máquina. Porque con
este lenguaje es bastante posible y fácil generar cadenas de comandos no validas que
normalmente no ocurrirían cuando se usa un lenguaje de alto nivel.
 Falta de portabilidad: Debido a que cada máquina tiene un lenguaje ensamblador, Obviamente,
esta no es la elección de idioma correcta cuando queremos escribir código en una máquina y
luego transferir el programa a otro sistema operativo o modelo de computadora. Aunque este
es un problema común en todos los lenguajes, es más evidente en ensamblador. Si escribimos el
programa en ensamblador del pc, no importa qué tan bien los desarrollemos y nos apeguemos a
los estándares, realmente necesitamos reescribir el 100% del código.

ESTRUCTURA
Un programa en lenguaje ensamblador se encuentra formado por líneas y cada una de estas tiene un
comentario, una instrucción o también puede ser una directiva. El nombre de las instrucciones en
ensamblador está conformado por dos, tres o cuatro letras, a estas instrucciones también se les conoce
como nombres mnemónicos o como códigos de operación, ya que representan ciertas funciones que
debe realizar el procesador.

En lo que sigue se utilizan los símbolos <> para encerrar un identificador o un número que el
programador debe escribir; los símbolos [] encierran elementos opcionales; los símbolos {} encierran
elementos que se pueden escribir de manera consecutiva en varias ocasiones; el carácter | separa
elementos opcionales.

REGISTROS
REGISTROS DE USO GENERAL:

 AX: Accumulator (AL: AH)


 BX: Registro base (BL: BH)
 CX: Registro contador (CL: CH)
 DX: Registro de datos (DL: DH)

REGISTROS PUNTEROS

 BP: Registro de apuntadores base


 SI: Registro índice fuente
 DI: Registro índice destino

REGISTROS DE SEGMENTO

 DS: Registro del segmento de datos


 ES: Registro del segmento extra
 SS: Registro del segmento de pila
 CS: Registro del segmento de código

REGISTROS ESPECIALES

 SP: Registro apuntador de la pila


 IP: Registro apuntador de la siguiente instrucción
 F: Registro de banderas (8 bits)

BITS DE REGISTRO DE BANDERAS

 Overflow
NV (Apagado): No hay desbordamiento

 Direction
UP: Hacia adelante
DN: Hacia atrás

 Interrupts
DI: Desactivadas
EI: Activadas

 Sign
PL: Positivo
NG: Negativo

 Zero
NZ: No es cero
ZR: Si lo es

 Auxiliary carry
NA: No hay acarreo auxiliar
AC: Hay acarreo auxiliar

 Parity
PO: Impar
PE: Paridad par

 Carry
NC: No hay acarreo
CY: Si lo hay

INSTRUCCIONES
Son aquellos nemónicos que son convertidos por el ensamblador en código máquina que puede ejecutar
el núcleo del microcontrolador. En la gama media (PIC16xxx) cada nemónico se convierte en una palabra
en la memoria de programa

ARITMETICAS: Se utiliza para realizar operaciones aritméticas en los operandos que contiene el
lenguaje.

 ADC: Adición con acarreo, lleva la suma de dos operandos y suma uno al resultado en caso de
que la bandera CF este activada, esto es, en caso de que exista acarreo, el resultado se guarda
en el operando destino
 ADD: agregue un operando y almacene el resultado en el operando de destino
 SUB: resta el operando de origen del destino
 DIV: Un divisor puede ser un byte o una palabra y es un operando de la instrucción.
 IDIV: esto es esencialmente lo mismo que la instrucción DIV, excepto que el siguiente comando
realiza operaciones con símbolos
 MUL: El ensamblador asume que el multiplicando es del mismo tamaño que el multiplicador,
entonces si el multiplicador es de 8 bits, multiplica el valor en el registro que se supone que es
un operando por el valor en AH, si el multiplicador es de 16 bits, multiplicar por AX.
 IMUL: Este comando hace lo mismo que el MUL, solo que si toma en cuenta los signos de las
cantidades que se multiplican.
 SBB: Su propósito es la substaccion con acarreo, esta instrucción resta los operandos y resta uno
al resultado si CF esta activada, el operando siempre se resta del destino, este tipo de
substraccion se utiliza cuando se trabaja con cantidades de 32 bits

LOGICAS: Se utilizan para realizar operaciones lógicas en los operandos.

 AND: use esta instrucción para realizar una operación “y” lógica en dos operandos.
 OR: Realiza la disyunción inclusiva lógica bit a bit de los dos operandos.
 XOR: Su función es ejecutar bit a bit la disyunción exclusiva lógica de los dos operandos.
 TEST: Realiza la concatenación de operadores bit a bit, pero a diferencia de AND, esta
instrucción no pone el resultado en el operando de destino, solo afecta el estado de las
banderas.
 NEG: Esta instrucción genera complemento a 2 para el operando de destino y los almacena en
el mismo operando.
 NO: Realiza la negación bit a bit del operando de destino.

TRANSFERENCIA: Este tipo de instrucción se utiliza para transportar el contenido del operador y cada
instrucción puede usar un modo de direccionamiento diferente.

 MOV: Tiene como propósito la transferencia de datos entre celdas de memoria, registros y
acumulador, Sintaxis: MOV Destino, Fuente
Donde destino es el lugar a donde se moverán los datos y fuente es el lugar donde se
encuentran dichos datos.
 MOVS: Mover cadenas de bytes o palabras desde la fuente, direccionada por SI, hasta el destino
direccionado por DI, Sintaxis: MOVS
Este comando no necesita parámetros ya que toma como dirección fuente el contenido del
registro SI y como destino el contenido de DI.

CARGA: Estas son instrucciones específicas de los registros. Son usadas para cargar en algún registro
bytes o cadenas de bytes.

 LODS (LODSB)(LODSW): Se utilizan para cargar cadenas de un byte o palabra al acumulador,


Sintaxis: LODS
Esta instrucción toma la cadena que se encuentre en la dirección especifica por SI, la carga al
registro AL (o AX) y suma o resta, 1 (según el estado de DF) a SI si la transferencia es de bytes o 2
si la transferencia es de palabras.
Los comandos LODSB y LODSW se utilizan de la misma forma, el primero carga un byte y el
segundo una palabra (utiliza el registro completo AX)
 LAHF: esta instrucción es útil para verificar el estado de las banderas durante la ejecución de
nuestro programa, Sintaxis: LAHF
 LDS: El propósito de esta instrucción es cargar el registro del segmento de datos, Sintaxis: LDS
destino, fuente.
El operando fuente debe ser una palabra doble en memoria. La palabra asociada con la
dirección más grande es transferida a DS, o sea que se toma como la dirección del segmento. La
pablara asociada con la dirección menor es la dirección del desplazamiento y se deposita en el
registro señalado como destino
 LEA: Se usa para cargar la dirección del operando fuente, Sintaxis: LEA destino, fuente.
El operando fuente debe estar ubicado en memoria, y se coloca su desplazamiento en el registro
índice o apuntador especifico en destino
 LES: Carga el registro del segmento extra, sintaxis: LES destino, fuente.
El operando fuente debe ser un operando en memoria de palabra doble. El contenido de la
palabra con la dirección mayor se interpreta como la dirección del segmento y se coloca en ES.
La palabra con la dirección menor es la dirección del desplazamiento y se coloca en el registro
especifico en el parámetro destino.

PILA: Estas instrucciones permiten el uso de la pila para almacenar y extraer datos.

 POP: Tiene como propósito recuperar un dato de la pila, Sintaxis: POP destino.
Esta instrucción permite transferir el ultimo valor almacenado en la pila al operando destino,
después incrementa en dos el registro SP. Este incremento se debe a que la pila va creciendo
desde la dirección más alta de memoria del segmento hacia la más baja, y la pila solo trabaja
con palabras (2 bytes), entonces al incrementar en dos el registro SP realmente se le está
restando dos al tamaño real de la pila.
 POFF: Su función es extraer las banderas almacenadas en la pila, Sintaxis: POFF, este comando
transfiere bits de la palabra almacenada en la parte superior de la pila hacia el registro de
banderas.
 PUSH: El propósito de esta instrucción es colocar una palabra en la pila, Sintaxis: PUSH fuente.
La instrucción PUSH decrementa en dos el valor de SP y luego transfiere el contenido del
operando fuente a la nueva dirección resultante en el registro recién modificado
 PUSHF: Se utiliza para colocar el valor de las banderas en la pila, Sintaxis: PUSHF.
Este comendo decrementa en 2 el valor del registro SP y luego se transfiere el contenido del
registro de banderas a la pila, en la dirección indicada por SP, las banderas quedan almacenadas
en memoria en los mismos bits indicados en el comando POPF.

SALTO: Estas instrucciones se caracterizan por el operador contiene una dirección de memoria en la cual
debe continuar la ejecución en el caso que la instrucción así lo determine.

 JMP: El propósito de esta instrucción es el salto incondicional, Sintaxis: JMP destino


Esta instrucción se utiliza para desviar el flujo de un programa sin tomar en cuenta las
condiciones actuales de las banderas ni de los datos
 JA (JNBE): Brinco condicional, Sintaxis: JA etiqueta.
El salto se realiza solo si la bandera CF esta desactivada o si la bandera ZF esta desactivada (que
alguna de las dos sea igual a cero).
 JAE (JNB): Salto condicional, Sintaxis: JAE etiqueta.
El salto se efectúa si CF esta desactivada.
 JB (JNAE): Salto condicional, Sintaxis: JBE etiqueta.
Se efectúa el salto si CF esta activada
 JBE (JNA): Salto condicional, Sintaxis JBE etiqueta.
Salta si CF esta activada o si ZF está activado (que cualquiera sea igual a 1)
 JE (JZ): Salto condicional, Sintaxis: JE etiqueta.
El salto se realiza si ZF esta activada
 JNE (JNZ): Salto condicional, Sintaxis: JNE etiqueta
Salta si no es igual o salta si no es cero, El salto se efectúa si ZF esta desactivada.
 JG(JNLE): Salto condicional, se toma en cuenta el signo, Sintaxis: JG etiqueta.
Salta si es más grande o salta si no es menor o igual. El salto ocurre si ZF = 0 u OF = SF.
 JGE (JNL): Salto condicional, se toma en cuenta el signo, Sintaxis: JGE etiqueta.
Salta si es más grande o igual o salta si no es menor que. El salto se realiza si SF = OF
 JL (JNGE): Salto condicional, se toma en cuenta el signo, Sintaxis: JL etiqueta
Salta si es menor que o salta si no es mayor o igual. El salto se efectúa si SF es diferente de OF
 JLE (JNG): Salto condicional, se toma en cuenta el signo, Sintaxis: JLE etiqueta
Salta si es menor o igual o salta si no es más grande. El salto se realiza si ZF= 1 o si SF es
diferente a OF.
 JC: Salto condicional, se toma en cuenta las banderas, Sintaxis: JC etiqueta.
Salta si hay acarreo. El salto se realiza si CF = 1.
 JNC: Salto condicional, se toma en cuenta el estado de las banderas, Sintaxis: JNO etiqueta.
Salta si no hay acarreo. El salto se efectúa si CF = 0.
 JNO: Salto condicional, se toma en cuenta el estado de las banderas, Sintaxis: JNO etiqueta.
Salta si no hay desbordamiento. El salto se efectúa si OF = 0.
 JNP (JPO): Salto condicional, toma en cuenta el estado de las banderas, Sintaxis: JNP etiqueta
Salta si no hay paridad o salta si la paridad es non. El salto ocurre si PF = 0.
 JNS: Salto condicional, toma en cuenta el estado de las banderas, Sintaxis: JNP etiqueta
Salta si el signo esta desactivado. El salto se efectúa si SF = 0.
 JO: Salto condicional, toma en cuenta el estado de las banderas, Sintaxis: JO etiqueta.
Salta si hay desbordamiento (overflow). El salto se realiza si OF = 1.
 JP (JPE): Salto condicional, toma en cuenta el estado de las banderas. Sintaxis: JP etiqueta
Salta si hay paridad o salta si la paridad es par. El salto se efectúa si PF = 1.
 JS: Salto condicional, toma en cuenta el estado de las banderas. Sintaxis: JS etiqueta
Salta si el signo este prendido. El salto se efectúa si SF = 1.

BUCLE: Es muy frecuente que se necesite ejecutar un grupo de instrucciones cierto número de vece, por
ello, la mayoría de las máquinas tienen instrucciones específicas para ello.

 LOOP: El propósito de esta instrucción es generar un ciclo en el programa, Sintaxis: LOOP


etiqueta.
La instrucción LOOP decrementa CX en 1, y transfiere el flujo del programa a la etiqueta dada
como operando si CX es diferente a 1.
 LOOPE: El propósito de esta instrucción es generar un ciclo en el programa considerando el
estado de ZF, Sintaxis: LOOPE etiqueta.
Esta instrucción decrementa CX en 1. Si CX es diferente a cero y ZF es igual a 1, entonces el flujo
del programa se transfiere a la etiqueta indicada como operando.
 LOOPNE: El propósito de esta instrucción es generar un ciclo en el programa, considerando el
estado de ZF, Sintaxis: LOOPNE etiqueta.
Esta instrucción decrementa en uno a CX y transfiere el flujo del programa solo si ZF es diferente
a 0.
 DEC: Se utiliza para decrementar el operando, Sintaxis: DEC destino.
Esta operación resta 1 al operando destino y almacena el nuevo valor en el mismo operando
 INC: Se utiliza para incrementar el operando, Sintaxis: INC destino.
La instrucción suma 1 al operando destino y guarda el resultado en el mismo operando destino.
 CMP: Su propósito es comparar los operandos, Sintaxis: CMP destino, fuentes
Esta instrucción resta el operando fuente al operando destino, pero sin que éste almacene el
resultado de la operación, solo se afecta el estado de las banderas.
 CMP (CMPSB)(CMPSW): Esta instrucción se usa para comparar los operandos, Sintaxis: CMP
destino, fuente
Con esta instrucción la cadena de caracteres fuente se resta de la cadena destino. Se utilizan DI
como índice para el segmento extra de la cadena fuente y SI como índice de la cadena destino,
solo se afectara el contenido de las banderas y tanto DI como SI se incrementan

INSTRUCCIONES DE BANDERA:

 CLC: Su propósito es limpiar bandera de acarreo, Sintaxis: CLC


Esta instrucción apaga el bit correspondiente a la bandera de acarreo, en otras palabras, lo pone
en cero.
 CLD: El propósito de esta instrucción es limpiar la vadera de dirección, Sintaxis: CLD
La instrucción CLD pone en cero el bit correspondiente a la bandera de dirección.
 CLI: Se utiliza para limpiar la bandera de interrupción, Sintaxis: CLI
CLI pone en cero la bandera de interrupciones, deshabilitando así aquellas interrupciones
enmascarables. Una interrupción enmascarable es aquella cuyas funciones son desactivadas
cuando IF = 0.
 CMC: Su propósito es complementar la bandera de acarreo, Sintaxis: CMC
Esta instrucción complementa el estado de la bandera CF, si CF = 0 la instrucción la iguala a 1, y
si es 1 la instrucción la iguala a 0.
Podemos decir que únicamente “invierte” el valor de la bandera.
 STC: El propósito de esta instrucción es activar la bandera de acarreo, Sintaxis: STC
Esta instrucción pone la bandera CF en 1.
 STD: Se utiliza para activar la bandera de dirección, Sintaxis: STD
La instrucción STD pone la bandera DF en 1.
 STI: Esta instrucción se usa activar la bandera de interrupción, Sintaxis: STI
La instrucción activa la bandera IF, esto habilita las interrupciones externas enmascarables (Las
que funcionan únicamente cuando IF = 1).

DIRECTIVAS
Son Pseudoinstrucciones que controlan el proceso de ensamblado del programa, son ejecutadas en el
tiempo de ensamblado y no por la CPU en tiempo de ejecución, al no afectar al microprocesador no
generan código objeto, pueden ser utilizadas para reservar áreas de almacenamiento y opcionalmente
para asignar su contenido inicial, además de definir segmentos, símbolos, procedimientos o subrutinas,
reservar memoria, etc.
EQU (EQUivalence): La directiva EQU especifica un nombre simbólico para el valor de una expresión. El
compilador, cuando encuentre en el código dicho nombre simbólico, lo sustituirá por el valor de la
expresión.

DB (Define Byte): La directiva DB reserva memoria para datos de tipo byte (8 bits), o para una variable
de este tipo, inicializando o no dicho byte y los posteriores.

SEGMENT: Esta directiva se utiliza para definir el inicio de un segmento, el nombre de este segmento
debe estar presente, ser único y cumplir las convenciones para nombres del lenguaje.

END: Indica el final de un segmento y debe contener el mismo nombre del enunciado SEGMENT.

ASSUME: Esta directiva tiene como objetivo indicar al ensamblador qué segmento va a direccionar cada
uno de los registros de segmento. Esta directiva sigue, normalmente, a la directiva SEGMENT.

PAGE: Se utiliza para designar el número máximo de líneas para listar en una página y el número
máximo de caracteres por línea.

TITLE: Se utiliza para hacer que se imprima un título en la línea 2 de cada página.

PROC-ENDP: Estas directivas se utiliza para definir el inicio y el final de un procedimiento, que es un
conjunto de sentencias a las que se les puede acceder directamente llamando al procedimiento.

INTERRUPCIONES
Una interrupción es un caso especial que detiene la ejecución del programa para que el sistema pueda
actuar. Esto sucede, por ejemplo, cuando un periférico requiere la atención del procesador para realizar
una operación de E/S.

Las interrupciones son quizás el mecanismo más importante para conectar un microcontrolador al
mundo exterior, sincronizando la ejecución del programa con eventos externos.

A continuación, presentare algunos ejemplos de interrupciones.

int 01h  Un solo paso


int 02h  Interrupción no enmascarable

int 03h  Punto de interrupción

int 04h  Desbordamiento

int 05h  Impresión de pantalla

int 08h  Cronometro

int 015h  Servicio del sistema

int 16h  Funciones de entrada del teclado

int 18h  Entrada con el Basic de Rom

int 19h  Cargador ed arranque

int 1Ah  Leer y establecer la hora

int 1Bh  Obtener el control con una interrupción de teclado

int 2oh  Terminar un programa

int 33h  Funciones de Ratón

MACRO
Una macro es un grupo de instrucciones repetidas en un programa que se codifica una sola vez
y se puede utilizar tantas veces como sea necesario.

La principal diferencia entre una macro y un procedimiento es que en una macro es posible
pasar parámetros mientras que en un procedimiento no. Cuando se ejecuta la macro, cada
parámetro se reemplaza con el nombre o valor especificado cuando se llamó.

Entonces podemos decir que un procedimiento es una extensión de cierto programa, mientras
que una macro es un módulo con funciones específicas que pueden ser utilizadas por otros
programas en conjunto.

Otra diferencia entre macro y procedimiento es como se llama a cada uno, para llamar a un
procedimiento se requiere el uso de una directiva, en cambio la llamada a la macro se ejecuta
como si fuera una instrucción en ensamblador.
La directiva de terminación de una macro es ENDM.
MODOS DE DIRECCIONAMIENTO
El modo de direccionamiento determina cómo interactúan los campos de operandos con los
registros y el procesador. Todas las instrucciones que se refieren a datos, ubicaciones de
memoria, registros o combinaciones de los mismos difieren en sus operadores. Cada una de
estas referencias define cómo se procesan las sentencias y los resultados en el programa.
Modo Registro: Se utilizan únicamente registros como los operadores, no necesita calcular la
Dir. Absoluta. En este modo de direccionamiento se transfiere un byte o palabra desde el
registro fuente o localidad en memoria, hasta el registro o localidad destino en la memoria
ejemplo MOV CX, DX copia el contenido de tamaño de palabra en el registro DX y lo pasa al
registro CX.
Modo Inmediato: Consta de dos operandos, un registro y una constante que se usa por su
valor, este valor constante no se tiene que buscar en memoria ya que se obtuvo al hacer el
“fetch” de la instrucción, por lo que es rápido, pero no más que el modo registro el cual requiere
al BIU por el dato.
Modo Directo: La dirección del operando viene incluida en la instrucción, aquí el procesador
calcula la dirección real, El valor constante se tiene que buscar en memoria, en la localidad
especificada, es más lento que los modos de direccionamiento anteriores sin embargo es el
más veloz para ir a memoria puesto que al saber la dirección y la toma de la instrucción no
tiene que calcularla.
Modo Indirecto: En este modo de direccionamiento el operando se encuentra en memoria y la
instrucción contiene una dirección que se emplea para leer en memoria una dirección
intermedia que será la verdadera dirección del objeto buscado.
Modo Indexado: El procesador es quien calcula la dirección efectiva, el operando se encuentra
en memoria y el registro índice se modifica a menudo en la ejecución del programa.

EJEMPLO DE LENGUAJE ENSAMBLADOR


APLICACIONES DEL LENGUAJE ENSAMBLADOR

En los primeros días de la informática y la programación, las aplicaciones se desarrollaban total


o parcialmente utilizando uno de estos lenguajes ensambladores. Esto se debe a que los
recursos disponibles para procesar información son bastante limitados y el lenguaje
ensamblador es una solución muy rentable para implementar aplicaciones eficientes. Dicho
esto, funcionó bien dada la pequeña cantidad de memoria y potencia de CPU disponible en la
computadora en ese momento.
Se presentarán algunos ejemplos de como se usa hoy día el lenguaje ensamblador.
Consolas de Videojuegos: El panel de control de videojuegos requiere un control de software y
hardware que está idealmente optimizado para que lo implementen de manera efectiva y
rápida. Por esta razón, los desarrolladores este tipo de dispositivo utiliza el lenguaje de
ensamblaje para registrar el código requerido que se beneficiará del final del dispositivo
existente. Esto significa que funcionará bien con la memoria baja y la potencia del procesador
se calcula en la computadora de esta época.
Sistemas Embebidos: Los sistemas integrados son programas que controlan las funciones de
varios dispositivos específicos. Los dispositivos de este tipo se programan en lenguaje
ensamblador porque son pequeños y se pueden almacenar fácilmente en las ROM de estos
dispositivos. Debido a la implementación de una sola función, su desarrollo no es demasiado
complicado. Hoy en día, el lenguaje ensamblador más utilizado es la programación de
microcontroladores para sistemas integrados.
Controladores de dispositivos de hardware: Los controladores de dispositivos son básicamente
programas de computadora que permiten que su sistema operativo interactúe directamente con
los dispositivos periféricos. El propósito de esto es que el usuario pueda usarlo sin saber cómo
funciona, simplemente haga clic en un botón y obtenga el resultado. No puede usar hardware
sin controladores de dispositivo.Debido a esta situación, la programación de controladores de
dispositivos se realiza mediante lenguaje ensamblador porque se tiene acceso directo al
hardware para hacer lo que el diseñador quiere y presentárselo al usuario de la forma más
sencilla y amigable posible.

LINKS

 https://carteleras.webcindario.com/asm_ant.pdf

 https://es.wikipedia.org/wiki/Lenguaje_ensamblador#Detalles_adicionales

 https://www.mat.uson.mx/lcota/Lenguaje%20ensamblador.htm

 https://www.ecured.cu/Lenguaje_ensamblador

 https://www.monografias.com/trabajos103/introduccion-al-lenguaje-

ensamblador/introduccion-al-lenguaje-ensamblador

 https://www.ecured.cu/Lenguaje_ensamblador

También podría gustarte