unidad i.- lenguaje ensamblador

19
 Instituto Tecnológico de Durango Lenguaje Ensamblador  Ingeniería en Sistemas Computacionales Ing. José Lauro Solís Gallegos Unidad I Introducción En esta ocasión, vamos a impartir la materia de Lenguaje Ensamblador (LE), jóvenes, alguno de ustedes a oído hablar sobre el LE? Efectivamente el LE es un lenguaje de programación, pero porque el nombre de LE?. En un principio, las computadoras se programaban directamente en el lenguaje natural de ellas, es decir, el lenguaje binario, ó ceros y unos, las personas que programaban estas primeras computadoras eran científicos que estaban muy relacionados con el lenguaje binario, y por supuesto lo entendían muy bien. Con la evolución de la electrónica y la tecnología de las computadoras, éstas se hicieron más pequeñas y más accesibles a empresas e instituciones de mediano tamaño, entonces hizo falta programarlas de una manera más fácil que en lenguaje binario ó lenguaje máquina. Ahora, se denomina lenguaje máquina  a la serie de datos que la parte física de la computadora o hardware, es capaz de interpretar. Una computadora digital o, mejor di cho, su parte física, sólo distingue datos de tipo binario, es decir, constituidos por dos únicos valores a los que se denomina valor 0 y valor 1 y que, físicamente, se materializan con tensiones de energía comprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios, respectivamente, entonces, para representar datos que contengan una información, se utilizan una serie de unos y ceros que en conjunto indican dicha información. Por otra parte, la información que hace que el hardware de la computadora realice una determinada actividad se llama instrucción . Por consiguiente una instrucción es un conjunto de unos y ceros. Las instrucciones así formadas equivalen a acciones elementales de la máquina, por lo que al conjunto de dichas instrucciones que son interpretadas directamente por la máquina se denomina lenguaje máquina . El lenguaje máquina fue el primero que empleo el hombre para la programación de las primeras computadoras, allá por los años 40´s y 50´s. Una instrucción en lenguaje máquina puede representarse de la siguiente forma: 011011001010010011110110 Esta secuencia es fácilmente ejecutada por la computadora, pero es de difícil interpretación para el hombre, siendo aun más difícil la interpretación de un programa (conjunto de instrucciones) escrito de esta forma. Esta dificultad hace que los errores sean frecuentes y la corrección de los mismos costosa, cuando no imposible, al igual que la verificación y modificación de los programas. Macrocomputadora ENIAC, programada directamente por el usuario

Upload: pedro-castro

Post on 08-Jul-2015

407 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 1/19

Instituto Tecnológico de Durango  Lenguaje Ensamblador  Ingeniería en Sistemas Computacionales Ing. José Lauro Solís Gallegos

Unidad IIntroducciónEn esta ocasión, vamos a impartir la materia de Lenguaje Ensamblador (LE), jóvenes, alguno de ustedes a oídohablar sobre el LE?

Efectivamente el LE es un lenguaje de programación, pero porque el nombre de LE?. En un principio, las

computadoras se programaban directamente en el lenguaje natural de ellas, es decir, el lenguaje binario, ó ceros yunos, las personas que programaban estas primeras computadoras eran científicos que estaban muy relacionadoscon el lenguaje binario, y por supuesto lo entendían muy bien.

Con la evolución de la electrónica y la tecnología de las computadoras, éstas se hicieron más pequeñas y másaccesibles a empresas e instituciones de mediano tamaño, entonces hizo falta programarlas de una manera másfácil que en lenguaje binario ó lenguaje máquina.

Ahora, se denomina lenguaje máquina a la serie de datos que la parte física de la computadora o hardware, escapaz de interpretar.

Una computadora digital o, mejor dicho, su parte física, sólo distingue datos de tipo binario, es decir, constituidospor dos únicos valores a los que se denomina valor 0 y valor 1 y que, físicamente, se materializan con tensiones

de energía comprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios, respectivamente, entonces, para representardatos que contengan una información, se utilizan una serie de unos y ceros que en conjunto indican dichainformación.

Por otra parte, la información que hace que el hardware de la computadora realice una determinada actividad sellama instrucción .

Por consiguiente una instrucción es un conjunto de unos y ceros. Las instrucciones así formadas equivalen aacciones elementales de la máquina, por lo que al conjunto de dichas instrucciones que son interpretadasdirectamente por la máquina se denomina lenguaje máquina .

El lenguaje máquina fue el primero que empleo el hombre para la programación de las primeras computadoras, allápor los años 40´s y 50´s. Una instrucción en lenguaje máquina puede representarse de la siguiente forma:

011011001010010011110110

Esta secuencia es fácilmente ejecutada por la computadora, pero es de difícil interpretación para el hombre, siendoaun más difícil la interpretación de un programa (conjunto de instrucciones) escrito de esta forma. Esta dificultadhace que los errores sean frecuentes y la corrección de los mismos costosa, cuando no imposible, al igual que laverificación y modificación de los programas.

Macrocomputadora ENIAC, programada directamente por el usuario

Page 2: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 2/19

Ya se ha dicho que en un principio el programador empleaba directamente el lenguaje máquina, entonces era elmismo Programador quién debía introducir el código binario a la computadora (codificar), y además entender elresultado (decodificar) que la misma computadora entregaba, que por supuesto estaba también en código binario.

Puede usted imaginarse algún caso específico de esto?

Por ejemplo: 011011001010010011110110

La anterior secuencia de dígitos binarios (bits) puede indicar a la computadora que:

<<Traslade el contenido de la posición de memoria X a la posición de memoria Y>>Si lo vemos escrito de esta última forma, lo entenderemos fácilmente, ya que está en nuestro lenguaje natural, perola máquina elemental será incapaz de entender nada. Vemos, pues, que la forma de indicar a la máquina lo quedebe hacer es totalmente diferente de la indicar a un ser humano lo mismo, por lo que deben emplearse sistemas de traducción de una forma a otra.

Con la práctica en el manejo de la máquina se cayó en la cuenta de que se podría utilizar la propia máquina paraayudar en la traducción de los programas (codificación). Es decir, que si a una máquina elemental se le dotaba deun programa, también elemental, que tradujera un número determinado de caracteres alfabéticos en una secuenciade unos y ceros, se podría escribir un programa constituido por una secuencia de grupos de caracteres alfabéticos,en la que cada uno de los grupos indicaría una acción a realizar por la computadora y, una vez escrito el programa,sería la propia máquina la que pasaría los grupos de caracteres a bits.

Las ventajas de esto son evidentes, ya que para el hombre resulta más fácil manipular grupos de caracteres y latraducción se haría de manera automática. Por ejemplo, se podría escribir:

TRASLADAR 10100100, 11110110

Esto indicaría que el contenido de la posición 11110110 había que pasarlo a la posición 10100100 si se sabe queal grupo alfabético TRASLADAR le corresponde (o equivale) la secuencia de bits 01101100. La máquina traduciríala anterior instrucción como:

01101100 11010110 00011101

Al grupo alfabético se le denomina mnemotécnico , y existirá un mnemotécnico por cada instrucción. Se le da estenombre porque sirve para recordar con mayor facilidad el conjunto de instrucciones de una determinada máquina.

De esta forma aparecieron los lenguajes ensambladores (Assembler, en inglés), y poco a poco con el avance de laprogramación (Software), estas primeras y sencillas ayudas se fueron haciendo más complejas, permitiendo que,además de los mnemotécnicos correspondientes a la operación a realizar, se pudieran emplear otros para indicar,por ejemplo, los operandos (por ejemplo el de : sumar). La anterior secuencia de bits se podría escribir de lasiguiente forma:

