Subido por Kris Kriss

presentacin1-150828000244-lva1-app6892

Anuncio
INSTITUTO DE
ESTUDIO SUPERIOR
METROPOLITANO
INGENIERÍA EN TECNOLOGÍA DE LA
INFORMACIÓN
MATERIA:
LENGUAJE ENSAMBLADOR
CATEDRÁTICO:
ING. JUAN REYNOSO HERNÁNDEZ
ALUMNO:
JESÚS ADRIÁN MUÑOA MARTÍNEZ
TRABAJO:
INVESTIGACIÓN LENGUAJE
ENSAMBLADOR
INTRODUCCION

El lenguaje ensamblador, o assembler (assembly language en
inglés), es un lenguaje de programaciónde bajo nivel para los
computadores, microprocesadores, microcontroladores y otros
circuitos integradosprogramables. Implementa una representación
simbólica de los códigos de máquina binarios y otras constantes
necesarias para programar una arquitectura dada de CPU y
constituye la representación más directa del código máquina
específico para cada arquitectura legible por un programador.
Esta representación es usualmente definida por el fabricante de
hardware, y está basada en los mnemónicosque simbolizan los
pasos de procesamiento (las instrucciones), los registros del
procesador, las posiciones de memoria y otras características del
lenguaje. Un lenguaje ensamblador es por lo tanto específico de
cierta arquitectura de computador física (o virtual). Esto está en
contraste con la mayoría de los lenguajes de programación de
alto nivel,
1. FUNDAMENTOS DE
LENGUAJE ENSAMBLADOR



Al desarrollarse las primeras computadoras electrónicas, se
vio la necesidad de programarlas, es decir, de almacenar
en memoria la información sobre la tarea que iban a
ejecutar. Las primeras se usaban como calculadoras
simples; se les indicaban los pasos de cálculo, uno por uno.
Lenguaje Ensamblador es la primera abstracción del
Lenguaje de Máquina, consistente en asociar a los códigos
de operación (opcodes) palabras clave que faciliten su
uso por parte del programador.
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 el Lenguaje Ensamblador; es
necesario traducirle a Lenguaje de Máquina.





Originalmente, este proceso se hacía a mano, usando
para ello hojas donde se escribían tablas de programa
similares al ejemplo de la calculadora que vimos
anteriormente. 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).
Una característica que hay que resaltar, es que al
depender estos lenguajes del hardware, hay un distinto
Lenguaje de Máquina (y, por consiguiente, un distinto
Lenguaje Ensamblador) para cada CPU. Por ejemplo,
podemos mencionar tres lenguajes completamente
diferentes, que sin embargo vienen de la aplicación de
los conceptos anteriores:
1. Lenguaje Ensamblador de la familia Intel 80x86
2. Lenguaje Ensamblador de la familia Motorola 68000
3. Lenguaje Ensamblador del procesador POWER, usado
en las IBM RS/6000.
2. EL MICROPROCESADOR.






El microprocesador es un circuito integrado que contiene algunos o todos los
elementos necesarios para conformar una (o más) “unidad central de
procesamiento” UCP, también conocido como CPU (por sus siglas en inglés:
Central Process Unit). En la actualidad este componente electrónico está
compuesto por millones de transistores, integrados en una misma placa de silicio.
Se debe distinguir entre el concepto de Procesador, que es un concepto de
Hardware, con el concepto de CPU, que es un concepto lógico. Una CPU
puede estar soportada por uno o varios microprocesadores, y un
microprocesador puede soportar una o varias CPU.
1.- El microprocesador es la parte de la computadora diseñada para llevar
acabo o ejecutar los programas.
2.- Ejecuta instrucciones que se le dan a la computadora a muy bajo nivel
haciendo operaciones lógicas simples, como sumar, restar, multiplicar y dividir.
3.- Viene siendo el cerebro de la computadora, el motor, el corazón de esta
máquina.’‘
Esta conformado por los siguientes elementos: Memoria, Unidad Aritmetica
Logica (ALU), Puertos de Entrada y Salida (Buses), La Unidad de Control(UC) y un
reloj que sincroniza su funcionamiento.
2.1. BUSES



