Practico Nro 3

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 18

UNIVERSIDAD AUTÓNOMA GABRIEL RENE MORENO FACULTAD

INTEGRAL DEL CHACO

CARRERAS INGENIERÍA EN SISTEMAS E INGENIERÍA


INFORMÁTICA

“TRABAJO DE INVESTIGACIÓN”

INTEGRANTES: Jhon Brayan Samaquiri Mayan

Manuelo Apaza Wilder Rodrigo

Josué Nicolás Chacae Veizaga

Celin Barrios Rodas

José Daniel Paredes Fernández

DOCENTE: ING. OMAR CONTRERAS

MATERIA: PROGRAMACIÓN ENSAMBLADOR INF 221-CC

2022
VENTAJAS Y DESVENTAJAS DE PROGRAMACIÓN

ENSAMBLADOR
El lenguaje ensamblador o assembler es un lenguaje de programación de bajo nivel. Consiste

en un conjunto de mnemónicos que representan instrucciones básicas para los computadores,

microprocesadores, microcontroladores y otros circuitos integrados programables

VENTAJAS
1. Velocidad .- Como trabaja directamente con el microprocesador al ejecutar un
programa, pues como este lenguaje es el más cercano a la máquina la computadora lo
procesa más rápido.

2. Eficiencia de tamaño .- Un programa en ensamblador no ocupa mucho espacio en

memoria porque no tiene que cargar librerías y demás como son los lenguajes de alto

nivel

3. Flexibilidad .- Es flexible porque todo lo que puede hacerse con una máquina,

puede hacerse en el lenguaje ensamblador de esta máquina; los lenguajes de alto nivel

tienen en una u otra forma limitantes para explotar al máximo los recursos de la
máquina. O sea que en lenguaje ensamblador se pueden hacer tareas específicas que en

un lenguaje de alto nivel no se pueden llevar a cabo porque tienen ciertas limitantes

que no se lo permiten

DESVENTAJAS

1. Tiempo de programación .- Como es un lenguaje de bajo nivel requiere más


instrucciones para realizar el mismo proceso, en comparación con un lenguaje de alto nivel.
Por otro lado, requiere de más cuidado por parte del programador, pues es propenso a que los
errores de lógica se reflejen más fuertemente en la ejecución.

2. Programas fuente grandes .- Por las mismas razones que aumenta el tiempo, crecen los

programas fuentes; simplemente requerimos más instrucciones primitivas para describir

procesos equivalentes. Esto es una desventaja porque dificulta el mantenimiento de los

programas, y nuevamente reduce la productividad de los programadores.

3. Peligro de afectar recursos inesperadamente .- Que todo error que podamos cometer,

o todo riesgo que podamos tener, podemos afectar los recursos de la máquina, programar en

este lenguaje lo más común que pueda pasar es que la máquina se bloquee o se reinicialice.

Porque con este lenguaje es perfectamente posible (y sencillo) realizar secuencias de

instrucciones inválidas, que normalmente no aparecen al usar un lenguaje de alto nivel.

4. Falta de portabilidad.- Porque para cada máquina existe un lenguaje ensamblador; por

ello, evidentemente no es una selección apropiada de lenguaje cuando deseamos codificar en

una máquina y luego llevar los programas a otros sistemas operativos o modelos
REGISTROS DEL MICROPROCESADOR

Sirven para indicar el estado actual de la maquina y el resultado del procesamiento. De los 16

bits de registro de bandera 9 son comunes a toda la familia de los procesadores 8086.

Dentro del procesador hay un conjunto de registros clasificados en dos tipos:

Registros visibles al programador: permiten al programador de lenguaje máquina o de

ensamblador minimizar las referencias a memoria principal por medio de la optimización de uso

de registros

Registros de control y estado: Son utilizados por la unidad de control para controlar el

funcionamiento del procesador y por programas privilegiados del sistema operativo para

controlar la ejecución de programas.


¿CUÁLES SON SUS FUNCIONES Y TIPOS?