TRASLADAR POS-A POS-B

Que nos resulta de más fácil comprensión.

A los programas que permiten pasar del programa escrito de esta manera (programa fuente) al lenguaje máquina  también se les denomina normalmente ensambladores . Estos traductores, como ya se ha dicho, se fueroncomplicando cada vez más para que la labor del programador fuera más fácil, incluyendo los denominadosdirectivas del ensamblador , que son órdenes o informaciones que el programador da al traductor, no instrucciones

a traducir.

Aun con todas estas sofisticaciones y ayudas, el programador de lenguaje ensamblador debe conocer el sistemafísico (Hardware) de la máquina con que trabaja, pues aunque emplee mnemotécnicos, etiquetas, directivas, etc.,éstas sirven para indicar una posición de memoria determinada, un registro o cualquier otra parte de la máquina, yestos son elementos que se deben de conocer.

Por eso se dice que el lenguaje ensamblador  es un lenguaje de bajo nivel , es decir, ligado con el hardwareconcreto de una determinada máquina. Aquí radica la diferencia importante con los lenguajes más complejos,llamados de alto nivel, como el C, Basic, Pascal, Cobol, etc., ya que en éstos el programador no tiene porquereconocer el hardware de la máquina. Trabaja con variables, constantes e instrucciones simbólicas, y es eltraductor quien las transforma en las direcciones e instrucciones apropiadas.

Entonces, el lenguaje de programación que hemos utilizado (como el C++ por ejemplo), requiere de un proceso de“traducción”, lo que nosotros escribimos es el código fuente, como la instrucción: cout<<”Hola Mundo”;. El software

Page 3: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 3/19

que traduce este código fuente a Lenguaje Ensamblador, se llama Programa Compilador , y el código ya enLenguaje Ensamblador, es traducido a Lenguaje Máquina (ejecutable), por un programa llamado ProgramaEnsamblador.

Pirámide de Traducción del Software

Sistemas NuméricosComo se había comentado antes, el código binario es el lenguaje que utiliza la computadora para realizar todassus funciones internamente (hardware), este lenguaje está formado por 2 símbolos, el cero (0) y el uno (1). Estos 2símbolos representan la función básica interna de una computadora, la ausencia (0) la presencia (1) de tensióneléctrica o voltaje.

El sistema numérico decimal, es el que estamos acostumbrados a usar, este tiene 10 símbolos (0,1,2,3,4,5,6,7,8,9), y cuando es necesaria representar cantidades mayores a 9 (o sea de 10 en adelante), se utiliza unacombinación de símbolos.

En el sistema numérico binario se pueden representar las mismas cantidades que en decimal, solo que solo seusan dos símbolos, y por consiguiente, la expresión de las cantidades se verá expresada con más digitos. Porejemplo: El número 2008 en decimal, expresado en binario sería: 11111011000. A esta serie de unos y ceros se lallama secuencia de bits , y son exactamente 11 bits.

El proceso de conversión es el denominado divisiones sucesivas , el cual consiste en ir dividiendo entre dos lacantidad inicial en decimal (en este caso 2008), y luego ir calculando el residuo entero, entonces se dice que: 2008entre 2, es igual a 1004 y sobra 0. 1004 entre 2, es igual a 502 y sobra 0, 502 entre 2, es igual a 251 y sobra 0, 251entre 2 es igual a 125 y sobra 1, 125 % 2 = 62, y sobra 1, 62 % 2 = 31, y sobra 0, 31 % 2 = 15, y sobra 1, 15 % 2 =7, y sobra 1, 7 % 2 = 3, y sobra 1, 3 % 2 = 1, y sobra 1, 1 % 2 = NO TOCA, y solo sobra 1.

Y el resultado final será que 2008 decimal convertido a binario es: 11111011000.

Page 4: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 4/19

Al bit ubicado en la posición más a la izquierda se le llama bit más significativo (MSB del inglés: More SignificantBit), pues es el que más vale numéricamente, y al ubicado más a la derecha se le llama bit menos significativo(LSB del inglés: Least Significant Bit).

Para realizar el proceso inverso, convertir de binario a decimal, se representa el número en binariomatemáticamente como se hace en decimal, por ejemplo, en decimal, el número 2008 está expresado de formaabreviada, matemáticamente el número 2008 se representa así: (2x103) + (0x102) + (0x101) + (8x100) = 2000 + 0 +0 + 8 = 2008.

Entonces para convertir 11111011000 binario a decimal, se tendría que: (1x210

) + (1x29

) + (1x28

) + (1x27

) + (1x26

)+ (0x25) + (1x24) + (1x23) + (0x22) + (0x21) + (0x20) = 1024 + 512 + 256 + 128 + 64 + 0 + 16 + 8 + 0 + 0 + 0 = 2008.

El sistema numérico decimal es usado por los programadores en sus códigos y operaciones, el binario es usadointernamente por la computadora, pero existen otros sistemas numéricos adicionales que sirven comointermediarios entre los dos primeros, así muchos sistemas de cómputo y programas (software de sistema) utilizanal sistema numérico hexadecimal (formado por 16 símbolos) y el sistema octal (formado por 8 símbolos).

Los símbolos del hexadecimal serán: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

Los símbolos para el octal serán: 0, 1, 2, 3, 4, 5, 6, 7

Observe que para el caso del sistema numérico hexadecimal, existe un símbolo para expresar la cantidad 10

(diez), que es el símbolo A, y para la cantidad 15 (quince) es el símbolo F.

El proceso de conversión de decimal a hexadecimal es similar a l de decimal a binario, solo que ahora la divisiónes entre 16 (dieciséis).

En el proceso inverso (de hexadecimal a decimal), se realiza lo mismo que de binario a decimal, solo que ahorra labase es 16. Entonces se tiene que 7D8 hexadecimal a decimal será: (7x162) + (13x161) + (8x160) = 1792 + 208 + 8= 2008.

Nótese que al representar cantidades en hexadecimal, el número de dígitos es menor, mientras que en binario, elnúmero de dígitos para la misma cantidad es mayor.

Para que supone que lo anterior pueda servir?

En resumen, podemos decir que entre más sea la cantidad de símbolos que se usen en un sistema numérico,menor será la cantidad de dígitos que se utilicen para representar las cantidades, y al revés, entre menos sea lacantidad de símbolos en un sistema numérico, mayor será la cantidad de dígitos que se utilicen para representarlas cantidades.

Ejercicio: Exprese una cantidad arriba y una cantidad abajo de las mostradas a continuación (están enhexadecimal).FF0F FEFF FF AF FFFA F9

Respuesta: En el primer ejemplo (FF0F), una cantidad arriba será: FF10, y una cantidad abajo: FF0E.

Page 5: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 5/19

El Microprocesador

El corazón de la computadora es el microprocesador,éste maneja las necesidades aritméticas, de lógica yde control de la computadora.

El microprocesador tiene su origen en la década delos sesenta, cuando se diseño el circuito integrado(IC por sus siglas en ingles) al combinar varios

componentes electrónicos en un solo componentesobre un "chip" de silicio.

Chip Intel 8008

Inicialmente los fabricantes colocaron este diminuto chip en un dispositivo parecido a un ciempiés y lo conectaron aun sistema en funcionamiento. A principios de los años setenta Intel (la principal fabricante de Microprocesadores)introdujo el chip 8008 el cual, instalado en una computadora terminal, acompaño a la primera generación demicroprocesadores, y con esto, se dio inicio a la gran cantidad y tipos de procesadores que se tienen hoy en día.

Tabla de procesadores Intel (2006)