Buses de comunicación en un circuito impreso. En Arquitectura de
computadores , el bus es un sistema digital que transfiere datos
entre los componentes de un computador o entre computadores.
Están formado por cables o pistas en un circuito impreso,
dispositivos como resistencias y condensadores además de
circuitos integrados.
La mayoría de los buses están basados en conductores metálicos
por los cuales se trasmiten señales eléctricas que son enviadas y
recibidas con la ayuda de integrados que poseen una interfaz del
bus dado y se encargan de manejar las señales y entregarlas
como datos útiles.
Todos los buses de computador tiene funciones especiales como
las interrupciones y las DMA que permiten que un dispositivo
periférico acceda a una CPU o a la memoria usando el minimo de
recursos.
2.2. REGISTROS







Los registros del procesador se emplean para controlar
instrucciones en ejecución, manejar direccionamiento de memoria
y proporcionar capacidad aritmética. Los registros son espacios
físicos dentro del microprocesador con capacidad de 4 bits hasta
64 bits dependiendo del microprocesador que se emplee. Los
registros son direccionables por medio de una viñeta, que es una
dirección de memoria. Los bits, por conveniencia, se numeran de
derecha a izquierda (15,14,13…. 3,2,1,0), 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.
2.3. MODOS DE
DIRECCIONAMIENTO

El campo de operación de una instrucción especifica la operación que
se va a ejecutar. Esta operación debe realizarse sobre algunos datos
almacenados en registros de computadora o en palabras de memoria.
La manera en que eligen los operandos durante la ejecución del
programa depende del modo de direccionamiento de la instrucción. El
modo de direccionamiento especifica una regla para interpretar o
modificar el campo de dirección de la instrucción antes de que se haga
la referencia real al operando. Las computadoras utilizan técnicas de
modo de direccionamiento para acomodar una o las dos siguientes
consideraciones:

1.- Proporcionar al usuario versatilidad de programación al ofrecer
facilidades como apuntadores a memoria, contadores para control de
ciclo, indexación de datos y reubicación de datos.

2.- Reducir la cantidad de bits en el campo de direccionamiento de la
instrucción.
Para comprender los diferentes modos de direccionamiento que se
presentaran en esta sección, es imperativo entender el ciclo de
operación básico de la computadora. La unidad de control de una
computadora esta diseñada para recorrer un ciclo de instrucciones que
se divide en tres fases principales:




1. Búsqueda de la instrucción de la memoria.
2. Decodificar la instrucción.
3. Ejecutar la instrucción.

Hay un registro en la computadora llamado contador de
programa o PC, que lleva un registro de las instrucciones del
programa almacenado en la memoria. Pc contiene la
dirección de la siguiente instrucción que se va a ejecutar y se
incrementa cada vez que se recupera una instrucción de la
memoria. La decodificación realizada en el paso 2 determina
la operación que se va a ejecutar, el modo de
direccionamiento de la instrucción y la posición de los
operandos.

Después la computadora ejecuta la instrucción y regresa al
paso 1 para hacer la búsqueda de la siguiente instrucción en
secuencia.
Aunque la mayoría de los modos de direccionamiento
modifican el campo de dirección de la instrucción, hay dos
modos que no necesitan el campo de dirección. Son los
modos implícito e inmediato.


MODO IMPLÍCITO.

MODO INMEDIATO.

MODO DE REGISTRO.

MODO INDIRECTO POR REGISTRO.

MODO DE DIRECCIONAMIENTO DIRECTO.

MODO DE DIRECCIONAMIENTO INDIRECTO.

MODO DE DIRECCIONAMIENTO INDEXADO.

MODO DE DIRECCIONAMIENTO DE REGISTRO BASE.
3. INTERRUPCIONES.
 Una
interrupción es una operación que
suspende la ejecución de un programa
de modo que el sistema pueda realizar
una acción especial. La rutina de
interrupción ejecuta y por lo regular
regresa el control al procedimiento que
fue interrumpido, el cual entonces
reasume su ejecución.
3.1. Hardware.