Los registros están divididos en seis grupos los cuales tienen un fin especifico. Los registros se

dividen en:

• Registros de segmento

• Registros de apuntadores de instrucciones

• Registros apuntadores

• Registros de propósitos generales

• Registro índice

• Registro de bandera.

REGISTROS DE SEGMENTO.

Un registro de segmento se utiliza para alinear en un límite de párrafo o dicho de otra forma

codifica la dirección de inicio de cada segmento y su dirección en un registro de segmento

supone cuatro bits 0 a su derecha.

Un registro de segmento tiene 16 bits de longitud y facilita un área de memoria para

direccionamientos conocidos como el segmento actual. Los registros de segmento son:

• Registro CS
• Registro DS
• Registro SS
• Registro ES
• Registro FS y GS
REGISTRO APUNTADOR DE INSTRUCCIONES. (IP)

El registro apuntador de instrucciones (IP) de 16 bits contiene el desplazamiento de dirección de

la siguiente instrucción que se ejecuta.

El registro IP está asociado con el registro CS en el sentido de que el IP indica la instrucción

actual dentro del segmento de código que se está ejecutando actualmente.

REGISTROS APUNTADORES.

Los registros apuntadores están asociados con el registro SS y permiten al procesador accesar

datos en el segmento de pila los registros apuntadores son dos:

• El registro SP

• El registro BP

REGISTROS DE PROPÓSITOS GENERALES.

Los registros de propósitos generales AX, BX, CX y DX son los caballos de batalla o las

herramientas del sistema. Son los únicos en el sentido de que se puede direccionarlos como

una palabra o como una parte de un byte. El ultimo byte de la izquierda es la parte "alta", y el

ultimo byte de la derecha es la parte "baja" por ejemplo, el registro CX consta de una parte

CH (alta) y una parte CL (baja), y usted puede referirse a cualquier parte por su nombre.
REGISTROS AX.

El registro AX, el acumulador principal, es utilizado para operaciones que implican

entrada/salida y la mayor parte de la aritmética. Por ejemplo, las instrucciones para

multiplicar, dividir y traducir suponen el uso del AX. También, algunas operaciones generan

códigos más eficientes si se refiere al AX en lugar de los otros registros.

REGISTRO BX.

El BX es conocido como el registro base ya que es el único registro de propósitos generales que

pueden ser unos índices para direccionamiento indexado. También es común emplear al BX para

cálculos.

REGISTRO CX.

El CX es conocido como el registro contador. Puede contener un valor para controlar el número

de veces que un ciclo se repite o un valor para corrimiento de bits, hacia la derecha o hacia la

izquierda. El CX también es usado para muchos cálculos.

REGISTRO DX.

El DX es conocido como el registro de datos. Algunas operaciones de entrada/salida requieren su

uso, y las operaciones de multiplicación y división con cifras grandes suponen al DX y al AX

trabajando juntos. Puede usar los registros de propósitos para suma y resta de cifras de 8, 16,

32 bits.

REGISTRO ÍNDICE.

Los registros SI y DI están disponibles para direccionamientos indexados y para sumas y restas.

Que son las operaciones de punta.

REGISTRO DE BANDERA.

Los registros de banderas sirven parar indicar el estado actual de la maquina y el resultado del

procesamiento, Cuando algunas instrucciones piden comparaciones o cálculos aritméticos

cambian el estado de las banderas.

Las banderas están en el registro de banderas en las siguientes posiciones:


BANDERA

Las banderas más comunes son las siguientes: OF (Over flow flag, desbordamiento).

Indica el desbordamiento de un bit de orden alto (más a la izquierda) después de una operación

aritmética.

DF (Direction flag, Direccion).

Designa la dirección hacia la izquierda o hacia la derecha para mover o comparar cadenas de

caracteres.

IF (Interruption flag, Interrupcion).

Indica que una interrupción externa, como la entrada desde el teclado sea procesada