La variedad de microcomputadoras también ocasiono un renovado interés en el lenguaje ensamblador, cuyo usoconlleva a diferentes ventajas:- Un programa escrito en el lenguaje ensamblador requiere considerablemente menos memoria y tiempo deejecución que un programa escrito en los conocidos lenguajes de alto nivel, como Pascal y C.- El lenguaje ensamblador da a un programador la capacidad de realizar tareas muy técnicas que serian difíciles, sino es que imposibles de realizar en un lenguaje de alto nivel.- El conocimiento del lenguaje ensamblador permite una comprensión de la arquitectura de la maquina que ningún

lenguaje de alto nivel puede ofrecer.- Aunque la mayoría de los especialistas en Software desarrolla aplicaciones en lenguajes de alto nivel, que sonmás fáciles de escribir y de dar mantenimiento, una practica común es recodificar en lenguaje ensambladoraquellas rutinas que han causado cuellos de botella en el procesamiento.- Los programas residentes y rutinas de servicio de interrupción casi siempre son desarrollados en el lenguajeensamblador.

Los lenguajes de alto nivel fueron diseñados para eliminar las particularidades de una computadora especifica,mientras que un lenguaje ensamblador esta diseñado para una computadora especifica, o, de manera máscorrecta, para una familia especifica de microprocesadores.

Para el aprendizaje del lenguaje ensamblador no es necesario lo siguiente:- Conocimiento previo de un lenguaje de programación, aunque tenerlo puede ayudarle a comprender algunos

conceptos de programación más rápido.- Conocimiento avanzado de electrónica o circuiteria.

En resumen, podemos decir que el LE es el lenguaje del Microprocesador, este recibe todas las órdenes en LE,luego convierte las ordenes que recibió en códigos binarios, que después se mandan al resto de la circuiteria en elsistema.

Todos los microprocesadores reciben órdenes en LE, pero existen varios tipos de Lenguajes Ensambladores, noes lo mismo una arquitectura de Microcomputadora ó PC, a una arquitectura de Macintosh, o Workstation, mientrasen las PC´s se utiliza un LE compatible con Intel, en las otras arquitecturas se puede usar un LE compatible con laempresa Motorola. Específicamente, las computadoras compatibles con IBM o Intel, usan un LE llamado “del8086”, y una computadora de la marca Apple, puede usar un ensamblador compatible con un software llamado “delZ80”.

Por popularidad y facilidad de uso y acceso, el LE que se utilizará en este curso es el compatible con el 8086, de laempresa Intel

Page 6: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 6/19

Unidades funcionalesUn elemento importante del hardware de la PC es la unidad del sistema, que contiene una tarjeta de sistema,fuente de poder y ranuras de expansión para tarjetas opcionales. Los elementos de la tarjeta de sistema son unmicroprocesador, memoria de solo lectura (ROM) y memoria de acceso aleatorio (RAM).

El cerebro de la PC y compatibles es un microprocesador basado en la familia 8086 de Intel (ó alguno genérico,como los AMD, Cyrix, o serie K), que realiza todo el procesamiento de datos e instrucciones. Los procesadoresvarían en velocidad y capacidad de memoria, registros y bus de datos. Un bus de datos transfiere datos entre elprocesador, la memoria y los dispositivos externos.

Aunque existen muchos tipos de computadoras digitales según se tenga en cuenta su tamaño, velocidad deproceso, complejidad de diseño físico, etc., los principios fundamentales básicos de funcionamiento sonesencialmente los mismos en todos ellos.

Se puede decir que una computadora está formada por tres partes fundamentales, aunque una de ellas essubdividida en dos partes no menos importantes. En la figura siguiente se muestran dichas partes, llamadasgenéricamente unidades funcionales debido a que, desde el punto de vista del funcionamiento, sonindependientes.

El nombre de cada parte nos indica la función querealiza. Así, la Unidad Central de Proceso (CPU) esla que coordina el funcionamiento conjunto de lasdemás unidades y realiza los cálculos necesarios;

por eso la podemos subdividir en una Unidad deControl (UC) y en una unidad de cálculo o UnidadAritmético-Lógica (UAL), y adicionalmente unaMemoria Interna, llamada Registros del CPU.

La unidad de Memoria Principal (MP) se encarga dealmacenar las instrucciones que realizará la Unidadde Control al ejecutar un programa y los datos queserán procesados. La Unidad de Entradas y Salidasserá la encargada de la comunicación con el exteriora través de los periféricos.

Estos periféricos pueden ser: de entrada, como los teclados; de salida, como los tubos de rayos catódicos (CRT ómonitor), y de entrada y salida, como los discos magnéticos.

Descripción GeneralUnidad Central de Proceso.- La CPU constituye el cerebro de una computadora digital, pues realiza todas lasoperaciones aritméticas y lógicas sobre los datos y además controla todos los procesos que se desarrollan en lacomputadora. Por ejemplo, para que se ejecute una instrucción, ésta debe estar en el interior de la CPU,concretamente en la UC y si hay que realizar cálculos, interviene la UAL.

Unidad de Control.- Para realizar su tarea la UC necesita conocer, por un lado, la instrucción y, por otro, una seriede informaciones adicionales que deberá tener en cuenta para coordinar, de forma correcta, la ejecución de lainstrucción. El resultado de la interpretación de dichas informaciones son una serie de órdenes a los diferenteselementos de la computadora.

La UC no emite todas las órdenes a la vez, sino siguiendo una determinada secuencia. Para ello utiliza unelemento que le va indicando el instante en que debe ejecutar una determinada fase de la instrucción. A esteelemento se le denomina Reloj, y se dice que sincroniza las acciones de la UC; cuanto más rápido marque eltiempo, más rápida será la ejecución de la instrucción. Sin embargo, hay un límite, ya que, si marca excesivamenterápido, es posible que no puedan cumplir adecuadamente las órdenes de los diferentes elementos, por lo que seproducirán errores.

Unidad Aritmético – Lógica.- La unidad aritmético lógica (UAL) es la encargada de realizar los cálculos. Los datossobre los que se realizan las operaciones se denominan operandos. Al elemento encargado de ejecutar lasoperaciones se le denomina operador, y esta formado por una serie de circuitos electrónicos que son capaces desumar dos números binarios o hacer las operaciones lógicas elementales: disyunción, conjunción y negación;incluso algunos operadores son también capaces de multiplicar, dividir y realizar otras operaciones mas complejas.

Para que el operador realice la operación, los operandos se llevan a la UAL y se guardan en unos registrosdenominados registros de trabajo. El resultado de la operación se guarda también en un registro antes de ser

Page 7: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 7/19

llevado a la memoria o a la unidad de entradas y salidas. Frecuentemente se utiliza un mismo registro para guardaruno de los operandos y también el resultado, a este se le denomina Registro Acumulador .

Unidad de Memoria Principal.- La memoria principal esta formada por un conjunto de unidades llamadas palabras(ó Localidades de Memoria ). Dentro de cada una de estas palabras se guarda la información que constituye unainstrucción o parte de ella (puede darse el caso de que una sola instrucción necesite varia palabras), o un dato oparte de un dato (también un dato puede ocupar varias palabras).

A la cantidad de palabras que forman la MP se le denomina capacidad de memoria . De este modo, cuanto mayor

sea el número de palabras mayor será el número de instrucciones y datos que podrá almacenar la computadora.Una palabra esta formada a su vez de unidades mas elementales llamadas bits, del mismo modo que en ellenguaje natural una palabra esta formada por letras. Cada bit solo puede guardar dos valores, el valor 0 o el valor1; por eso se dice que son elementos binarios.