Las interrupciones hardware ocurren cuando un dispositivo
necesita atención del procesador y genera una señal
eléctrica en la línea IRQ que tiene asignada. Esta señal es
recogida y procesada por el controlador de excepciones
PIC antes de ser enviada al procesador, lo que puede
realizarse de dos formas, según el tipo de interrupción sea
enmascarable o no enmascarable.
Cuando se habla de una significa que, bajo control del
software, el procesador puede aceptar o ignorar
(enmascarar) la señal de interrupción. Para ello se envía
una señal a la patilla INTR, y el procesador la atiende o la
ignora en función del contenido de un bit (IF) en un registro
(FLAGS) que puede estar habilitado o deshabilitado. En el
primer caso, cuando se recibe la señal, el procesador
concluye la instrucción que estuviese en proceso y a
continuación responde con una combinación de señales
en algunas de sus patillas componiendo una sucesión de
dos señales INTA ("Interrupt Acknowledge".



La primera señal es simplemente un aviso; la segunda es una
petición para que el PIC coloque en el bus de datos un Byte
con el número de interrupción, de forma que el procesador
pueda localizar el servicio solicitado
El valor recibido (0-255) es multiplicado por 4 para calcular la
dirección del vector correspondiente en la tabla de vectores
de interrupción, lo que se realiza mediante un
desplazamiento binario de dos posiciones a la izquierda.
Interrupción no enmascarable significa que la interrupción no
puede ser deshabilitada por software. Este tipo de
interrupciones ocurren cuando se recibe una señal en la
patilla NMI ("Nonmaskable Interrupt") del procesador. Se
reservan para casos en que es crítica la respuesta, por
ejemplo que se detecte un error de paridad en la memoria.
Además son de prioridad más alta que las enmascarables.
3.2. Software.
















Los procesadores Intel de la gama x86 y compatibles, disponen de una instrucción INT que
permite generar por software cualquiera de los 256 tipos de interrupción anteriormente
descritos. El proceso seguido es exactamente el mismo que si se recibe una interrupción
hardware en la patilla INTR, salvo que en este caso se conoce el tipo de interrupción, y no se
requiere ningún ciclo INTA.
Este tipo de interrupciones son de prioridad más alta que las de hardware (enmascarables y no
enmascarables), de forma que si se recibe una interrupción hardware mientras que se ejecuta
una software, esta última tiene prioridad.
FUNCIONES DE LA BIOS
Las funciones de la BIOS se invocan, desde los programas de usuario, ejecutando una
interrupción software con un cierto valor inicial en los registros. La BIOS emplea un cierto rango
de interrupciones, cada una encargada de una tarea específica:
INT 10h: Servicios de Vídeo (texto y gráficos).
INT 11h: Informe sobre la configuración del equipo.
INT 12h: Informe sobre el tamaño de la memoria convencional.
INT 13h: Servicios de disco (muy elementales: pistas, sectores, etc.).
INT 14h: Comunicaciones en serie.
INT 15h: Funciones casette (PC) y servicios especiales del sistema (AT).
INT 16h: Servicios de teclado.
INT 17h: Servicios de impresora.
INT 18h: Llamar a la ROM del BASIC (sólo máquinas IBM).
INT 19h: Reinicialización del sistema.
INT 1Ah: Servicios horarios.
INT 1Fh: Apunta a la tabla de los caracteres ASCII 128-255 (8x8 puntos).

FUNCIONES DEL DOS

El DOS emplea varias interrupciones, al igual que la BIOS; sin embargo,
cuando se habla de funciones del DOS, todo el mundo sobreentiende
que se trata de llamar a la INT 21h, la interrupción más importante con
diferencia.
INT 20h: Terminar programa (tal vez en desuso).
INT 21h: Servicios del DOS.
INT 22h: Control de finalización de programas.
INT 23h: Tratamiento de Ctrl-C.
INT 24h: Tratamiento de errores críticos.
INT 25h: Lectura absoluta de disco (sectores lógicos).
INT 26h: Escritura absoluta en disco (sectores lógicos).
INT 27h: Terminar dejando residente el programa (en desuso).
INT 28h: Idle (ejecutada cuando el ordenador está inactivo).
INT 29h: Impresión rápida en pantalla (no tanto).
INT 2Ah: Red local MS NET.
INT 2Bh-2Dh: Uso interno del DOS.
INT 2Eh: Procesos Batch.
INT 2Fh: Interrupción Multiplex.
INT 30h-31h: Compatibilidad CP/M-80.
INT 32h: Reservada.
















EN
ENSAMBLADOR.











Un programa en lenguaje ensamblador estará formado por una secuencia de
sentencias. Cada sentencia ocupa una sola línea y tiene la siguiente estructura:
[etiqueta] [operación] [operandos] [;comentarios]
Los cuatro campos de una sentencia son opcionales, si no aparece ninguno de
ellos (una línea en blanco) tendríamos una sentencia vacía.
Las sentencias se dividen en dos tipos:
* Instrucciones:
Estas sentencias representan órdenes al procesador y tras el proceso de
compilación generan código ejecutable.
* Directivas:
Estas sentencias dirigen el proceso de compilación o construcción del programa
ejecutable. No generan código ejecutable. Normalmente se utilizan para
aumentar la legibilidad del código fuente.
Estructura de un fichero en lenguaje ensamblador
Los ficheros de código fuente escritos en lenguaje ensamblador se organizan en
líneas. Cada una de las líneas del fichero puede contener una directiva, una
instrucción o ambas cosas a la vez en los casos en que sea posible.
Todos los ficheros fuente tienen que adecuarse a una estructura fija dividida en
secciones.


La estructura a seguir se muestra a continuación:
escala EQU 1000

;Definición de constantes simbólicas
ORIGEN 7F40h
;Definición del origen de carga del
INICIO ini
;Definición de la etiqueta que marca la
programa

;primera instrucción a ejecutar del

programa

.PILA

.DATOS
100h
;Definición de los datos del programa

dato1

…

.CODIGO

INI:


…
FIN
;Definición de la pila
VALOR 12h
MOV R5, R4
;Definición del código del programa






No existe una convención establecida para la
estructura de un programa en lenguaje ensamblador
(no como sucede con otros lenguajes, como C/C++).
Como regla de oro, es necesarios la declaración de dos
segmentos, la de código (CODE) y la de pila (STACK). En
total, hay 4 segmentos principales: Segmento de datos,
Segmento de código, Segmento de pila y Segmento
Extra.
Los diferentes segmentos tienen las siguientes funciones:
Segmento de datos: Contiene la dirección donde inicia
la declaración de variables. Aquí, escribiremos nuestras
variables.
Segmento de código: Contiene la dirección de inicio
donde se encuentran las instrucciones del programa.
Aquí, escribiremos todo el código de nuestro programa
Segmento de pila: Contiene la dirección donde se
encuentra la pila.
Segmento Extra: Contiene la dirección donde podemos
almacenar datos extras.
5. PROCEDIMIENTO DE ENSAMBLE,
ENLACE Y EJECUCIÓN




Tal como esta, el programa es solo un archivo de texto que
no puede ejecutarse; primero debe ensamblarlo y enlazarlo.
1. El paso de ensamble consiste en la traducción del código
fuente en código objeto y la generación de un archivo
intermedio .OBJ. El ensamblador también crea un
encabezado al frente del módulo .OBJ generado; parte del
encabezado tiene información acerca de direcciones
incompletas.
2. El paso de enlace implica convertir un módulo .OBJ en un
módulo de codigo maquina .EXE
3. El último paso es cargar el programa para su ejecución. Ya
que el cargador conoce en dónde está el programa apunto
de ser cargado, puede completar las direcciones indicadas
en el encabezado que estaban incompletas.
5.1. CÓMO ENSAMBLAR UN
PROGRAMA FUENTE.







Puede teclear el comando a ejecutar MASM o TASM en una
linea de comando o por medio de peticiones. Por Ejemplo:
MASM/TASM [opciones] fuente[,objeto] [,listado] [,refcruzadas]
opciones: estipula caracteristicas como configuración del nivel
de mensajes de advertencia. Ya que los valores por omisión del
ensamblador por lo regular son los adecuados, rara vez
necesitara utilizar opciones.
fuente: identifica el nombre del programa fuente, como Prog1. El
ensamblador asume que es extensión ASM de modo que no
necesita introducirla.
objeto:estipula un archivo .OBJ generado.
listado: estipula un archivo .LST generado que contiene tanto el
código fuente como el código objeto.
refcruzadas: genera un archivo de referencias cruzadas con los
simbolos usados en el programa, que puede usar para un listado
de referencias cruzadas.
5.2. CÓMO ENLAZAR UN
PROGRAMA OBJETO.







Una vez que su programa queda sin mensajes de error, el siguiente paso es
enlazar el módulo objeto, PROG1.OBJ, que producido por el ensamblador
y que sólo código de máquina. El enlazador genera un módulo .EXE y lo
inicializa con instrucciones especiales para facilitar su subsecuente carga
para ejecución. Una vez que ha enlazado uno o más módulos .OBJ en un
módulo .EXE cualquier número de veces. Pero siempre que necesite
realizar un cambio al programa, debe corregir el programa fuente,
ensamblarlo en otro módulo .OBJ y enlazar el módulo .OBJ en un módulo
.EXE.
La version del enlazador de Microsoft es LINK, mientras que la de Borland
es TLINK. La linea de comando para enlazar es:
LINK/TLINK archobj,archeje,[,archmapa][,archbibl]
Archobj identifica al archivo objeto generado por el ensamblador. El
enlazador supone la extensión, de modo que no tiene que introducirla.
Archeje estipula que se genere un archivo .EXE
Archmapa estipula que se genere un archivo con extensión con .MAP que
indica la ubicacion relativa y el tamaño de cada segmento y cualquier
error que LINK haya encontrado.
Archobj estipula la opción de bibliotecas, que no necesita en estos
primeros pasos de programación en lenguaje ensamblador.
5.3. Diagnóstico de Errores.
 El
ensamblador proporciona un
diagnóstico de cualquier error de
programación que viole sus reglas. El
programa fue corrido en TASM, genera un
listado de errores. El comando para crear
el archivo de listado (*.lst) es:
 TASM /L PROG1
5.4. Cómo Ejecutar Un
Programa.
 Si
el archivo .EXE esta en la unidad por
omisión, podria usar el DOS para cargarlo
para su ejecución introduciendo:
 PROG1.EXE o PROG1
1.6. Entorno de programación.








Antes de que el COMMAND.COM pase el control al programa que se pretende ejecutar, se
crea un bloque de 256 bytes llamado PSP (Program Segment Prefix), cuya descripción detallada
se verá en el próximo capítulo. En él aparecen datos tales como la dirección de retorno al dos
cuando finalice el programa, la dirección de retorno en caso de Ctrl-Break y en caso de errores
críticos. Además de la cantidad de memoria disponible y los posibles parámetros suministrados
del programa. Cuando el programa toma el control, DS y ES apuntan al PSP. Tipos de
programas:
En los de tipo COM:
- CS apunta al PSP e IP=100h (el programa empieza tras el PSP).
- SS apunta al PSP y SP toma la dirección más alta dentro del segmento del PSP.
En los de tipo EXE:
- CS e IP toman los valores del punto de arranque del programa (directiva END etiqueta).
- SS apunta al segmento de pila y SP = tamaño de la pila definida.
Los programas de tipo COM se cargan en memoria tal y como están en disco, entregándoseles
el control. Los de tipo EXE, que pueden llegar a manejar múltiples segmentos de código de
hasta 64 Kb, se almacenan en disco «semiensamblados». En realidad, al ser cargados en
memoria, el DOS tiene que realizar la última fase de montaje, calculando las direcciones de
memoria absolutas. Por ello, estos programas tienen un formato especial en disco, generado
por los ensambladores y compiladores, y su imagen en memoria no se corresponde realmente
con lo que está grabado en el disco, aunque esto al usuario no le importe. Por ello, no se
extrañe el lector de haber visto alguna vez ficheros EXE de más de 640 Kb: evidentemente, no
se cargan enteros en memoria aunque lo parezca.














EJEMPLO DE PROGRAMA TIPO COM.
El siguiente ejemplo escribe una cadena en pantalla llamando a uno de
los servicios estándar de impresión del DOS (función 9 de INT 21h):
cr EQU 13 ; constante de retorno de carro
lf EQU 10 ; constante de salto de línea
programa SEGMENT ; segmento común a CS, DS, ES, SS.
ASSUME CS:programa, DS:programa
ORG 100h ; programa de tipo COM
inicio: LEA DX,texto ; dirección de texto a imprimir
MOV AH,9 ; función de impresión
INT 21h ; llamar al DOS
INT 20h ; volver al sistema operativo
texto DB cr,lf,"Grupo Universitario de Informática.",cr,lf,"$"
programa ENDS ; fin del segmento
END inicio ; fin del programa y punto de inicio



EJEMPLO PROGRAMA TIPO EXE
Los programas EXE (listado al final de esta sección) requieren algo más
de elaboración. En primer lugar, es necesario definir una pila y reservar
espacio para la misma. Al contrario que los programas COM (cuya pila
se sitúa al final del segmento compartido también con el código y los
datos) esta característica obliga a definir un tamaño prudente en
función de las necesidades del programa.




























; Segmento de datos
datos SEGMENT
texto DB cr,lf,"Texto a imprimir",cr,lf,"$"
datos ENDS
; Segmento de pila
pila SEGMENT STACK 'STACK' ; poner STACK es obligatorio
DB 128 dup ('pila') ; reservados 512 bytes
pila ENDS
; Segmento de código
codigo SEGMENT
ejemplo PROC FAR
ASSUME CS:codigo, DS:datos, SS:pila
; poner dirección de retorno al DOS en la pila:
PUSH DS ; segmento del PSP
XOR AX,AX ; AX = 0
PUSH AX ; desplazamiento 0 al PSP
; direccionar segmento de datos con DS
MOV AX,datos ; AX = dirección del segmento de datos
MOV DS,AX ; inicializar DS
; escribir texto
LEA DX,texto ; DS:DX = dirección del texto
MOV AH,9
INT 21h
; volver al DOS
RET ; en realidad, RETF (PROC FAR)
ejemplo ENDP
codigo ENDS ; fin del código
END ejemplo ; punto de arranque del programa
EVOLUCIÓN DE WINDOWS












1975-1981: El surgimiento de MS-DOS.
1982-1985: Presentamos Windows 1.0.
1987–1990: Windows 2.0–2.11: más ventanas, mayor
velocidad.
1990–1994: Windows 3.0–Windows NT: se obtienen los gráficos.
1995–1998: Windows 95: el equipo se hace mayor (y no olvides
Internet).
1998–2000: Windows 98, Windows 2000, Windows Me—
Windows evoluciona para trabajar y jugar.
2001–2005: Windows XP: estable, utilizable y rápido.
2006–2008: Windows Vista: seguridad inteligente.
2009: Windows 7 presenta Windows Touch.
2012: Windows 8 presenta aplicaciones y mosaicos.
2013: Windows 8.1 amplía la visión de Windows 8.
2015: Windows 10.
CONCLUSIÓN
 NOS
DAMOS CUENTA QUE EL LENGUAJE
ENSAMBLADOR SIRVE PARA
COMUNICARNOS CON LA MAQUINA ESTO
NOS AYUDA EN PROGRAMACIÓN EN
DONDE LA MAYORÍA DE LAS COSAS LO
ASEMOS CON COMANDO QUE LA
MAQUINA ENTIENDE TODO LO QUE
CONOCEMOS A NIVEL TECNOLOGÍA ESTA
VASADO A LENGUAJE MAQUINA
BIBLIOGRAFÍA

http://gente-itsm.blogspot.mx/2011/09/unidad-1-fundamentos.html

http://atc2.aut.uah.es/~avicente/asignaturas/leoc/pdf/t1_fundam
entosdelensamblador.pdf

https://chematec.wordpress.com/2010/09/09/unidad-ifundamentos-del-lenguaje-ensamblador/

http://www.ittux.edu.mx/sites/default/files/MICROCOMPUTADORAS
_AL_DETALLE.pdf

https://es.wikipedia.org/wiki/Interrupci%C3%B3n

http://bbeltran.cs.buap.mx/Interrupciones.pdf
Descargar