o ignorada.
TF (Trap flag, Trampa).

Examina el efecto de una instrucción sobre los registros y la memoria. Los programas

depuradores como DEBUG, activan esta bandera de manera que pueda avanzar en la ejecución

de una sola interrupción a un tiempo.

SF (Sign flag, Signo).

Contiene el signo resultante de una operación aritmética (0=positivo y 1= negativo).

ZF (Zero flag, Zero).

Indica el resultado de una operación aritmética o de comparación (0= resultado diferente de

cero y 1=resultado igual a cero).

AF (Auxiliary carry flag, Acarreo auxiliar).

Contiene un acarreo externo del bit 3 en un dato de 8 bits, para aritmética especializada PF

(Parity flag, Paridad).

Indica paridad par o impar de una operación en datos de ocho bits de bajo orden (más a la

derecha).

CF (Carry flag, Acarreo).

Contiene el acarreo de orden más alto (más a la izquierda) después de una operación

aritmética; también lleva el contenido del último bit en una operación de corrimiento o

rotación.
TIPOS DE REGISTROS FUNCIÓN

Registros de Segmento Un registro de segmento tiene 16 bits de longitud


y facilita un área de memoria para el
direccionamiento conocido como el segmento
actual.

Registros de Apuntador de Este registro está compuesto por 16 bits y contiene


Instrucciones el desplazamiento de la siguiente instrucción que
se va a ejecutar. Los procesadores 80386 y
posteriores tiene un IP ampliado de 32 bits
llamado EIP.

Registros Apuntadores Permiten al sistema accesar datos al segmento de la


pila. Los procesadores 80386 tiene un apuntador de pila
de 32 bits llamado ESP. El sistema maneja de manera
automática estos registros.

Registros de Propósito General Son los caballos de batalla del sistema y pueden ser
direccionados como una palabra o como una parte de
un byte. Los procesadores 80386 y posteriores
permiten el uso de todos los registros de propósitos
general, más sus versiones ampliadas de 32 bits
llamados EAX, EBX,ECX y EDX.

Registros Índices Sirven para el direccionamiento de indexado y para


las operaciones de sumas y restas.

Registros de Banderas Sirven para indicar el estado actual de la maquina y el


resultado del procesamiento. De los 16 bits de registro de
bandera 9 son comunes a toda la familia de los
procesadores 8086.
¿QUÉ ES UN LINKEADOR?
El ensamblador genera el código objeto de un programa fuente y lo entrega al enlazador

(linkeador). El enlazador toma este código objeto y genera el código ejecutable para el

programa, y lo entrega al cargador. Algunas veces los programas grandes se dividen en los

subprogramas que se llaman módulos.

El resultado de la compilación de estos programas se denomina fichero objeto (object file) y por

el último el resultado del enlazado fichero ejecutable (executable file). Es este último el único

que puede entender un ordenador sin la presencia del compilador. En el caso de los lenguajes

interpretados el fichero fuente es directamente interpretado y ejecutado por el intérprete.


¿CÓMO ENSAMBLAR, ENLAZAR Y EJECUTAR?
Ensamblar

Consiste en la traducción del código fuente (archivo.asm) en código objeto (archivo .obj) y la
generación de un archivo intermedio. Cuando se ensambla se crean dos extensiones .obj y .lst.

Para enlazar un programa en caso de ser por medio de doxbox se entra en la carpeta de donde
se encuentra el ensamblador y el linkeador (enlazador)

Luego de abrir la carpeta TD se coloca el siguiente comando para ensamblar el código TASM
/zd/zi nombre y le dan enter no les debe arrojar errores ni nada si por alguna razón les arroja
un error les dirá la línea en la cual da el error y hasta que no lo corrijan no lo ensamblará
Enlazar

El programa para enlazar toma el código objeto (.obj) generado por el ensamblado y le añade
los encabezados apropiados para crear otro archivo que va hacer el ejecutable y crea las
extensiones .exe y .map
Para linkearlo se escribe el siguiente comando TLINK /v/s nombre y enter