El número de bits que forman una palabra se llama longitud de palabra (ó tamaño de palabra). Por regla general,las computadoras potentes tienen memorias con longitud de palabra grande, mientras que las computadoraspequeñas tienen memorias con longitud de palabra menor.

En la figura siguiente se muestra como puede estar organizada una Memoria Principal y los componentes másimportantes de una memoria.

Organización de una unidad de memoria

Componentes de la memoria

En la figura de la izquierda, las palabras forman una matriz de 10 filas y 10 columnas. La primera palabracorresponderá con la dirección 00, la segunda con la 01, y la ultima, con la 99. La capacidad de la memoria será de10 * 10 = 100 palabras. También se muestra la longitud de la palabra 38, que es de 8 bits, al igual que las demás, yla información que contiene, que es el valor binario 10011010.

Las palabras se distinguen entre si por la posición que ocupan en la MP, y se puede guardar una información yluego recuperarla indicando el numero de dicha posición. A los números que señalan las posiciones de memoria seles da el nombre de direcciones de memoria.

La acción de guardar una información en una palabra de la memoria se llama acceso de escritura , y la acción derecuperarla, acceso de lectura . Los accesos son coordinados por la UC.

Unidad de Entradas y Salidas.- Ya se ha visto en las secciones precedentes como funcionan la CPU y la MP, peropuede decirse que es necesaria la comunicación entre el interior de la computadora y su entorno o periferia. Estacomunicación se consigue a través de dispositivos de muy diversos tipos, como son: teclados, impresoras,pantallas, discos magnéticos, etc. Es estos dispositivos se les conoce con el nombre genérico de periféricos.

En la figura siguiente se muestran algunos periféricos conectados a la Unidad de E/S, la cual hace de intermediariaentre los periféricos y la CPU. Las flechas indican el sentido en que fluye la información.

Page 8: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 8/19

 

La unidad de E/S hace de intermediaria entre la UCP y los periféricos  

La coordinación de la comunicación entre los periféricos y la CPU la realiza la Unidad de E/S. Obsérvese que estano es un periférico sino un dispositivo que gestiona a los periféricos siguiendo las ordenes de la CPU; es decir, laUnidad de E/S recibe de la Unidad de Control información sobre el tipo de transferencia de datos que debe realizar(si es de entrada o de salida) y periférico que debe de utilizar; si es de salida recibirá también el dato que debeenviar y el momento de la operación.

Entonces, la Unidad de E/S seleccionara el periférico y ejecutara la operación teniendo en cuenta lascaracterísticas propias de cada periférico. Una vez ejecutada la orden avisará a la UC de la terminación de latransferencia.

Cada periférico o parte de un periférico tendrá asignado un numero o dirección que servirá para identificarlo.Cuando la UC quiera seleccionarlo enviara dicho número a la Unidad de E/S.

Para solucionar el problema de la imposibilidad de saber cuanto tiempo durara una transferencia de informacióncon un periférico se han desarrollado diversas técnicas de comunicación entre la CPU y los periféricos.

Lo más sencillo es que la CPU, cuando desee hacer una transferencia de información con un periférico, pregunte ala Unidad de E/S si dicho periférico se encuentra disponible. Si no lo esta, debe repetir la pregunta una y otra vezhasta obtener una respuesta afirmativa, en cuyo caso se inicia la transferencia de información.

Si se desea obtener mayor rendimiento de la computadora, se puede emplear otro método que se denominasincronización mediante interrupción . La característica de este método es que la CPU, en lugar de dedicarse apreguntar a la Unidad de E/S por el periférico que desea utilizar, lo que hace es indicar a la Unidad de E/S quedesea hacer una transferencia con el periférico, y seguidamente, si no esta el periférico preparado, empieza otratarea, olvidándose momentáneamente del periférico.

Cuando este preparado, la Unidad de E/S indicara a la CPU que puede realizarse la transferencia; entonces, laCPU interrumpirá la tarea que esta realizando y atenderá al periférico. De esta forma, la CPU no pierde tiempoesperando al periférico.

Interconexión de las unidades funcionalesEn los temas anteriores hemos visto las funciones que realiza cada unidad de la computadora, y que se deben decomunicar entre ellas para pasarse información. Estas informaciones se transmiten en forma de señales eléctricasy, por tanto, circulan a través de conductores eléctricos.

Ya sabemos que en un sistema digital las informaciones se encuentran codificadas en binario formando grupos debits. Cada bit de uno de estos grupos se suele enviar de una unidad a otra por un conductor diferente al del restode los bits. De esta forma, si el grupo esta constituido por 8 bits, serán necesarios 8 conductores; si lo forman 16bits, se emplearan 16 conductores; etc. Se hace así para ahorrar tiempo, ya que circulan todos los bits de un

Page 9: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 9/19

mismo grupo a la vez, cada uno por su conductor. A esta forma de enviar los datos se le denomina transmisión en paralelo .

Cuando la CPU quiere leer o escribir en una determinada posición de memoria, enviara la dirección, en paralelo, ala memoria por un conjunto de conductores eléctricos al que se denomina bus de direcciones , ya que se utilizaexclusivamente para enviar direcciones. Así mismo, los datos leídos o los que se quieren escribir se trasladanmediante un conjunto de conductores eléctricos denominado bus de datos . Las ordenes de la CPU a la MP y lasrespuestas de la MP a la CPU son enviadas por un tercer conjunto de conductores llamado bus de control .

En la figura siguiente se muestran las conexiones de la CPU con la MP. Se han dibujado en la figura (a) todos losconductores eléctricos suponiendo que se emplean 8 hilos para el bus de datos, 16 para el de direcciones y 3 parael de control. En la practica no se dibujan todos los hilos para simplificar las figuras y se hace como en las figuras(b) y (c).

Interconexiones entre la UCP y la MP 

Existen varias formas de interconectar las unidades funcionales de la computadora entre si. Una de ellas empleaun único conjunto de buses, como puede apreciarse en la figura siguiente (a), al que se conectan todas lasunidades. Esto obliga a que, en un determinado instante, solo dos unidades puedan estar haciendo uso del mismo;si hay que enviar algo a la tercera unidad, se deberá esperar a que quede libre.

Formas de interconexión 

Page 10: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 10/19

La principal ventaja de este sistema de interconexión es su bajo costo, y la principal desventaja, su mayor lentitud.

Además, si se emplea el mismo bus de direcciones para indicar la de un periférico y la de una posición dememoria, no podrá coincidir el número de ningún periférico con ninguna dirección de memoria; si así lo hicieran, seproducirán errores al seleccionarse a la vez el periférico y la posición de memoria. Por lo tanto, se tendrá cuidadoen asignar a los periféricos direcciones que no coincidan con las de la MP. En estos casos se dice que losperiféricos están mapeados en memoria, ya que la CPU no distingue entre las transferencias a periféricos y a MP.

Otra forma de interconectar las unidades de la computadora consiste en emplear conjuntos de buses diferentes

para la Unidad de E/S y la MP. De esta forma, aunque se encarece el sistema, se gana en velocidad y se puedenemplear direcciones iguales para nombrar periféricos y a posiciones de memoria. La CPU, si quiere seleccionar unperiférico, utiliza el bus de la Unidad de E/S, y si quiere seleccionar una posición de memoria, utiliza el bus dememoria. En este caso se dice que los periféricos no están mapeados en memoria. En la figura anterior (b) semuestra una posible conexión con el bus múltiple.

Registros del ProcesadorLos registros del procesador se emplean para controlar instrucciones en ejecución, manejar direccionamiento dememoria y proporcionar capacidad aritmética. Los registros son direccionables o utilizables por medio de unnombre. Los bits por convención, se numeran de derecha a izquierda, como en:

... 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

Los registros son la memora interna de un CPU, y varían en número como en tamaño según el modelo demicroprocesador del que se esté hablando, así, en la arquitectura del 80286, se tienen 13 registros todos de 16bits.

Los registros en la CPU 80286, se pueden catalogar en 5 diferentes secciones: Los registros Generales, losregistros de Segmento, los registros Apuntadores, los registros Índices, y el registro de Banderas. Es importanteaclarar que todos los registros de la CPU 80286 son de un tamaño de 16 bits, y solo los registros generales sepueden usar completos de 16 bits o por mitades de 8 bits.

Registros de propósito generalLos registros de propósito general son: el Acumulador (AX), el Base (BX), el Contador (CX) y el registro de datos(DX), estos son los caballos de batalla del sistema. La forma de usar en programación en LE estos registros, escon su nombre abreviado, entonces si quiere hacer referencia al registro acumulador, deberá usar el nombre “AX”.

Los registros generales son únicos respecto a los demás, en el sentido de que se pueden direccional ó usar comouna palabra (16 bits) o como una parte de tamaño de un byte (8 bits). El byte de la izquierda es la parte "alta", y elbyte de la derecha es la parte "baja". Por ejemplo, el registro AX consta de una parte AH (alta) y una parte Al(baja), y usted puede referirse a cualquier parte por su nombre.

Registro AX. El registro AX, el acumulador principal, es utilizado para operaciones que implican entrada/salida y lamayor parte de la aritmética. Por ejemplo, las instrucciones para multiplicar, dividir y traducir suponen el uso delAX.

También, algunas operaciones generan código más eficiente si se refieren al AX en lugar de a los otros registros.

Registro BX. El BX es conocido como el registro base ya que es el único registro de propósito general que puedeser índice para direccionamiento indexado (direccionamiento de memoria). También es común emplear el BX paracálculos.

Registro CX. El CX es conocido como el registro contador, y es utilizado para realizar ciclos y bucles, este registroestá relacionado con todo lo referente a repeticiones de código, aunque no es el único que se puede usar pararealizar ciclos..

Page 11: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 11/19

Registro DX. El DX es conocido como el registro de datos. Algunas operaciones de entrada/salida requieren uso, ylas operaciones de multiplicación y división con cifras grandes suponen al DX y al AX trabajando juntos.

Pude usar los registros de propósito general para suma y resta de cifras de 8, 16 o 32 bits. Los registros indicadosen las figuras con el nombre de EAX, EBX, ECX y EDX, son los registros de 32 bits que se usan en procesadoresmás modernos al 286. La letra “E” es del ingles “Extended” ó extendido.

La programación en LE se basa en 3 niveles, programación básica, programación media y programaciónavanzada. En el primer caso, solo se utilizan los registros generales, para el caso segundo y tercero, se utilizan elresto de los registros, y es en este tipo de programación donde se alcanza a visualizar el potencial del LE, claro esque para llegar a estos niveles de programación se requiere de una constante práctica y avance en los tipos ycaracterísticas de los programas realizados.

Los registros de SegmentoUn registro de segmento tiene 16 bits de longitud y facilita un área de memoria para direccionamiento conocidacomo el segmento actual. Los cuatro registros de segmento son: registro de Segmento de Código (CS.- del Inglés“Code Segment”), Segmento de Datos (DS.- del inglés “Data Segment”), Segmento se Pila (SS.- del inglés “StackSegment”) y Segmento Extra (ES.- del inglés “Extra Segment”).

Registro CS. El DOS (Sistema Operativo de Disco) almacena la dirección inicial del segmento de código de unprograma en el registro CS. Esta dirección de segmento, mas un valor de desplazamiento en el registro apuntadorde instrucción (IP), indica la dirección de una instrucción que es buscada para su ejecución.

Registro DS. La dirección inicial de un segmento de datos de programa es almacenada en el registro DS. Entérminos sencillos, esta dirección, mas un valor de desplazamiento en una instrucción, genera una referencia a lalocalidad de un byte especifico en el segmento de datos.

Registro SS. El registro SS permite la colocación en memoria de una pila, para almacenamiento temporal dedirecciones y datos. El DOS almacena la dirección de inicio del segmento de pila de un programa en el registroSS.

Registros ES. Algunas operaciones con cadenas de caracteres (datos de caracteres) utilizan el registro extra desegmento para manejar el direccionamiento de memoria. En este contexto, el registro ES esta asociado con elregistro DI (índice).

Los registros de segmento son utilizados cuando se quiere crear un programa en el que se defina manualmente laszonas o segmentos de que está constituido, es decir, un programa en cualquier lenguaje de programación, estáformado por 4 partes importantes, estas son: el segmento de código, el de datos, el de pila y el extra, cada uno deestos segmentos tiene su propia función y en conjunto forman a un programa de computadora. Por ejemplo, en elsegmento de datos se encuentran todas las variables y datos que un programa pueda usar y necesitar, en cambioen el segmento de código, se encuentra todas las instrucciones que el programa deberá seguir para realizar lafunción para la cual se diseño.

Registros Apuntadores.

Los registros SP (del inglés “Stack Pointer” ó apuntador de la pila) y BP (del inglés “Base Pointer” ó apuntador debase) están asociados con el registro SS y permiten al sistema acceder datos en el segmento de la pila.

Registro SP. El apuntador de la pila de 16 bits esta asociado con el registro SS y proporciona un valor dedesplazamiento que se refiere a la palabra actual que esta siendo procesada en la pila. Los procesadores 80386 yposteriores tienen un apuntador de pila de 32 bits, el registro ESP. El sistema maneja de forma automática estosregistros.

Registro BP. El BP de 16 bits facilita la referencia de parámetros, los cuales son datos y direcciones transmitidosvía pila. Los procesadores 80386 y posteriores tienen un BP ampliado de 32 bits llamado el registro EBP.

Registros Índice.Los registros SI (del inglés “Source Index” ó índice fuente) y DI (del inglés “Destination Index” ó índice destino)

están disponibles para direccionamiento indexado y para sumas y restas.

Registro SI. El registro índice fuente de 16 bits es requerido por algunas operaciones con cadenas (de caracteres).

Page 12: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 12/19

En este contexto, el SI esta asociado con el registro DS. Los procesadores 80386 y posteriores permiten el uso deun registro ampliado de 32 bits, el ESI.

Registro DI. El registro índice destino también es requerido por algunas operaciones con cadenas de caracteres.En este contexto, el DI esta asociado con el registro ES. Los procesadores 80386 y posteriores permiten el uso deun registro ampliado de 32 bits, el EDI.

Registro de Banderas.De los 16 bits del registro de banderas, nueve son comunes a toda la familia de procesadores 8086, y sirven para

indicar el estado actual de la maquina y el resultado del procesamiento. Muchas instrucciones que realizancomparaciones y operaciones aritméticas, cambian el estado de las banderas, y esto sirve para que la CPU puedapara determinar la acción subsecuente. Por ejemplo, en una operación de sumar dos números, el resultado puedeser negativo, entonces se encenderá un bit de signo, donde se le “recuerda” ó indica a la CPU que tome lasmedidas correspondientes.

Los bits de las banderas comunes son los siguientes:- OF (Overflow, desbordamiento). Indica desbordamiento de un bit de orden alto (mas a la izquierda) después deuna operación aritmética.- DF (dirección). Designa la dirección hacia la izquierda o hacia la derecha para mover o comparar cadenas decaracteres.- IF (interrupción). Indica que una interrupción externa, como la entrada desde el teclado, sea procesada oignorada.