Ejecutar

Para ejecutar, el programa crea un psp inmediatamente antes de que el programa este cargado
en memoria.
Para ver la ejecución del programa paso a paso y lo que va haciendo en cada instrucción se
entra al turbo debugger se coloca td nombre y entre y abre una pantalla así

Para ejecutar paso a paso F7, para cambiar de pantalla de las cuarto que sales F6, para ejecutar
el programa completo F9
LOS COMANDOS DE ENSAMBLADOR DEBUG

El programa DEBUG
El DOS viene con un programa llamado DEBUG que es utilizado para probar y depurar

Programas ejecutables.

Características de DEBUG:
• Despliega todo el código del programa y los datos en forma hexadecimal.

• Permite ejecutar un programa en modo de paso sencillo (un paso a la vez) de manera

Que se pueda ver el efecto de cada instrucción sobre las localidades de memoria y los

Registros.

Comandos de DEBUG
Los comandos que proporciona DEBUG nos permiten realizar diferentes operaciones

Útiles.

La mayoría de los comandos de DEBUG ejecutan una acción y vuelven al indicador, pero

Si es un comando largo, como puede ser mostrar un trozo grande de código, puede

Detenerse pulsando CTRL-Pausa o interrumpirse con CTRL-C para volver.


SOFTWARE DE PROGRAMACION ENSAMBLADOR (LINK DE
DESCARGA)

GUI Turbo Assembler

El Turbo Assembler (TASM), un paquete ensamblador principalmente destinado a la plataforma


del IBM PC y sus compatibles. Fue la oferta de Borland en el mercado de herramientas de
programación en lenguaje ensamblador para la familia de los microprocesadores x86. Como se
pudiera esperar, trabajaban bien con los compiladores de lenguaje de alto nivel de Borland
para los PC, como Turbo C, Turbo BASIC, Turbo Prolog y Turbo Pascal. Junto con el resto de suite
de lenguajes de programación Turbo. Turbo Assembler es mantenido y empaquetado por
Embarcadero Delphi y C++Builder.

El paquete Turbo Assembler vino junto con el enlazador Turbo Linker, y era interoperable
con el depurador Turbo Debugger. Para la compatibilidad con el ensamblador Microsoft
Macro Assembler (MASM) de Microsoft, TASM también podía ensamblar los archivos de código
fuente del MASM por medio de su modo MASM. Al igual que este, es un ensamblador de alto nivel.

Turbo Assembler también se refiere a un ensamblador común, basado en el


microprocesador 6502 para el Commodore 64, creado por la compañía alemana Omikron en 1985.
Este producto no se relaciona con el ensamblador de Borland.

Link de Descarga
https://sourceforge.net/projects/guitasm8086/
Procedimiento:

1. Descargamos el programa gracias al link que se encuentra arriba

2. Instalamos el programa
INSTRUCCIONES Y DIRECCIONAMIENTO DEL
MICROPROCESARO 8088/8086
El 8086 es un microprocesador de 16 bits, tanto en lo que se refiere a su estructura como en sus
conexiones externas, mientras que el 8088 es un procesador de 8 bits que internamente es casi
idéntico al 8086. La única diferencia entre ambos es el tamaño del bus de datos externo. Intel
trata esta igualdad interna y desigualdad externa dividiendo cada procesador 8086 y 8088 en dos
sub-procesadores. O sea, cada uno consta de una unidad de ejecución (EU: Execution Unit) y una
unidad interfaz del bus (BIU: Bus Interface Unit). La unidad de ejecución es la encargada de
realizar todas las operaciones mientras que la unidad de interfaz del bus es la encargada de
acceder a datos e instrucciones del mundo exterior. Las unidades de ejecución son idénticas en
ambos microprocesadores, pero las unidades de interfaz del bus son diferentes en varias
cuestiones, como se desprende del siguiente diagrama en bloques:

También podría gustarte