- TF (trampa). Permite la operación del procesador en modo de un paso. Los programas depuradores, como elDEBUG, activan esta bandera de manera que usted pueda avanzar en la ejecución de una sola instrucción a untiempo, para examinar el efecto de esa instrucción sobre los registros de memoria.- SF (signo). Contiene el signo resultante de una operación aritmética (0 = positivo y 1 = negativo).- ZF (cero). 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 (acarreo auxiliar). Contiene un acarreo externo del bit 3 en un dato de 8 bits para aritmética especializada.- PF (paridad). Indica paridad par o impar de una operación en datos de 8 bits de bajo orden (mas a la derecha).- CF (acarreo). Contiene el acarreo de orden mas alto (mas a la izquierda) después de una operación aritmética;también lleva el contenido del ultimo bit en una operación de corrimiento o de rotación.

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

Las banderas mas importantes para la programación en ensamblador son O, S, Z y C, para operaciones decomparación y aritméticas, y D para operaciones de cadenas de caracteres. Los procesadores 80286 y posteriorestienen algunas banderas usadas para propósitos internos, en especial las que afectan al modo protegido. Losmodos de funcionamiento llamados como “protegido” y “virtual”, son usados exclusivamente cuando el CPU realizaprocesos de multitarea. Los procesadores 80286 y posteriores tienen un registro extendido de banderas conocidocomo Eflags.

Métodos de direccionamiento

El campo de operación de una instrucción especifica la operación que se va a ejecutar. Esta operación deberealizarse sobre algunos datos almacenados en registros de computadora o en palabras de memoria. La maneraen que eligen los operandos durante la ejecución del programa depende del modo de direccionamiento  de lainstrucción.

El modo de direccionamiento especifica una regla para interpretar o modificar el campo de dirección de lainstrucción antes de que se haga la referencia real al operando. Las computadoras utilizan técnicas de modo dedireccionamiento 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.

La disponibilidad de los modos de direccionamiento proporciona al programador con experiencia en lenguajeensamblador la flexibilidad para escribir programas más eficientes en relación con la cantidad de instrucciones y eltiempo de ejecución.

Page 13: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 13/19

Para comprender los diferentes modos de direccionamiento que se presentaran en esta sección, es imperativoentender el ciclo de operación básico de la computadora. La unidad de control de una computadora esta diseñadapara 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 (del inglés “Program Counter”), que llevaun 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. Ladecodificación realizada en el paso 2 determina la operación que se va a ejecutar, el modo de direccionamiento dela 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 siguienteinstrucción en secuencia.

En algunas computadoras el modo de direccionamiento de la instrucción se especifica con un código binariodistinto, como se hace con el código de operación. Otras computadoras utilizan un código binario único querepresenta la operación y el modo de la instrucción. Pueden definirse instrucciones con diversos modos dedireccionamiento y, en ocasiones, se combinan dos o más modos de direccionamiento en una instrucción.

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ícitoEn este modo se especifican los operandos en forma implícita en la definición de la instrucción. Por ejemplo, lainstrucción "complementar acumulador" es una instrucción de modo implícito porque el operando en el registro deacumulador esta implícito en la definición de la instrucción. De hecho todas las instrucciones de referencia aregistro que utilizan un acumulador son instrucciones de modo implícito.

Modo InmediatoEn este modo se especifica el operando en la instrucción misma. En otras palabras, una instrucción de modoinmediato tiene un campo operando, en lugar de un campo de dirección. Un campo de operando contiene eloperando real que se va a usar junto con la operación especificada en la instrucción. Las instrucciones de modoinmediato son útiles para inicializar registros en un valor constante.

Se menciono antes que el campo de dirección de una instrucción puede especificar una palabra de memoria o unregistro de procesador. Cuando el campo de dirección especifica un registro de procesador se dice que lainstrucción esta en modo de registro.

Modo de RegistroEn este modo, los operandos están en registros que residen dentro de la CPU. Se selecciona el registro particularde un campo de registro en la instrucción.

Modo Indirecto por RegistroEn este modo la instrucción especifica un registro en la CPU cuyo contenido proporciona la dirección del operandoen la memoria. En otras palabras, el registro seleccionado contiene la dirección del operando en lugar deloperando mismo. Antes de utilizar una instrucción de modo indirecto por registro, el programador debe asegurarse

de que la dirección de memoria del operando esta colocada en el registro del procesador con una instrucciónprevia. Entonces una referencia al registro es equivalente a especificar una dirección de memoria. La ventaja deuna instrucción de modo de registro indirecto es que el campo de dirección de la instrucción utiliza menos bits paraseleccionar un registro de los que necesitaría para especificar una dirección de memoria en forma directa.

Modo de Direccionamiento DirectoEn este modo la dirección efectiva es igual a la parte de dirección de la instrucción. El operando reside en memoriay su dirección la proporciona en forma directa el campo de dirección de la instrucción. En una instrucción de tipobrinco ó salto, el campo de dirección especifica la dirección de transferencia de control del programa real.

Modo de Direccionamiento IndirectoEn este modo, el campo de dirección de la instrucción proporciona la dirección en que se almacena la direcciónefectiva en la memoria. El control recupera la instrucción de la memoria y utiliza su parte de dirección para acceder

la memoria una vez mas con el fin de leer la dirección efectiva.

Page 14: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 14/19

Modo de Direccionamiento IndexadoEn este modo el contenido de un registro índice se suma a la parte de dirección de la instrucción para obtener ladirección efectiva. El registro índice es un registro CPU especial que contiene un valor índice. Un campo dedirección de la instrucción define la dirección inicial del arreglo de datos en la memoria. Cada operando del arreglose almacena en la memoria en relación con la dirección inicial.

La distancia entre la dirección inicial y la dirección del operando es el valor del índice almacenado en el registro deíndice. Cualquier operando en el arreglo puede accesarse con la misma instrucción siempre y cuando el registroíndice contenga el valor de índice correcto. El registro índice puede incrementarse para facilitar el acceso a

operandos consecutivos. Nótese que si una instrucción de tipo índice no incluye un campo de dirección en suformato, la instrucción se convierte al modo de operación de indirecto por registro.

Algunas computadoras dedican un registro de CPU para que funcione exclusivamente como un registro índice. Demanera implícita este registro participa cuando se utiliza una instrucción de modo índice. En las computadoras conmuchos registros de procesador, cualquiera de los registros de la CPU puede contener el número de índice. En talcaso, el registro debe estar especificado en forma explícita en un campo de registro dentro del formato deinstrucción.

Modo de Direccionamiento de Registro BaseEn este modo, el contenido de un registro base se suma a la parte de dirección de la instrucción para obtener ladirección efectiva. Esto es similar al modo de direccionamiento indexado, excepto en que el registro se denominaahora registro base, en lugar de registro índice. La diferencia entre los dos modos esta en la manera en que se

usan más que en la manera en que se calculan. Se considera que un registro base contiene una dirección base yque el campo de dirección de la instrucción proporciona un desplazamiento en relación con esta dirección base. Elmodo de direccionamiento de registro base se utiliza en las computadoras para facilitar la localización de losprogramas en memoria.

En resumen, los modos de direccionamiento son la forma en como se mueve la información para programar en LE,y solo con la práctica y la aplicación específica, se comprenderá cual es la función de cada uno.

La sintaxis general para programar en LE es:Acción Operando_Destino , Operando_Fuente

Donde:Acción, es una instrucción mnemónica en LE.

Operando Destino, es uno de los siguientes elementos: Registro, Localidad de Memoria, VariableLa “,” (coma) es parte de la sintaxis.Operando Fuente, es uno de los siguientes elementos: Registro, Localidad de Memoria, Variable, Valor numérico

Por ejemplo: mov al,5 Acción = movOp. Destino = alOp. Fuente = 5

“mov” es la principal instrucción mnemónica (abreviada) para programar en LE, significa “mover” (del inglés“move”), y lo que hace es: “mover el operando fuente (5), hacia el operando destino (al)”. “al” es la parte inferior óbaja del registro AX (Acumulador). “5” es la cantidad 5 (cinco), que es un valor numérico directo.

En el siguiente ejercicio, se deberá comentar como está funcionando el modo de direccionamiento, según elmovimiento de la información, además, mencione el contenido exacto en hexadecimal del registro.

Los registros en LE siempre se visualizan en hexadecimal, aunque según el tipo de compilador que se use, sepuede usar la carga de los mismos en otro sistema numérico.

Ejemplos:Instrucción Registro AX (AH y AL) ExplicaciónMov al,5 xx05 En el registro AX se visualiza el valor “xx05”, las equis (“xx”)

indican que en la parte alta (AH) no se sabe que está almacenado,mientras que en la parte baja (AL) el valor es 05, representado a 8bits que es la capacidad del registro.

Mov ah,5 05xx En el registro AH se visualiza “05” completo a 8 bits, en AL es “xx”por la misma razón antes explicada.

Page 15: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 15/19

Mov Ax,5 0005 En el registro completo a 16 bits, se visualiza el contenido “0005”,porque la instrucción dice que en todo el registro completo AX secargue este valor. Nótese que se tendría el mismo resultado si sehiciera lo siguiente: mov ax,05 ó mov ax,005, ó mov ax,0005. Loanterior debido a que los ceros (0) a la izquierda no cuentan, peroque se tendría un error si se hiciera: mov ax,00005, debido a queya estamos indicando 5 digitos.

Recuerde que en hexadecimal, cada digito (0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f) representa 4 bits, pues el valor máximo

en hexadecimal de un solo dígito es la “F”, que representa la cantidad 15 (quince), y este valor convertido a binarioes el 1111 (4 unos), y son 4 bits.

Si en un registro como el AX que es de un tamaño de 16 bits se almacena el valor máximo, en hexadecimal seríaFFFF (4 efes), que es el valor 65535 en decimal. Y el valor mínimo sería 0000 (4 ceros) que en decimal es lacantidad cero (0).

En el último ejemplo se menciona que: “mov ax,00005” es un error, debido a que se está intentando almacenar 5dígitos, que son 20 bits (4x5=20), y el registro AX no es de esa capacidad, pues solo le caben 16 bits.

En los ejemplos anteriores, se está usando el modo de direccionamiento inmediato, pues se está manipulando unvalor numérico directo (en este caso el 5), almacenado en un registro.

Ejemplos de error:Instrucción Registro AX (AH y AL) ExplicaciónMov al,005 Error Debido a que se está intentando guardar en el registro AL (8 bits) 3

dígitos (005), y como ya se estudió, esto equivale a 12 bits, y estano es la capacidad del registro AL.

Mov 5,al Error El problema es debido al orden de los operandos, no es posiblemover al Operando Destino (5) ningún valor, pues es un valornumérico.

Mov Al,Bx Error Aquí se esta usando el modo de direccionamiento de registro puesel operando fuente y el destino son registros, pero el error radicaen que el operando fuente (BX) es de 16 bits, y el operando destino

(AL) es de 8 bits y no se pueden almacenar 16 bits en solo 8.

Mov Bx,Al Error Aquí el operando origen es AL (8 bits), y se está indicando que sealmacene su contenido en el operando destino Bx (16 bits), el errorestá en la diferencia de tamaños de los operandos, entonces losdos operandos deberán ser del mismo tamaño, los dos de 8 bits olos dos de 16.

Generalmente, en la programación en LE no se distingue las mayúsculas de las minúsculas, entonces es igual porejemplo “MOV” que “mov”.

InterrupcionesUna 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 se ejecuta y por lo regular regresa el control al procedimientoque fue interrumpido, el cual entonces reasume su ejecución.

Existen dos tipos de Interrupciones, las de Hardware y las de Software. Las interrupciones de hardware son lasque utiliza el microprocesador para reconocer a los dispositivos externos a él, tal es el caso de los dispositivosperiféricos, como ratón y teclado, ó impresoras y unidades de disco.

Las interrupciones de software son aquellas que se utilizan en la programación con LE, y de estas hay dos clases,las de BIOS (Basic Input Output System, ó Sistema Básico de Entradas y Salidas), y las de DOS (Disk OperatingSystem, ó Sistema Operativo de Disco).

Interrupción de BIOS.- El BIOS contiene un extenso conjunto de rutinas de entrada/salida y tablas que indican elestado de los dispositivos del sistema. El DOS y los programas usados pueden solicitar rutinas del BIOS para la

comunicación con los dispositivos conectados al sistema. A continuación se listan algunas interrupciones del BIOS.

Page 16: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 16/19

INT 00H: División entre cero. Llamada por un intento de dividir entre cero. Muestra un mensaje y por lo regular secae el sistema.

INT 01H: Un solo paso. Usado por el programa DEBUG y otros depuradores para permitir avanzar por paso através de la ejecución de un programa.

INT 02H: Interrupción no enmascarare. Usada para condiciones graves de hardware, tal como errores de paridad,que siempre están habilitados. Por lo tanto un programa que emite una instrucción CLI (limpiar interrupciones) noafecta estas condiciones.

INT 03H: Punto de ruptura. Usado por depuración de programas para detener la ejecución.

INT 04H: Desbordamiento. Puede ser causado por una operación aritmética, aunque por lo regular no realizaacción alguna.

INT 05H: Imprime pantalla. Hace que el contenido de la pantalla se imprima.

INT 08H: Sistema del cronometro. Una interrupción de hardware que actualiza la hora del sistema y (si esnecesario) la fecha.

INT 09H: Interrupción del teclado. Provocada por presionar o soltar una tecla en el teclado.

INT OBH, INT OCH: Control de dispositivo serial. Controla los puertos COM1 y COM2, respectivamente.

INT 0DH, INT OFH: Control de dispositivo paralelo. Controla los puertos LPT1 y LPT2, respectivamente.

INT 0EH: Control de disco flexible. Señala actividad de disco flexible, como la terminación de una operación deE/S.

INT 10H: Despliegue en vídeo. Acepta el número de funciones en el AH para el modo de pantalla, colocación delcursor, recorrido y despliegue.

INT 11H: Determinación del equipo. Determina los dispositivos opcionales en el sistema y regresa el valor en unalocalidad de memoria.

INT 12H: Determinación del tamaño de la memoria. En el AX, regresa el tamaño de la memoria de la tarjeta delsistema, en términos de kilobytes contiguos.

INT 13H: Entrada/salida de disco. Acepta varias funciones en el AH para el estado del disco, sectores leídos,sectores escritos, verificación, formato y obtener diagnostico.

Interrupciones del DOS.- Los dos módulos del DOS, IO.SYS y MSDOS.SYS, facilitan el uso del BIOS. Ya queproporcionan muchas de las pruebas adicionales necesarias, las operaciones del DOS por lo general son masfáciles de usar que sus contrapartes del BIOS y por lo común son independientes de la maquina.

IO.SYS es una interfaz de nivel bajo con el BIOS que facilita la lectura de datos desde la memoria haciadispositivos externos.

MSDOS.SYS contiene un administrador de archivos y proporciona varios servicios. Por ejemplo, cuando unprograma usuario solicita la INT 21H, la operación envía información al MSDOS.SYS por medio del contenido delos registros. Para completar la petición, MSDOS.SYS puede traducir la información a una o mas llamadas aIO.SYS, el cual a su vez llama al BIOS.

Las interrupciones desde la 20H hasta la 3FH están reservadas para operaciones del DOS. A continuación semencionan algunas de ellas.

INT 20H: Termina programa. Finaliza la ejecución de un programa .COM, restaura las direcciones y errorescríticos, limpia los bufer de registros y regresa el control al DOS.

INT 21H: Petición de función al DOS. Esta interrupción es una de las principales para el sistema DOS, tienemuchas funciones y por lo tanto, necesita un número de servicio o de función en el registro AH.

INT 22H: Dirección de terminación.

Page 17: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 17/19

INT 23H: Dirección de Cltr + Break. Diseñada para transferir el control a una rutina del DOS cuando usted presionaCtlt + Break o Ctlr + c. La rutina finaliza la ejecución de un programa o de un archivo de procesamiento por lotes.

INT 24H: Manejador de error critico. Usada por el DOS para transferir el control cuando reconoce un error critico (aveces una operación de disco o de la impresora).

NT 25H: Lectura completa de disco. Lee el contenido de uno o más sectores de disco.

INT 26H: Escritura completa de disco. Escribe información desde la memoria a uno o más sectores de disco.

INT 27H: Termina pero permanece residente (reside en memoria). Hace que un programa .COM al salirpermanezca residente en memoria.

INT 2FH: Interrupción de multiplexion. Implica la comunicación entre programas, como la comunicación del estadode un “spooler” de la impresora, la presencia de un controlador de dispositivo o un comando del DOS tal como el“ASSIGN” o el “APPEND”.

INT 33H: Manejador del ratón. Proporciona servicios para el manejo del ratón.

En resumen, cuando se ejecuta una Interrupción se salta a cierta localidad de memoria, en donde se encuentra elcódigo que se ejecutará correspondiente a la interrupción solicitada, al término de la ejecución de este código, seretorna a la siguiente instrucción del programa principal.

Ejecución de una Interrupción

Entorno de ProgramaciónPara programar en LE es necesario un compilador que pueda traducir en Código Máquina lo que se escriba enCódigo de LE. Básicamente podremos programar en tres formas ó ambientes distintos:

- Usando Lenguaje Ensamblador puro, a través de un compilador profesional para LE, como lo es el MASM (deMacro Assembler, de la compañía Microsoft), ó el TASM (de Turbo Assembler, de la compañía Borland), tambiénse podrá utilizar alguna herramienta que permita la programación directa de LE en la memoria de la computadora,como por ejemplo el programa llamado DEBUG de MSDOS.- Usando algún simulador para programación en LE, como por ejemplo el software llamado EMU8086 paraWindows versión 2005.- Usando algún lenguaje de alto nivel que soporte la programación híbrida, como por ejemplo el lenguaje C++ oVisual Basic.

Las tres formas de programar antes mencionadas, tienen sus ventajas y desventajas, por ejemplo programando enensamblador completo ó directo, se podrá hacer uso de toda la potencia real del LE, obteniendo la posibilidad decrear código totalmente eficiente y funcional, en cambio, usando algún simulador para programar en LE, se podrádisminuir la dificultad y la abstracción de la programación en LE, pero se sacrificará la portabilidad y la eficacia.

Page 18: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 18/19

Procedimiento de Ensamble, Enlace y Ejecución.

Según la opción utilizada para programar en LE, es el proceso de Ensamble, Enlace y Ligado. Por ejemplo, acontinuación se describe el procedimiento para realizar lo anterior usando un compilador completo para programaren LE, el TASM en su versión básica para MSDOS (2.02 v.1990).

Se debe de contar con un archivo llamado “TASM.ZIP”, en donde se tienen 4 archivos comprimidos, a continuaciónse descomprime dicho contenido en el disco duro.

Archivos básicos para programar en Lenguaje Ensamblador

En esta carpeta se encuentran los 4 archivos:1.- El TASM, que es el ensamblador ó compilador de ensamblador de la compañía Borland.2.- El TLINK, que es el enlazador de ensamblador a ejecutable.3.- El Prog1, que es el archivo de texto con extensión .ASM donde se encuentra un programa completo enLenguaje Ensamblador.4.- El archivo "Leeme Primero", que es el que usted esta leyendo en este momento.

Procedimientoa) Lo primero que tiene que hacer, es copiar en una carpeta de su disco duro estos 4 archivos, por ejemplo en unacarpeta llamada “ASM” en la ruta “C:\”, y quedaría: “C:\ASM”

b) A continuación, ya puede Ensamblar y Enlazar programas, por ejemplo primero teclee:C:\ASM\TASM Prog1.asm <enter>Observe que si no tiene errores su programa, se generará un archivo con extensión .OBJ, quedando en su carpeta“C:\ASM” el archivo Prog1.objc) Ahora, puede enlazar su archivo .OBJ con el programa TLINK, quedando como sigue:

C:\ASM\TLINK Prog1.obj <enter>Si todo esta bien, se generará ahora un archivo .EXE, donde éste ya lo puede correr ó ejecutar directamente desdeMSDOS, por ejemplo: C:\ASM\Prog1.exe <enter>

Procedimiento de ensamble, enlace y ejecución de un programa en LE

Page 19: Unidad I.- Lenguaje Ensamblador

5/9/2018 Unidad I.- Lenguaje Ensamblador - slidepdf.com

http://slidepdf.com/reader/full/unidad-i-lenguaje-ensamblador 19/19

Entorno de ProgramaciónComo ya se mencionó, dependiendo de cómo se vaya a programar en LE es el entorno de programación a utilizar,por ejemplo, en un principio (años setentas) se programaba en MSDOS, para los años noventas empezaron asurgir interfases de modo gráfico, soportadas con el Windows 95, y en la actualidad podemos hacer simulacionesgráficas de programación en LE en ambientes soportados para Windows Vista.

Lo importante es entender lo siguiente:1.- Como muchos lenguajes de programación, primero deberemos crear nuestro programa en código texto, otambién llamado Código Fuente , esto es, en cualquier editor de texto (edit, Word, Works, block de notas, write,

etc.) crearemos nuestro programa en LE.Es importante recordar que la gran mayoría de los Compiladores de LE requieren que la extensión del archivofuente sea .ASM, de lo contrario se podrán tener problemas en el proceso de compilación. Entonces nuestro primerprograma podrá ser el siguiente:

.MODEL SMALL

.CODE Programa: mov ax,@DATAmov ds,ax mov dx,Offset Texto mov ah,9 

int 21h mov ax,4C00h int 21h .DATATexto DB 'Mensaje en pantalla.$' .STACK END Programa 

De hecho este es el programa llamado prog1 que se mencionó anteriormente para programar en LE. El archivocompleto se llama: prog1.asm 

Las mayúsculas y minúsculas no son sensibles en ensamblador.

2.- Una vez que ya tenemos el archivo en código fuente (prog1.asm), ahora se procede a su compilación óensamble , y se obtiene un archivo con extensión .obj (prog1.obj), este archivo contiene los bytes equivalentes delcódigo fuente, pero ya traducidos a los códigos de operación que se requerirán para el paso final.

3.- Finalmente, se enlaza el archivo .obj, obteniendo el archivo .exe (prog1.exe) que es el que la máquina reconocepara su ejecución directa, este archivo esta en código completo binario (0’s y 1’s).