Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos...

254
Ensamblador por Emiliano Llano Díaz

Transcript of Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos...

Page 1: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Ensamblador

por Emiliano Llano Díaz

Page 2: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Ensamblador

Emi lia no Lla no Díaz

El au tor y Exa Inge nie ría ®no es tán afi lia dos a nin gún fa bri can te.

Se han rea li za do to dos los es fuer zos po si bles para pro veer una in for ma ción ve raz y com ple ta. Sin em bar go,

el au to re no se hace res pon sa bles de omi sio nes, uso al que se des ti ne la in for ma ción o por in frac cio nes a pa ten -

tes u otros de re chos de ter ce ros que re sul ten.

De re chos Re ser va dos ©por el au tor 2002. De re chos mun dia les re ser va dos. Nin gu na par te de esta pu bli ca -

ción pue de ser re pro du ci da o al ma ce na da en nin gún me dio de re trans mi sión, fo to co pia do o re pro duc ción de

nin gún tipo, in clu yen do pero no li mi tán do se a fo to co pia, fo to gra fía, fax, al ma ce na mien to mag né ti co u otro re -

gis tro, sin per mi so ex pre so del au tor y de la edi to rial.

Compuesto totalmente en computadora por:

Exa Ingeniería SA de CV ®

Bajío 287-101

Col. Roma México, D.F.

5564-10-11 5564-02-68 FAX 5264-61-08

ISBN 970-91050-0-0

SEP 10137/91

Registrado ante la SEP en la propiedad intelectual del autor

Impreso y hecho en México.

1era edición junio 2002.

Page 3: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

i

ContenidoContenido · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · i

Introducción · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · xiii

Capítulo 1 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 1

Interpretando el Contenido de la Memoria . . . . . . . . . . . . . . 5

Registros· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 9

Forma de Usar los Registros. . . . . . . . . . . . . . . . . . . . . 11

Banderas de Estado . . . . . . . . . . . . . . . . . . . . . . . . . 15

Memoria de Acceso Aleatorio · · · · · · · · · · · · · · · · · · · 24

Puntos Importantes del Capítulo · · · · · · · · · · · · · · · · · · 32

Capítulo 2 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 33

.Direccionamiento Implícito . . . . . . . . . . . . . . . . . . . . 41

Direccionamiento directo a memoria · · · · · · · · · · · · · · · · 42

Direccionamiento Indirecto · · · · · · · · · · · · · · · · · · · · 42

Intérpretes · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 46

Compiladores· · · · · · · · · · · · · · · · · · · · · · · · · · · · 47

Puntos Importantes del Capítulo · · · · · · · · · · · · · · · · · · 50

3. Sistemas Numéricos · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 53

Page 4: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Contando en el Sistema Binario· · · · · · · · · · · · · · · · · · · 58

Conversión de Sistema Dec i mal a Binario · · · · · · · · · · · · · 59

Suma y Resta en Sistema Binario · · · · · · · · · · · · · · · · · · 60

Multiplicación y División Binaria . . . . . . . . . . . . . . . . . 60

Complementos · · · · · · · · · · · · · · · · · · · · · · · · · · · 66

Puntos Importantes del Capítulo · · · · · · · · · · · · · · · · · · 71

Capítulo 4 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 73

Las Reglas del Juego · · · · · · · · · · · · · · · · · · · · · · · · 74

Los Caracteres · · · · · · · · · · · · · · · · · · · · · · · · · · · 75

Los Separadores · · · · · · · · · · · · · · · · · · · · · · · · · · 76

Los Identificadores · · · · · · · · · · · · · · · · · · · · · · · · · 76

Palabras Reservadas · · · · · · · · · · · · · · · · · · · · · · · · 76

Comandos · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 79

Las Instrucciones del Ensamblador· · · · · · · · · · · · · · · · · 81

Capítulo 5 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 87

Respuesta de la UPC a una Interrupción· · · · · · · · · · · · · · · 90

Código de Selección de un Dispositivo que Interrumpe · · · · · · · 92

Inmediata · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 97

Directo · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 98

Base · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 98

Indice · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 99

Indice y base · · · · · · · · · · · · · · · · · · · · · · · · · · · 100

Base y Desplazamiento (Directo o Inmediato) · · · · · · · · · · · 101

Indice y Desplazamiento (Directo o Inmediato) · · · · · · · · · · 101

Ensamblador

ii

Page 5: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Base, Indice y Desplazamiento (Directo o Inmediato) · · · · · · · 101

Número de Bits en una Instrucción. . . . . . . . . . . . . . . . . 102

Puntos Importantes del Capítulo . . . . . . . . . . . . . . . . . . 103

Capítulo 6 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 105

Y Lógico (AND) · · · · · · · · · · · · · · · · · · · · · · · · · 114

O Lógico (OR) · · · · · · · · · · · · · · · · · · · · · · · · · · 115

No Lógico· · · · · · · · · · · · · · · · · · · · · · · · · · · · · 115

O Exclusivo Lógico (XOR) · · · · · · · · · · · · · · · · · · · · 115

Prueba Lógica (TEST) · · · · · · · · · · · · · · · · · · · · · · 116

Las Banderas · · · · · · · · · · · · · · · · · · · · · · · · · · · 116

Complemento a 2 (NEG) · · · · · · · · · · · · · · · · · · · · · 116

La instrucción OUT· · · · · · · · · · · · · · · · · · · · · · · · 117

La instrucción IN · · · · · · · · · · · · · · · · · · · · · · · · · 117

Capítulo 7 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 121

Corrimientos y Rotaciones · · · · · · · · · · · · · · · · · · · · 128

Corrimientos Lógicos (Rotaciones)· · · · · · · · · · · · · · · · 129

Corrimientos Aritméticos · · · · · · · · · · · · · · · · · · · · · 130

Operaciones Aritméticas · · · · · · · · · · · · · · · · · · · · · 131

Suma y Resta (ADD y SUB) · · · · · · · · · · · · · · · · · · · · 131

Decrementos · · · · · · · · · · · · · · · · · · · · · · · · · · · 132

Multiplicación y División· · · · · · · · · · · · · · · · · · · · · 132

Capítulo 8 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 141

Manejo de la Pila · · · · · · · · · · · · · · · · · · · · · · · · · 142

Guardando las Banderas · · · · · · · · · · · · · · · · · · · · · 150

Introducción

iii

Page 6: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

La Instrucción REP · · · · · · · · · · · · · · · · · · · · · · · · 152

La Dirección de la Operación (CLD y STD) · · · · · · · · · · · · 152

Mover Cadenas (MOVSB y MOVSW) · · · · · · · · · · · · · · 152

REPE ó REPZ y REPNE ó REPNZ · · · · · · · · · · · · · · · · 154

Compara Cadenas (CMPSB y CMPSW) · · · · · · · · · · · · · 154

Busca Carácter (SCASB y SCASW) · · · · · · · · · · · · · · · 155

LODSB y LODSW · · · · · · · · · · · · · · · · · · · · · · · · 156

STOSB y STOSW · · · · · · · · · · · · · · · · · · · · · · · · 156

Capítulo 9 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 163

El vídeo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163

Ventanas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

Pantallas de graficación . . . . . . . . . . . . . . . . . . . . . . 168

Problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

Bibliografía . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182

Capítulo 10· · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 183

Manejadores de Archivos · · · · · · · · · · · · · · · · · · · · · 197

Capítulo 11 · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 207

La Asignación de Memoria . . . . . . . . . . . . . . . . . . . . 207

Transfiriendo el Con trol a Ensamblador · · · · · · · · · · · · · · 208

Pasando Argumentos · · · · · · · · · · · · · · · · · · · · · · · 208

Pascal y Ensamblador· · · · · · · · · · · · · · · · · · · · · · · 208

C y Ensamblador · · · · · · · · · · · · · · · · · · · · · · · · · 212

Ensamblador Residente · · · · · · · · · · · · · · · · · · · · · · 214

Apéndice A. · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 219

Ensamblador

iv

Page 7: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Las instrucciones del 80x86 . . . . . . . . . . . . . . . . . . . . 219

Errores comunes al ensamblar un programa . . . . . . . . . . . . 234

Apendice B · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 235

Interrupciones . . . . . . . . . . . . . . . . . . . . . . . . . . . 235

Índice · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · · 239

Introducción

v

Page 8: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Introducción¿Por qué usar ensamblador?

Las razones para APRENDER ensamblador no son las mismas, en gen -eral, que las razones para USAR ensamblador.

Una de las malas razones para querer usar ensamblador es porque sepiensa que ejecutará mucho más rápido que una secuencia en par tic u larde un lenguaje de propósito gen eral como Pascal, For tran, C o hasta BA -SIC compilado. Aunque esto en gen eral es verdadero, el tiempo yrecursos invertidos en el desarrollo pueden al fi nal no valer la pena conrespecto a la ganacia de velocidad obtenida.

Por otro lado, los lenguajes de alto nivel tienden a aislar al usuario de lamáquina, en lo que radica su fuerza y su debilidad. La gran mayoría de los lenguajes moderno de alto nivel proveen mecanismos para escribirsecuencias en ensamblador, aunque algunos de forma torpe (PEEK yPOKE de BA SIC). Esto crea complicaciones en la implementación y enel seguimiento y mantenimiento de programas elaborados de esta forma.

Algunas veces el sistema o lenguaje hace muy poco por nosotros; porejemplo, con el adaptador asíncrono, el sistema provee mecanismos quequedan cortos de nuestra espectativa y deben ser irremediablementemejorados o pagar las consecuencias en una comunicación de alto nivel(redes, in ter faces, etc.).

Otras veces el sistema o lenguaje hace demasiado por nosotros; porejemplo en el con trol de las teclas que conforman un teclado, dondepreviamente se han definido todas las secuencias que se generan alpresionar una tecla.

vii

Page 9: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Otras más, se hace el trabajo exacto pero de una forma ineficiente noaceptable a ciertas aplicaciones, como en el caso del manejador de lapantalla que normalmente usan los ca na les oficiales para comunicarsecon la electrónica que controla los dispositivos externos.

Es en estas ocaciones donde el ensamblador actúa con su mayorfortaleza: el con trol to tal de todos los elementos que conforman elsistema. Una parte crítica de un sistema es la más suceptible deoptimizarse vía programación en ensamblador. No deseamos hacer estoen términos de eficiencia de programación si se puede evitar con algúntruco del lenguaje de alto nivel o alguna otra argucia; pero existennumerosos casos en los que se cae constantemente en la necesidad dehacerlo.La razón por la cual el ensamblador es entonces mejor que unlenguaje de alto nivel, es la misma por la que Pascal es mucho mejor paraescribir un programa de nómina que Ensamblador: es mucho más fácil demantener y programar. Debemos dejar que los lenguajes de alto nivelhagan lo que saben hacer mejor y reconocer las ocaciones en las quedebemos ensuciarnos las manos con ensamblador.

Las razones para aprenderlo caen en la categoría de una formacióncompleta e in te gral en las áreas de cómputo de forma tal que se puedadecidir como jefe de proyecto o programador, en qué casos es mejorutilizar una herramienta y en qué otros utilizar otra. Como profesionista,se debe ser capaz de identificar una buena codificación de una mala enensamblador y poder sugerir caminos alternativos para lasimplementaciones de una solución genérica apropiada al problema quese trata de re solver.

Dividimos el aprendizaje del ensablador en fases o pasos que sugerimosseguir al pie de la letra:

· Fase 1 Conocer las herramientas de trabajo para crearaplicaciones en ensamblador.

· Fase 2 Conocer la arquitectura de la máquina en la que se pretenderealizar la programación.

· Fase 3 Conocer las instrucciones del lenguaje ensamblador de lamáquina específica en la que se aplicará.

· Fase 4 Conjuntar todos los elementos anteriores en programas deaplicación que realicen cosas prácticas o útiles desde nuestropunto de vista.

Ensamblador

viii

Page 10: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

· Fase 5 Actualizarse constantemente.

En todo lo an te rior aplicamos una palabra clave: Selección. Hay que serselectivo en lo que se aprende y tener la capacidad de juzgar de antemanoqué nos puede servir o no an tes de emplear el esfuerzo y tiempo enaprenderlo aunque siempre se debe tener en cuenta que las necesidades,tecnologías y tendencias cambian constantemente el la computación, porlo menos a lo que el presente y fu turo cercano nos concierne.

Trataremos de cumplir a lo largo de este libro la palabra selectividad yde llenar todos los objetivos planteados en esta introducción.

Emiliano Llano Díaz

Septiembre 1995

Introducción

ix

Page 11: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Capítulo 11.1 Componentes Básicos de un Sistema

Si examinamos las microcomputadoras actuales, vemos que aunque hay diferencias en el tamaño físico de los componentes, de los sistemas y en -tre dist intos t ipos de computadoras (mini computadoras,macrocomputadoras y computadoras personales o microcomputadoras),la arquitectura empleada en todos los casos es muy sim i lar. Esto se debeal hecho de que las computadoras usan lógica binaria (de unos y ceros) yemplean el sistema binario en casi todos sus componentes, lo que exigeun cierto tipo de estrategia para re solver los problemas derivados de estaselección.

1-1

Figura 1.1 Los componenetes de una computadora.

Page 12: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Como se muestra en la figura 1.1, tenemos cinco par tes principales deun sistema de cómputo que se encuentran de una forma u otra en todosistema ac tual:

· 1. Unidad de Proceso Central (UPC o CPU en inglés). Queforma el cerebro de la computadora y, en general, controla todo elfuncionamiento de los demás componentes.

· 2. Memoria. Dispositivo de almacenaje electrónico donde seguardan las instrucciones y datos necesarios para elfuncionamiento del sistema.

· 3. Dispositivos de Entrada y Salida (E/S o I/O). Son el eslabónentre la máquina y el humano. Varían en complejidad y tipo deacuerdo a los requerimientos de procesamiento.

· 4. Interfases de Entrada/Salida. Son los dispositivosintermedios entre la UPC y los dispositivos de E/S y proveen loscontroles para que se puedan entender los dispositivos externos de E/S y la UPC.

· 5. Un programa. Controla todo lo anterior y da la secuencia deeventos que permiten que un sistema funcione como tal y ademáspueda resolver problemas de procesamiento genérico para lo cualse construyó el sistema en primer lugar.

Las computadoras digitales usan la lógica dig i tal para cumplir concierta meta de procesamiento. Esta lógica dig i tal o lógica binaria comotambién se le conoce, se basa en el hecho de que ciertos circuitoselectrónicos pueden estar conduciendo electricidad o no (prendidos oapagados), estado que se determina por las características de operación.Esto nos da pie a definir dos estados o condiciones bien diferenciados,mutuamente excluyentes y opuestos.

Si contamos con un sólo circuito dig i tal que nos indique uno de los dosposibles estados, se dice de este circuito contiene un dígito binario (BI -nary digiT) o BIT de información. Este dígito se puede designar comoprendido o apagado o más comunmente 1 ó 0 que corresponden a losúnicos dígitos utilizados dentro de los sistemas actuales de computadoras digitales.

Para sernos más utiles, los bits se agrupan en palabras que contienen Nnúmero de bits de acuerdo al fabricante, modelo de computadora u otrosfactores, aunque todos coinciden en que son potencias de 2. La longitud

Ensamblador

1-2

Page 13: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

más común de palabra en las microcomputadoras es de 8 bits que senombra byte, de 16 bits, de 32 ó de 64 bits.

Quizá el único atributo que diferencia a las computadoras de otrasmáquinas es que se les puede decir qué deben hacer. Esto se logra conpalabras que contienen patrones de bits que son significativos para lacomputadora. Este significado preciso se lo da el fabricante decomputadoras y así, un patrón puede significar suma dos númerosmientras que otro ligeramente distinto significará quizá guarda unresultado en una localidad específica.

El grupo de patrones definido por el fabricante forma lo que se llama eljuego de instrucciones. La variedad de operaciones distintas quecontiene este juego de instrucciones obedece a criterios de diseño delcircuito. En gen eral todo juego de instrucciones cuenta con operacionesaritméticas, de manipulación de bits, de comparaciones, de entrada ysalida, etc. mismas que analizaremos en detalle para un circuitoespecífico en los capítulos siguientes.

Todos los datos, tanto de instrucciones de programa como datos, sonalmacenados en una serie de circuitos conocidos como memorias puestienen la particularidad de recordar la información contenida en ellos.Las memorias son organizadas como casilleros únicos en los que seguarda la información. Cada casillero o localidad de memoria tiene unidentificador que lo hace distinto a cualquier otro casillero parapropósitos de identificación y de almacenamiento de información. A esteidentificador se le llama dirección y sin entrar en más detalles hasta lasiguiente sección baste decir que la dirección es única e irrepetible paraevitar confusiones y que la capacidad del casillero forma la palabra de lacomputadora (número de bits que es posible almacenar en la memoria).

1.2 La Unidad de Proceso Central

Toda computadora tiene una especie de circuito de con trol genérico oUPC (cen tral pro cess ing unit o CPU), que forma el “cerebro” de lamáquina computadora. La UPC está formada por diferentes par tesinterconectadas en tre sí en forma tal que permite ciertas operacioneslógicas. Las computadoras de hace 10 años requerían de un chasísbastante grande para albergar los componentes de la UPC. Varias tarjetasbastante grandes que contenían cientos de circuitos interconectadas porca bles del tamaño de una manguera no era una vista extraña. Hoy en día,la UPC está contenida en unos pocos circuitos de alta integración o en el

Componentes Básicos de unSistema

1-3

Page 14: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

caso de las microcomputadoras en uno solo. La microcomputadora, junto con unos cuantos circuitos externos, forman una computadora funcional.

Los componentes del sistema de computación deben de interconectarsede alguna forma. La manera en que se realicen las conexiones y cómo sehaga la comunicación, afecta las características de desempeño delsistema profundamente.

En las primeras computadoras y en algunas de las actuales, la UPC seinterconectaba con cada uno de los dispositivos externos a la UPC pormedio de un ca ble separado. Este método tiene la desventaja de quemuchos ca bles (llamados buses) distintos deben ser controlados y serequiere de una cantidad con sid er able de circuitos.

Para realizar la interconexión de forma más económica y paraestandarizar la lógica de interfase necesaria, una técnica muy pop u larconsiste en interconectar a todos los sistemas externos a la UPC pormedio de un sólo juego de ca bles o bus de interconexión. El bus consisteen los ca bles necesarios para encontrar a los distintos componentes,controlarlos y transferir datos de y hacia ellos.

En la figura 1.2 vemos el esquema de una unidad de procesamiento cen -tral. Se forma por la unidad aritmética y lógica (UAL o ALU, arith me ticlogic unit) encargada de las operaciones lógicas y aritméticas, la unidadde con trol encargada de la coordinación gen eral, una serie de registrosdonde se almacena información requerida por la UPC y la ALU de formapro vi sional y un bus de datos interno que interconecta a todas lasunidades.

Ensamblador

1-4

Page 15: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

La función prin ci pal de la UPC será la de interpretar la información quere side en la memoria prin ci pal como instrucciones o datos y actuar deacuerdo a un plan determinado por el código de la instrucción generandolas operaciones necesarias de acuerdo a ese plan. Ningún programapuede ser ejecutado por la UPC si no re side an tes, en forma parcial o to -tal, en la memoria prin ci pal (descrita en la sección siguiente).

1.2.1 Interpretando el Contenido de la Memoria

Los datos almacenados en la memoria pueden ser interpretados como:

· 1. Datos binarios puros

· 2. Datos codificados en binario

· 3. Un código de carácter

· 4. Un código de instrucción

Estas cuatro categorías de interpretar datos pueden dividirse en dos másgenéricas: datos e instrucciones.

Los datos binarios puros, los datos codificados en binario y loscaracteres codificados tienen una cosa en común: son datos. El contenidode las palabras almacenadas en memoria puede ser usado por sí solo para

Componentes Básicos de unSistema

1-5

Figura 1.2 Esquema de una Unidad de Proceso Central.

Page 16: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

operaciones o combinado con otras palabras de memoria en formasdirigidas por un programa.

1.2.1.1 Datos binarios puros

Consideremos primero a los datos binarios puros que no están sujetos aninguna interpretación. Es importante resaltar que podemos representareste tipo de datos en papel como un número binario, oc tal o hex a dec i mal(por sencillez) sin que tenga ningún impacto en el dato de la palabra. Porejemplo, una palabra arbitraria de 16 bits, en la que es posible representar216 combinaciones, puede ser:

11011011100010112=1556138=DB8B16

Se puede observar que la notación en hex a dec i mal, además de ser máscompacta, es mucho más fácil de apuntar y recordar, también evitaconfusiones, como veremos en el siguiente capítulo, por lo que la base 16o hex a dec i mal es la preferida en tre la gente dedicada a diseño lógico oprogramación a nivel máquina.

1.2.1.2 Datos Codificados en Binario

El contenido de una palabra de memoria, interpretada como datosbinarios puros, puede existir por sí solo o ser válido sólo cuando secombina con otras palabras para formar un código o un número mayorque sea utilizado con fines prácticos. No hay razón por la cual un datobinario no pueda formarse, por ejemplo con 2 o más palabras; más aún,las palabras pueden no ocupar localidades continuas de memoria, aunque se prefiere por fines prácticos que así sea.

La palabra puede también estar codificada de acuerdo a un códigoestablecido de antemano como puede ser exceso 3, BCD, números consigno, etc. (todos ellos analizados en el capítulo 2).

1.2.1.3 Códigos de Caracteres

Una computadora no sería muy práctica si tuviésemos que me ter cadauno de los datos como largas secuencias de unos y ceros o si lasrespuestas consistieran de números o letras en una representaciónbinaria. Debe ser posible para la computadora el manejar todo tipo detexto y otra información no numérica.

Ensamblador

1-6

Page 17: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Para que el manejo de texto sea completo debe de incluir al menos las 26letras en minúsculas y mayúsculas, los números y una serie de signosespeciales que usamos diariamente en nuestra comunicación como son el punto, la coma, etc. En conjunto, los caracteres más usados sumanalrededor de 87. Una palabra de 7 bits es suficiente para su representación pero es universalmente aceptada la codificación utilizando 8 bits (vercapítulo 2).

En algunos sistemas con longitud de palabra de 8 bits, se usa el códigoASCII de 7 bits y el bit li bre se utiliza para verificar errores en los datospor medio de un procedimiento llamado paridad. En otros sistemas seusa un código de 8 bits ASCII y se agrega a la memoria un bit más quesirve para la comprobación de paridad. A este bit se le conoce como bit de paridad.

La paridad consiste en una verificación sencilla de errores en la que seagrega un bit al código. La paridad puede ser:

· Par

· Impar

El bit de paridad se cambia a 1 ó a 0 para que el número de bits 1 de unapalabra sea siempre par o impar, según el tipo de paridad que se hayaescogido. Si el tipo de paridad que se escoge es par, el bit de paridad selimpia o fija para que el número to tal de unos de la palabra sea siemprepar. Para clarificar el punto incluímos un ejemplo:

Palabra a proteger con un bit de paridad: 1010101

Como el número de 1 de la palabra ya es par, el bit de paridad será en este caso 0.

Muchos esquemas muy elaborados son usados para verificar laconsistencia de los datos y asegurarse que no contengan errores, aún más, existen algoritmos para determinar dónde están los errores y tratar decorregirlos. Estas técnicas de detección de errores no tienen que ver nadaen par tic u lar con la arquitectura de las computadoras o la programaciónen ensamblador y, por lo tanto, no se discuten aquí. Para mayorinformación consulte la bibliografía, en es pe cial el l ibroTelecomunicaciones y Teleproceso.

Componentes Básicos de unSistema

1-7

Page 18: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

1.2.1.4 Código de Instrucciones

Las palabras de memoria hasta ahora analizadas son conformadas porinformación de un tipo u otro pero el contenido también puede serinterpretado como un código solicitando una operación que se requierede la computadora.

Considere el sencillo ejemplo de una suma binaria en donde solicitamosque la palabra almacenada en cierta área de memoria sea sumada a otracontenida en otra área distinta y que el resultado sea almacenado en unatercera área. Los pasos necesarios para lograr esta suma serían:

· 1. Identificar la dirección de la primera palabra a sumar.

· 2. Transferir el contenido de la dirección a los registrosprovisionales de almacenamiento dentro de lo que forma laUnidad de Procesamiento Central.

· 3. Identificar la dirección de la segunda palabra a sumar.

· 4. Sumar el contenido de esta última palabra a la que se encontraba en los registros de la UPC, obtenida en el paso 2, por medio de laUnidad Lógica y Aritmética (UAL).

· 5. Identificar la dirección de memoria donde el resultado sealmacenará.

· 6. Transferir la suma almacenada en el registro adecuado de laUPC a la dirección obtenida en el paso 5.

Ilustrar el concepto de un programa de computadora con estos seissencillos pasos es sólo el comienzo. Tendremos que re sponder a lo largodel libro a las preguntas: ¿Cómo realiza la computadora las operacionesrequeridas por los códigos de instrucciones que conforman el programa?¿Qué es lo que la computadora demanda de la lógica externa para poderrealizar su trabajo? ¿Cómo se escribe un programa de computadora?

Ensamblador

1-8

Page 19: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

1.3 Componentes de la Unidad de ProcesoCentral

Si consideramos el sencillo programa de suma descrito en la sección1.2, podemos examinar algunos de los requerimientos internos a la UPCpara poder satisfacer lo que se le solicita por medio del código deinstrucción SUMA.

1.3.1 Registros

Es necesario un almacenamiento pro vi sional (o varios) donde guardarlos números para trabajar con ellos, así como un registro dondealmacenar el resultado de las operaciones que llamamos acumulador yabreviaremos con A. En el acumulador podemos almacenar informacióntanto an tes de operar con ella, como el resultado de las operaciones conlos datos binarios. Por el momento y para simplificar las cosasconsideremos que tenemos sólo un acumulador y que éste es de 8 bits.

Se requiere de este tipo de almacenamiento pro vi sional por dos razones:

· 1. El contenido de la memoria sólo se puede leer o escribir, no esposible operar sobre los registros de la memoria principal debidoal diseño de las computadoras actuales.

· 2. Es posible tomar los datos directamente de memoria, operarsobre ellos y regresar el resultado otra vez a la memoria principal,pero una cantidad adicional importante e innecesaria de circuitoslógicos serían requeridos para esto, complicando el diseño,subiendo el costo y disminuyendo la rapidez de las operacionescomo será aparente según avancemos en el libro.

Para poder accesar una palabra de memoria, tanto para leer como paraescribir su contenido, necesitamos tener su dirección y ésta se almacenaen un registro es pe cial que llamaremos registro contador de datos (datacoun ter reg is ter) que abreviaremos con sus siglas en inglés: DC.

El tamaño de este registro depende de la cantidad de memoria prin ci palque la computadora pueda accesar directamente. En la figura 1.3suponemos un registro contador de datos de 16 bits que nos da unacapacidad de memoria de 65,536 palabras o 64K bytes (si la palabra es de1 byte).

Componentes Básicos de unSistema

1-9

Page 20: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Una computadora puede constar de más de un registro de este tipo perouna vez más, por simplicidad y por el momento, sólo consideraremosuno.

Necesitamos también un registro donde la instrucción sea contenida deforma que la UPC pueda hacer referencia a ese registro para ver de queinstrucción, de las muchas de una computadora, se trata. A este tipo deregistro se le denomina registro de instrucción (in struc tion reg is ter) que abreviaremos con I.

La dirección de la memoria de la que traeremos la siguiente instrucción(es nuestro ejemplo la de SUMA) es almacenada en el llamado contadorde programa (pro gram coun ter) que abreviaremos con sus siglas eninglés: PC.

El contador de programa es análogo al de datos pero se asume que unocontiene la dirección de los datos en memoria y el otro la dirección de lasiguiente instrucción en memoria. Para explicar un poco más este punto:si la operación SUMA consta de un código de operación que sólo ocupauna palabra y le deben seguir dos palabras más de memoria quecontengan los datos a sumar, el apuntador a la siguiente instrucción debeactualizarse sumando tres localidades para que salte los datos y apunteefectivamente a la siguiente instrucción; de forma sim i lar el contador dedatos se actualizará sumando 1 al registro contador de programa y luego 1 más para poder localizar el siguiente dato.

Como se puede ver en la explicación an te rior, existe una diferencia con -cep tual grande en tre el contador de programa y el contador de datos, puesmientras el contador de programa debe de incrementarse continuamentepara encontrar la siguiente instrucción usando para ello la longitud enpalabras de que consta la instrucción an te rior, el contador de datos puedeo no incrementarse de acuerdo a si la instrucción requiere de datos o no.

Debe, por lo tanto, permitírsele gran flexibilidad al programador parapoder modificar el registro contador de datos, mientras que, usualmente,al registro contador de programas no se tiene acceso más que de formaindirecta.

Ensamblador

1-10

Page 21: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

1.3.2 Forma de Usar los Registros

Para poder comprender en su totalidad el uso de los distintos registroque forman parte de la UPC, realizaremos paso a paso una suma como sede scribe en el algoritmo de la sección 1.1.2.4.

Para realizar la suma asumiremos que la UPC puede interpretar 3instrucciones sencillas: CARGA, SUMA y GUARDA. Cada una de estasinstrucciones está definida de antemano rígidamente y se deben seguirlos pasos que el fabricante explica. Supondremos que las instruccionesrealizan estos pasos:

SUMA: Toma el contenido de la dirección formada por el contenido delas siguientes dos palabras y súmala a la que está en el Acumuladordejando el resultado en el Acumulador. Inventamos el código deinstrucción 30 hex a dec i mal que al ser encontrado por la UPC en unalocalidad de memoria sea interpretado como la instrucción SUMA.

CARGA: Toma el contenido de la dirección formada por el contenidode las siguientes dos palabras y guárdala en el Acumulador. Inventamosel código de instrucción 40 hex a dec i mal que al ser encontrado por la

Componentes Básicos de unSistema

1-11

Figura 1.3 Registros típicos de una UPC.

Page 22: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

UPC en una localidad de memoria sea interpretado como la instrucciónCARGA.

GUARDA: Toma el contenido del Acumulador y guardalo en ladirección de memoria formada por el contenido de las siguientes dospalabras. Inventamos el código de instrucción 50 hex a dec i mal que al serencontrado por la UPC en una localidad de memoria sea interpretadocomo la instrucción GUARDA.

Recuerde que el Contador de Programa debe de incrementarsecontinuamente para apuntar así a la siguiente dirección de memoriadonde se almacena una instrucción o dato.

Nuestro programa de suma sería entonces (las direcciones en hex a dec i -mal):

CARGA E0E0

SUMA E0E1

GUARDA E0E2

Notemos que aquí se in tro duce un nuevo concepto llamado mnemónicoque nos auxilia en recordar qué realiza cada código de instrucciones de lacomputadora en cuestión, pues en la palabra de memoria no se guarda lasletras de la instrucción sino un sim ple código que representa a lainstrucción:

40 E0 E0

30 E0 E1

50 E0 E2

Recordemos a su vez, que cada número en hex a dec i mal tiene suequivalente en binario y a su vez, cada número en binario se re sume en sihay corriente o no en cada uno de los circuitos que conforman el registroen cuestión, ya sea de memoria o interno a la UPC.

Coloquemos estos códigos en un mapa de memoria en una localidadarbitraria, por ejemplo en la dirección C000 hex a dec i mal (suponemosque tenemos una memoria to tal de 64K bytes por lo que bastan con 16líneas de dirección, 16 bits binarios o 4 hexadecimales para conocer sulocalización). En la figura 1.4 colocamos de alguna forma nuestroprograma en la memoria.

Ensamblador

1-12

Page 23: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Podemos seguir paso a paso el contenido de los registros hasta ahoraanalizados en la siguiente secuencia:

Componentes Básicos de unSistema

1-13

Figura 1.4 El manejo de los registros en un programa.

Page 24: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

· 1. De una forma por ahora desconocida, el registro contador deprograma o PC contiene la dirección de la primera instrucción:

C0 00.

· 2. La UPC carga el contenido de la palabra de memoria apuntadapor el PC al registro de instrucciones o I, en este caso el número 40 hexadecimal (CARGA), e incrementa en uno el contenido delregistro PC.

· 3. El código 40 que aparece en el registro de instrucciones haceque la lógica de la UPC realice dos pasos. Primero, el contenido de la palabra de memoria direccionado por el registro PC es traído de la memoria pero se almacena en el bit más significativo delregistro contador de datos (DC). La Unidad de ProcesamientoCentral incrementa posteriormente el contenido del PC en uno. Elsegundo paso consiste en traer el contenido de la palabra dememoria apuntado por PC y guardado en el bit menossignificativo del registro DC. Ahora, se utiliza el contenido delregistro DC como apuntador para traer la palabra de memoriaindicada al registro acumulador (A). Una vez más la UPCincrementa el contenido del registro PC en uno. Con esto lainstrucción número 1 (CARGA) se completa.

· 4. Una vez terminada la instrucción anterior la UPC trae elcontenido de la palabra de memoria direccionado por el registroPC e incrementa en uno este registro. Puesto que no le hemos dado ninguna otra instrucción específica a la UPC, el contenido de lapalabra que se trae de la memoria se almacena en el registro I paraser interpretado como una instrucción.

· 5. Algo muy similar al paso 3 sucede en esta etapa. El registro DCcontiene ahora la dirección de la palabra de memoria a suma (E0E1) y la UPC pasa el contenido de esta palabra y el del acumulador a la UAL para su suma, el resultado se almacena en el acumuladory el contador de programa se ha incrementado en 2 para quedarapuntando a la siguiente instrucción.

· 6. La última instrucción de nuestro pequeño programa es algomuy similar a la instrucción 1 pero en lugar de traer los datos de ladirección apuntada por el registro DC, se almacena en esadirección.

Ensamblador

1-14

Page 25: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

1.3.3 Banderas de Estado

Muchas veces es necesario sa ber en detalle qué es lo que realiza la UALpara poder decidir si la operación que se ordenó fue completada con éxitoo no o para tomar ciertas medidas con el resultado que nos entrega laUAL.

A los registros especializados en decirnos el resultado de lasoperaciones se les llama registros de estado (estatus reg is ter) o banderasy consisten en una memoria de un bit que nos in dica varias situacionesdentro de la UAL.

Algunas de estas situaciones en las que las banderas son modificadasque nos son de interés se resumen en los siguientes puntos:

· 1. El resultado fue cero.

· 2. Hay un acarreo.

· 3. Hay signo en la operación.

· 4. Hubo un desbordamiento en la operación.

· 5. Indicador de paridad.

· 6. Si la operación a realizar es suma o resta.

· 7. Acarreo a la mitad de los bits que forman la palabra.

Aquellas instrucciones que afectan o no a las banderas de estado soncuidadosamente seleccionadas por el fabricante y varían de computadora a computadora.

1.4 Ejecución de Instrucciones

Como en casi toda la lógica dig i tal, la UPC es controlada por un reloj.Este reloj puede ser tan sencillo como una sola señal o una combinaciónde varias señales de reloj requeridas por la UPC.

La ejecución de una instrucción puede ser dividida en dos par tesprincipales:

· Traer la instrucción (fetch en inglés)

· Ejecutar la instrucción (ejecute en inglés)

Componentes Básicos de unSistema

1-15

Page 26: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Si recordamos nuestro ejemplo an te rior de un programa, cadainstrucción comienza con el código que se carga en el registro deinstrucción (I). A esta operación le llamamos traer la instrucción (fetch).

Du rante la etapa donde se trae la instrucción, la UPC tiene que colocarel contenido del registro del contador de programa (PC) en el bus dedirecciones junto con las señales necesarias para informar a la lógica ex -te rior que se trata de una lectura a la palabra de memoria indicada por elcontenido del bus de direcciones. Por lo que a la lógica externa concierne, esto se trata de una sim ple lectura.

Mientras la lógica externa responde, la UPC usa su lógica interna parasumar 1 al contenido del registro PC. El contador de programas ahoraapunta a la siguiente localidad de memoria de la que el código de lainstrucción se trajo.

Una vez que el código de instrucción se encuentra en el registro deinstrucciones, dispara una serie de eventos controlados por la Unidad deCon trol que constituyen la ejecución de la instrucción.

En su forma más sencilla, dos periodos de reloj son necesarios paraejecutar la instrucción. Uno de ellos marca el tiempo para traer lainstrucción y el otro para ejecutarla.

Si consideramos las interconexiones necesarias para esto necesitaremos hasta el momento por lo menos las siguientes:

· 1. Las líneas necesarias para la dirección de memoria. Porsimplicidad consideraremos un diseño en el que se puedan accesar únicamente 65,535 localidades distintas de memoria ó 64K bytespara lo que se requiere de 16 líneas. En conjunto forman elllamado bus de direcciones.

· 2. Las líneas necesarias para leer o escribir información a lamemoria. Una vez más, por simplicidad, consideraremos undiseño de 8 bits de longitud de palabra por lo que se requieren de 8líneas de datos que en conjunto forman el llamado bus de datos.

· 3. La alimentación del circuito/circuitos que forma la UPCformado como mínimo con una línea de voltaje y otra de tierra.

· 4. Las señales adecuadas para informar a la lógica externa que setrata de una lectura o escritura a la memoria.

Ensamblador

1-16

Page 27: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

· 5. La línea del reloj.

Mostramos en la figura 1.5 el diagrama parcial y esquematizado de uncircuito de UPC.

Algunas veces se requieren de más líneas que las que físicamentepermite el empaque. Se utiliza entonces una técnica llamadamultiplexión en la que las mismas interconexiones externas sirven paravarios propósitos. Por ejemplo, si se requieren de 20 líneas de dirección ysólo tenemos disponibles 14 conexiones, podemos mandar en elmomento t la dirección parte baja por las 14 conexiones disponibles y lasrestantes 6 en el momento t+1 por las mismas interconexiones.

1.5 La Unidad de Control

La unidad de con trol se puede representar funcionalmente como unacaja negra tal como en la figura 1.1, pero en realidad consiste de un grannúmero de elementos lógicos que pueden ser activados por una secuencia de señales habilitadoras. La IEEE de fine a la unidad de con trol como laparte de una computadora que lee las instrucciones en secuencia, vigilasu aplicación y gen era los comandos y señales adecuadas para la UnidadAritmética y Lógica (UAL) y otros circuitos para su correcta aplicación.

Componentes Básicos de unSistema

1-17

Figura 1.5 Una microcomputadora con sus líneas externas.

Page 28: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

La unidad de con trol puede utilizar otros elementos contenidos en laUPC. Por ejemplo, la UC puede utilizar el complementador de la UnidadAritmética y Lógica. Una señal única de la Unidad de Con trol activa alcomplementador.

Sin em bargo, el complementar el contenido de una memoria pro vi -sional, aunque útil, no nos sirve de mucho. Lo que sí tiene valía escomplementar el contenido del Acumulador y esto implica mover lainformación al complementador y una vez realizada la operación,regresar el resultado al Acumulador.

Complementar el contenido del Acumulador requiere entonces de 5pasos:

· 1. Mover el contenido del Acumulador al Bus de Datos interno.

· 2. Mover el contenido del Bus de Datos al Complementador.

· 3. Activar la lógica del complementador.

· 4. Mover el contenido del Complementador al Bus de Datosinterno.

· 5. Mover el contenido del Bus de Datos al Acumulador.

A cada uno de estos 5 pasos se les llama microinstrucción. Cadamicroinstrucción es habilitada por una señal de la Unidad de Con trol. Sila Unidad de Con trol manda la combinación de señales adecuadas,cualquier número de microinstrucciones pueden ser ejecutadas para re -sponder a una macroinstrucción que es la respuesta aceptada de laUnidad de Procesamiento Cen tral a un código de una instrucción delenguaje de máquina, muy similares a las ya descritas (SUMA, CARGA yGUARDA).

Para complementar el contenido del Acumulador en nuestro ejemploprevio, la Unidad de Con trol requirió de 5 códigos binarios quedispararon las señales de con trol apropiadas. La secuencia de códigosbinarios que residen en la Unidad de Con trol son llamadosmicroprogramas y generar esta secuencia de códigos binarios se leconoce como microprogramación.

Existe un paralelo muy cercano en tre lo que es microprogramar y laprogramación en lenguaje de ensamblador. Un microprograma se guardacomo una serie de códigos binarios dentro de la Unidad de Con trol. Un

Ensamblador

1-18

Page 29: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

programa en ensamblador es guardado como una serie de códigosbinarios dentro de la memoria prin ci pal (RAM o ROM). Al programa enensamblador se le conoce con el nombre de macroprograma y a cadamacroinstrucción le corresponden uno o más microprogramas dentro dela Unidad de Procesamiento Cen tral que deben ser ejecutados paragenerar la respuesta esperada.

Un microprograma guardado en la Unidad de Con trol tiene memoriapara datos, que consiste en los registros de la UPC, ademas dealmacenamiento interno a la misma Unidad de Con trol. Unmacroprograma también tiene una área de almacenamiento, ya sea pro vi -sional (RAM) o definitiva (ROM) como describimos en la siguientesección.

La complejidad de las operaciones asociadas con una macroinstrucciónes función directa del tamaño del microprograma que lamacroinstrucción inicia. Pero existe el límite impuesto por el tamañofísico que puede tener la Unidad de Con trol y esto se hace más patente enlas microcomputadoras, donde toda la UPC se encuentra contenida en unsolo circuito.

La Unidad de Con trol de cada computadora no es más que unmicroprograma. Si se permite al usuario modificarlo se dice que lacomputadora es microprogramable. Si la Unidad de Con trol se diseñacomo parte del diseño lógico de la computadora y forma parte in al ter ablede la Unidad de Procesamiento Cen tral, entonces, la computadora no esmicroprogramable.

1.6 Unidad Aritmética y Lógica

La Unidad Aritmética y Lógica (UAL, en inglés ALU) que es parte dela Unidad de Procesamiento Cen tral (UPC, Cen tral Pro cessing UnitCPU) es la sección de la computadora que realiza las operacionesmatemáticas y lógicas en los datos de entrada procesados por elcomputador. Esta sección de la máquina puede ser relativamentepequeña consistiendo en quizá uno o dos circuitos de integración a granescala (LSI), formar parte de la propia UPC como en el caso de lamicrocomputadora o ser una serie con sid er able de circuitos lógicos dealta velocidad como en las macrocomputadoras o supercomputadoras.No importando el tamaño y la complejidad de estos circuitos, lasmáquinas pequeñas realizan generalmente las mismas operacioneslógicas y aritméticas usando los mismos principios que en las grandes

Componentes Básicos de unSistema

1-19

Page 30: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

máquinas. Lo que cambia es la velocidad de las compuertas lógicas y loscircuitos utilizados; también, técnicas especiales son utilizadas pararealizar varias operaciones en paralelo.

Aunque muchas funciones pueden ser realizadas por los UAL de lasmáquinas de hoy en día, las operaciones aritméticas básicas (suma, resta,multiplicación y división) continúan siendo las operaciones másutilizadas. In clu sive las especificaciones de una computadora nos danevidencia de la naturaleza fun da men tal de estas operaciones: en cadamáquina nueva se describen los tiempos requeridos para la suma ymultiplicación como características significativas.

Es importante resaltar que existe, como ya se explicó, otra parte de lacomputadora llamada Unidad de Con trol que dirige las operaciones delUAL. Todo lo que hace el UAL es sumar, restar, acarrear, etc. cuando se leprovee de la secuencia correcta de las señales de entrada. Depende delelemento de con trol el proveer de estas señales así como es función de launidad de memoria proveer a los elementos aritméticos de lainformación que usarán.

Ensamblador

1-20

Page 31: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

1.7 La Memoria

La memoria de la computadora no está concentrada en un sólo lugar; losdispositivos de almacenaje están distribuidos en toda la máquina. En laparte más interna encontramos a los registros de operación que sonregistros utilizados por la unidad de con trol y la aritmética de lacomputadora. Los cálculos se realizan con los datos que se toman deestos registros, por ejemplo, la suma, multiplicación y corrimientos sontodos realizados en estos almacenamientos provisionales. El proceso ac -tual de información se realiza en la localidad de estos registros.

Viendo hacia afuera, la siguiente categoría de registros dealmacenamiento que encontramos es llamada memoria de altavelocidad, memoria interna o memoria prin ci pal. Esta sección de lamemoria de la computadora consiste en un conjunto de registros dealmacenamiento, cada uno de los cuales es identificado con una dirección

Componentes Básicos de unSistema

1-21

Figura 1.6 La Unidad Aritmética y Lógica esquematizada.

Page 32: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

(localización de cada registro de memoria) que permite a la unidad decon trol, ya sea escribir o leer, de un registro en par tic u lar. Para que unprograma (conjunto de instrucciones) pueda ser ejecutado es necesarioque resida an tes en esta memoria.

Es deseable que la velocidad de operación en esta sección de la memoria de la computadora sea tan rápida como sea posible, puesto que la mayoría de las transferencias de datos de y hacia la sección de procesamiento de la información de la máquina será a través de la memoria prin ci pal; por estarazón los dispositivos de almacenamiento con un tiempo de acceso(tiempo que transcurre en tre el momento que se solicita la información yel momento en que el dispositivo tiene una respuesta) rápido songeneralmente elegidos para la memoria prin ci pal.

Desafortunadamente los dispositivos disponibles en el momento, queson lo suficientemente rápidos para realizar esta funciónsatisfactoriamente, no poseen la capacidad de almacenamiento quealgunas veces es requerida ni un costo aceptable. Como resultado,memoria adicional, llamada memoria auxiliar o memoria secundaria,es agregada a la mayoría de las máquinas. Esta sección de la memoria dela computadora se caracteriza por un bajo costo por dígito almacenado,pero generalmente tiene una velocidad de operación mucho menor quelos registros de operación o que la memoria prin ci pal. Esta sección de lamemoria es algunas veces designada como memoria de respaldo, puessu función es manejar cantidades de datos en exceso a las que pueden seralmacenadas en la memoria interna.

Los dispositivos más externos y últimos de almacenamiento son usadospara introducir información a la computadora del “mundo externo” ypara guardar los resultados de la computadora para el usuario de lacomputadora. Este medio de almacenaje consiste generalmente entarjetas perforadas (en desuso), cinta de papel perforada (en desuso),cintas magnéticas o dis cos magnéticos y las salidas de la máquinaconsisten generalmente en caracteres impresos ya sea en pantalla o enpapel.

Cada una de las divisiones de la memoria tiene ciertas características.Por ejemplo la importancia de velocidad es muy alta en los registros deoperación. Estos registros generalmente deben realizar operaciones avarias veces la velocidad de la memoria prin ci pal. La memoria prin ci paltambién requiere grandes velocidades de operación, pero como esdeseable almacenar grandes cantidades de datos (de 600,000 a 109 bits)

Ensamblador

1-22

Page 33: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

en esta sección de la memoria, un compromiso en tre el costo y lavelocidad debe buscarse. El mismo tipo de compromiso se realiza en elcaso de la memoria auxiliar en el que se almacenan en tre 360,000 y 1015

bits, siendo muy caro utilizar los mismos dispositivos que para lamemoria prin ci pal.

Es importante darse cuenta al considerar la velocidad de operación, quean tes de que una palabra puede ser leída, es necesario localizarla. Eltiempo para localizar y leer una palabra de memoria es llamado tiempode acceso. El procedimiento para localizar información puede serdividido en dos clases:

· Acceso Aleatorio

· Acceso Secuencial

Los dispositivos de almacenaje que tiene acceso aleatorio son aquellosen los que la localización dentro del dispositivo puede ser seleccionadaarbitrariamente sin seguir ningún orden y el tiempo aproximado deacceso es aproximadamente igual para cada una de las localidades dememoria del dispositivo. Los registros internos de trabajo o la memoriaprin ci pal es un ejemplo de un dispositivo de almacenamiento de accesoaleatorio.

Por otro lado los dispositivos de acceso secuencial necesitan serrecorridos en orden para llegar a cierta localidad de memoria, por lo queel tiempo de acceso varia de acuerdo a la localidad.

Otra forma de subdividir los dispositivos de almacenaje es de acuerdo asi son dispositivos del tipo

· Dinámicos

· Estáticos

En los estáticos, la información, una vez grabada en su localidad, no esolvidada o borrada por el tiempo en que el dispositivo tenga energíaeléctrica o la información no sea cambiada explícitamente. Comocontraparte, en un dispositivo dinámico, una vez guardada lainformación en una localidad, ésta se olvida en un tiempo fini to, por loque se debe recordar o “refrescar” constantemente.

Componentes Básicos de unSistema

1-23

Page 34: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

1.7.1 Memoria de Acceso Aleatorio

La memoria de una computadora se organiza en palabras de X longitud,cada una de ella ocupa una localidad o dirección predeterminada dentrode la memoria. Como se puede observar en la figura 1.7 una memoriadada se di vide generalmente en N palabras donde N es una potencia de 2.Cada palabra tiene el mismo número de bits llamados la longitud de lapalabra.

La dirección de los números en la memoria corren consecutivamentecomenzando con la dirección cero hasta la máxima que la computadorapuede direccionar. Es importante entender la diferencia en tre contenidode la memoria y la dirección de la memoria. Una memoria es como ungran gabinete que contiene tantos cajones como direcciones hay enmemoria. En cada cajón hay una palabra y la dirección de la palabra estáescrita en la parte externa del cajón. No removemos la palabra en unadirección cuando la movemos; únicamente cambiamos el contenido de ladirección cuando almacenamos o escribimos una nueva palabra.

Desde el punto de vista externo, una memoria prin ci pal de altavelocidad es muy sim i lar a una “caja negra” con un número delocalidades o direcciones en las que los datos pueden ser almacenados oleídos. Cada dirección o localidad contiene un número fijo de bits

Ensamblador

1-24

Figura 1.7 La memoria vista como arreglo lineal.

Page 35: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

binarios, y a este número se le llama longitud de la palabra de lamemoria. Una memoria que contenga 4,096 localidades distintas dememoria, cada una de ellas capaz de almacenar 16 bits binarios, esllamada “memoria de 16 bits 4,096 palabras” o en el lenguaje vernáculode la computadora “memoria de 4K 16 bits”. Puesto que las memoriasgeneralmente vienen en potencias de 2, el sufijo K significa en este caso1,024 y no 103, como en el caso dec i mal, pues se entiende que las 2N

localidades de memoria están disponibles. Por ejemplo una memora de16 bits de 216 palabras es llamada “memoria de 64K 16 bits”.

Las memorias puede ser leídas (los datos pueden ser tomados de) oescritas (los datos son almacenados en la memoria). Las memorias en lasque es posible leer y escribir son llamadas memorias de lectura yescritura y erróneamente conocidas como RAM (Ran dom Ac cess Mem -ory, memoria de acceso aleatorio) ya que las memorias de sólo lectura(ver siguiente párrafo) también entran en esta clasificación. A lasmemorias en las que solamente es posible leer y no permiten escritura son llamadas memorias de sólo lectura o ROM (Read only mem ory).

Una palabra de información binaria puede ser almacenada en grupos,por ejemplo 8 bits en unidades de memoria. Las entradas y salidas deestas unidades se encuentran interconectadas de forma que el grupo debits binarios en tre y salga de forma se rial o secuencial (uno a la vez), osean movidos en paralelo (todo el grupo a la vez).

Cuando se trata de registros dentro de la UPC (CPU) los programadoresusualmente los representan como pequeñas cajas una junto a otra ydentro de ellas un cero o uno lógico que representa su contenido.

1.7.2 Dirección

Incrementando el número de unidades de memoria de almacenamientopodemos aumentar el número de bits disponibles. Pero un problema fun -da men tal surge: ¿Cómo poder accesar a cada una de las localidades sinconfusión?

La solución es usar una forma de dirección. Podemos aplicar un únicogrupo de dígitos binarios a una serie de líneas de selección y de esta forma una localidad única queda disponible. En la figura 1.8 mostramos unamemoria de semiconductores estática típica arreglada de forma que sus“celdas” puedan ser seleccionadas independientemente con un códigobinario único llamado palabra de dirección.

Componentes Básicos de unSistema

1-25

Page 36: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Una vez que la celda ha sido localizada, un 0 o un 1 puede ser escrito a lacelda. Dentro del circuito las celdas se organizan en una matriz de x por y,con la mitad de las líneas de dirección localizando las coordenadas de y.Pero para nuestros propósitos es suficiente considerar a las celdas comouna larga cadena y a la dirección como un se lec tor de alguna forma de lacelda correcta.

1.7.3 La Memoria de Sólo Lectura

La memoria de sólo lectura (ROM Read Only Mem ory) es undispositivo de memoria utilizado para guardar información que nocambia. Hay una operación inicial en que la información se graba en lamemoria y posteriormente sólo es posible leer de ella y no sobre escribirla información. Generalmente la información es puesta en su lugar por elfabricante del dispositivo. Es deseable, sin em bargo, en muchasocasiones poder grabar la información uno mismo en el dispositivo puesel costo de fabricar unos pocos ROMs es prohibitivo. Existen en elmercado una serie de circuitos que cumplen con esta característica y que

Ensamblador

1-26

Figura 1.8 La memoria y sus conexiones extrenas.

Page 37: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

son programables: las memorias de sólo lectura programables o PROM(pro gram ma ble read only mem ory)memoria de sólo lecturaprogramable. Estos circuitos permiten grabar la información una sola vez y de ahí en adelante se comportan exactamente igual a un ROM. Si serealizan circuitos experimentales y son constantes los cambios de diseñode datos y programas en la etapa inicial o se requiere de la flexibilidad depoder borrar de vez en cuando el contenido de la memoria ROM yreprogramarla, se utilizan los circuitos de memoria de sólo lecturaprogramables y borrables o EPROM (eras able pro gram ma ble read onlymem ory). Estos circuitos pueden ser programados, tal como los PROMpero tienen una ventana de cuarzo en la parte su pe rior del empaque por laque se puede borrar la información usando una luz ultravioleta.

El atributo más importante de la memoria ROM es que la informacióngrabada en ella no se borra si el voltaje que requiere el circuito parafuncionar es interrumpido. Tales memorias son conocidas como novolátiles. En contraste, casi todo tipo de memoria RAM es volátil.

La memoria ROM tiene muchas aplicaciones en sistemas digitales.Puede ser usada, por ejemplo, para contener valores arbitrarios de unatab la de verdad. Cuando una tab la de verdad tiene muchas vari ableslógicas de entrada y salida y su realización requiere de un gran número decompuertas, puede ser económicamente substituida por una memoriaROM. Se usa también en conversión de códigos para desplieguenumérico. Tiene una amplia aplicación en cálculo numérico donde serequiere de muchas operaciones que pueden ser substituidas por unabúsqueda en tab las, tales como las funciones trascendentales,multiplicación, división, logaritmos, etc. Pero principalmente guardan elprograma que forma el Sistema Operativo de la máquina en cuestión.

1.8 Arquitectura de sistemas 80x86

Hemos escogido para presentar como ejemplo de la UPC al circuito80486 de Intel. Esta selección obedece al hecho de que en México, casitodas las computadoras personales se basan de una forma u otra en estecircuito o en uno de la misma fa milia (todas las compatibles con IBM).

Las microcomputadoras han encontrado su camino hacia muchas de lasaplicaciones reservadas con anterioridad a la minicomputadora. Elabaratamiento de los circuitos y su incesante popularidad ha dadonacimiento a circuitos muy avanzados. El circuito 80486 (y los de su fa -milia) cuentan en tre sus características con:

Componentes Básicos de unSistema

1-27

Page 38: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

· Arquitectura interna de 32 bits (64 para P5 y P6)

· Soporta directamente 4 gigabytes (232) de memoria principal y 64tetrabytes de memoria virtual (246)

· Aritmética de 8, 16 y 32 bits con y sin signo, binario y decimal;incluye multiplicación y división

· 14 palabras de registros de 32 bits divisibles en 16 u 8 bits cuatrode ellos

· Capacidad de acceso directo a memoria

· Soporte de coprocesadores (modelo SX, DX lo incluye)

· Operaciones con cadenas

· Soporta E/S por medio de mapa de memoria

Los registros gen er a les de la UPC han aumentado conforme losrequerimientos de cómputo han evolucionado. En un circuito de este tipoencontramos 14 registros de 32 bits (de los cuales sólo mencionaremoslos 16 bits bajos):

Ensamblador

1-28

Page 39: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Tab la 1.1 Registros

Registros gen er a les

AX acumulador

BX base

CX cuenta

DX datos

Grupo de apuntadores e índices

SP apuntador del stack

BP apuntador base

SI apuntador fuente

DI apuntador datos

IP apuntador de instrucción

F banderas del sistema

Registros segmentos

CS segmento de código

DS segmento datos

ES segmento ex tra

SS segmento pilas

El grupo de registros gen er a les consta de 32 bits al igual que los demáspero puede leerse en dos par tes de 16 bits y a su vez la parte baja de 16 bits se puede leer en dos par tes: una baja especificada con el sufijo L y una alta especificada con el sufijo H. Por ejemplo, el registro AX se puede dividiren AL y AH.

Algunos de estos registros tienen usos específicos y algunasinstrucciones requieren de ciertos registros:

Componentes Básicos de unSistema

1-29

Page 40: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Tab la 1.2 Registros y su uso

REGISTRO OPERACION

AX Multiplica o di vide palabras

AL Multiplica o di vide bytes

AH Multiplica o di vide bytes

BX Tra duce

CX Operaciones con cadenas o contador enlazos

CL Rota o corre vari able

DX Multiplica o di vide palabras

SP Operaciones con la pila

SI Operaciones con cadenas

DI Operaciones con cadenas

IP No es accesible más que con saltos

El registro de banderas consta de 16 bits como se muestra en la tab la 1.3.Las decisiones de la computadora se basan muchas veces en el estado deestos bits.

Tab la 1.3 Banderas

Bandera Función

OF saturación

DF dirección (operación con cadenas)

IF habilita interrupciones

TF trampa (ejecución paso a paso)

SF signo (resultado negativo)

ZF cero

AF acarreo auxiliar

PF pariedad (par)

CF acarreo

IOPL Nivel de privilegio para E/S (2 bits)

NT tarea anidada

RF Con tin ua operación

VM Modo vir tual

Este circuito ve a la memoria como un grupo de unidades lógicasllamadas segmentos. Cada segmento puede ser de hasta 4 giga bytes,siendo los de 64K bytes de longitud para compatibilidad con modelos

Ensamblador

1-30

Page 41: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

anteriores, y son controlados por los registros de segmentos, cada unoindicando el fi nal del segmento en par tic u lar.

Sólo existe una restricción con respecto a los segmentos: debencomenzar en un párrafo que es una dirección que es di vis i bleexactamente en tre 16. Para esto, los 4 bits menos significativos deben sercero.

Los segmentos pueden ser adyacentes, disjuntos, sin traslape o contraslape parcial o to tal. Si requerimos usar un registro como apuntador amemoria, necesitaremos sumar un desplazamiento para poder completarlas 32 líneas de direccionamiento disponibles. Este desplazamiento se in -dica en la tab la 1.4.

Tab la 1.4 Uso del Desplazamiento

Tipo de referencia Segmento base por omisión Segmento base alterno Desplazamiento

Traer instrucción CS Ninguno IP

Operación con pila SS Ninguno SP

Vari ables (excepto los quesiguen)

DS CS ES SS dirección efectiva

Fuente cadena DS CS ES SS SI

Destino cadena ES Ninguno DI

BP usado como registro base SS CS ES SS dirección efectiva

El circuito cuenta con una cola de instrucciones donde el procesador vaguardando las siguientes instrucciones a ejecutar disminuyendo con estoel ciclo de instrucción del típico traer instrucción, decodificar instrucción y ejecutarla a sólo dos pasos, pues mientras se interpreta la instrucción setrae la siguiente al mismo tiempo.

1.9 Resumen

Se in tro duce a los componentes de una UPC y se muestra comofunciona está. Se mencionan y explican brevemente algunoscomponentes externos a la UPC en es pe cial circuitos auxiliares como lamemoria y sus clasificaciones. En este capítulo introducimos el conceptode instrucción y su forma de interpretación dentro de la UPC, losregistros in dis pen sa bles para el funcionamiento de la UPC y el ALU.

Se in tro duce un circuito típico de gran popularidad en México y elmundo: el Intel 80x86.

Componentes Básicos de unSistema

1-31

Page 42: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

1.9.1 Puntos Importantes del Capítulo

· Un sistema se conforma por 5 componentes básicos: UPC,memoria, dispositivos de E/S, interfases de E/S y un programa

· El juego de patrones definidos por el fabricante forman el juego de instrucciones.

· La UPC consta de la UAL, los registros, la unidad de control y unbus interno para interconexiones

· Dentro de la memoria son almacenados datos que luego seinterpretan en la UPC, estos datos tienen muchas interpretacionessegún el programador y el diseñador del circuito.

· Existe un registro especializado llamado de banderas de estadoque nos indica varias condiciones dentro del la UPC.

· Para ejecutar las instrucciones es necesario traerlas de la memoria(fetch) y ejecutarlas (ejecute) esto se realiza en uno o variso ciclosde reloj que mide entonces la velocidad de ejecución de lainstrucciones.

· La unidad de control de una UPC puede o no programarse.

· La UAL ejecuta un conjunto de operaciones aritméticas y lógicasbásicas.

· La memoria puede dividirse en Interna, secundaria, ROM, RAM,dinámica, estática y todas ellas son accesadas por medio de unadirección que identifica las distintas localidades que laconforman.

1.10 Bibliografía

Llano Emiliano Sistemas Digitales y Arquitectura de Computadoras.Unam 1993. Capítulo 10 y 11.

Ensamblador

1-32

Page 43: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Capítulo 22.1 Otros lenguajes y el ensamblador

No se debe pasar por alto que un sistema de computación, noimportando la complejidad de los varios componentes electrónicos quelo formen, no es más que un juguete caro a menos de que exista unpropósito de su existencia y un programa que haga que este propósito secumpla. Es este programa, formado por una serie de instruccionesprecisas y arreglado en un orden lógico, que hace de la computadora unaherramienta útil.

Existen muchos tipos de programas y de sistemas de programas, a losque en conjunto se conocen como Programas (soft ware), en oposición alos elementos mecánicos y electrónicos llamados en conjunto Hard -ware. Algunos de estos programas se usan para un tarea en par tic u larcomo puede ser el caso de una nómina. Otros programas se usan paramanejar los distintos puertos de entrada y salida de una computadora. Laoperación tanto mecánica como lógica de los dispositivos externos alsistema por donde la información es introducida y entregada, escontrolada directamente por estos programas. Existe aún otro tipo deprogramas que realizan funciones muy específicas de computación como realizar las funciones que la UAL no puede realizar o realiza muydespacio. Algunas veces se conoce a los programas como subrutinas pues forman parte de programas mucho más grandes. Para un sistema decomputación dado, muchos programas pueden reunirse y guardarse en un sistema de almacenamiento externo tal como disco magnético flex i ble(medio muy común), posteriormente se utiliza un programa que puedaextraer a los primeros del medio donde fueron almacenados y ejecutarlos. A este programa se le conoce como sistema operativo (op er at ing sys -

2-33

Page 44: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

tem) y si se encuentra almacenado en un disco magnético se le llamasistema operativo de disco (disk op er at ing sys tem o DOS).

La primera consideración sería ¿Cómo hacer que la computadoracomience a funcionar? Aplicando la energía eléctrica únicamente no essuficiente para hacer que la computadora comience a funcionar como elusuario desea. Debe existir un programa que haga la inicialización delsistema y de ter mine las metas a alcanzar para poder hacer que el sistemaesté en posibilidad de aceptar entradas de los dispositivos externos comopueden ser el teclado o los dis cos magnéticos de almacenamiento. A esteprograma se le conoce como programa de arranque (start-up pro gram).Usualmente se le conoce en inglés con el nombre de boot strap oprograma de arranque en frío (cold-start), los programas de arranque nonecesariamente tienen que ser muy grandes. El procedimiento comúnconsiste en colocar en una localidad de memoria predefinida del tipoROM, el pequeño programa de arranque. Toda computadora tiene unaforma determinada de comenzar la ejecución de un programa en unalocalidad específica al aplicarles la energía eléctrica, esta característicase aprovecha para guardar en esa localidad el inicio del programa dearranque.

El programa de arranque inicia una cadena de eventos que termina conla ejecución en memoria prin ci pal de una parte del sistema operativoconocida como procesador de comandos que queda en todo momentoactivo para recibir órdenes posteriores de otros programas o del usuariodirectamente en una parte del sistema operativo llamado BIOS o sistemabásico de entrada y salida (Ba sic In put Out put Sys tem).

Lo que sucede a partir del punto en que el sistema operativo toma con -trol de la Unidad de Proceso Cen tral, varía de sistema a sistema pero elobjetivo fun da men tal de este programa es coordinar las distintasoperaciones del computador y llevar registro del estado de varios eventos tales como interrupciones, peticiones a dispositivos externos, etc. Unadiscusión a fondo de sistemas operativos queda fuera del alcance de estelibro pero se puede consultar la bibliografía para ahondar en el tema.

2.2 Los Programas en la Memoria

Como hemos visto en la descripción de la Unidad de ProcesamientoCen tral y en es pe cial de la Unidad de Con trol, la computadora sólo escapaz de ejecutar una instrucción a la vez (en las arquitecturastradicionales no incluyendo en esto arquitecturas en paralelo) por lo que

Ensamblador

2-34

Page 45: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

se requiere de una memoria donde guardar las instrucciones que formanel programa. La cantidad de memoria necesaria depende de lacomplejidad del programa y de la cantidad de datos que genere o use.

La ejecución del programa consiste en tomar una instrucción de lamemoria prin ci pal e interpretarla en la Unidad de Con trol de la UPC. Elregistro de Contador de Programa (PC) es utilizado para ir llevando unapuntador de memoria de la siguiente instrucción a ejecutar. Como yahemos visto, el PC se debe incrementar un poco an tes de realizar latransferencia (fetch) de la siguiente instrucción en memoria al Registrode Instrucciones (I).

Las instrucciones son utilizadas para especificar la secuencia lógica que debe ocurrir dentro del sistema de cómputo. Para usar una computadoradebemos, por lo tanto, seleccionar primero los dispositivos que nos darán la capacidad lógica suficiente y posteriormente realizar la secuencialógica que llenará nuestras necesidades. La secuencia lógica forma elprograma y programar es crear estas secuencias.

Nada nos impide crear estas secuencias lógicas en forma binaria y dealguna forma colocarlas en la memoria en las localidades escogidas y dehecho, las primeras computadoras eran programadas de esta forma: unasecuencia de 1 y 0 era cuidadosamente codificada y luego introducida a la máquina por medio de alambres que cambiaban el contenido de lamemoria (en las computadoras más antiguas) o por medio deinterruptores que se conectaban directamente a la memoria por medio delbus de datos (en la siguiente generación).

Pronto los programadores escogieron representar los códigos deinstrucciones en hex a dec i mal en lugar de binario para abreviar y facilitarsu la bor (es muchas veces más fácil identificar un er ror en una secuenciade números hexadecimales que en una cadena de unos y ceros) y luegobuscar la forma en que la máquina trabajará más ayudando a laconversión.

Un código escrito en un papel u otro medio, forma lo que llamamoscódigo fuente, este código es introducido luego a la máquina y elprograma que lo lee, lo convierte y coloca en su localidad de memoria, esllamado un ed i tor y es la forma más el e men tal de colocar los unos y ceros en donde deben estar. Estos unos y ceros colocados en la memoria prin ci -pal y listos a ser interpretados como un programa, son llamados el códigoobjeto y no son más que la representación exacta de lo que en un

Otros Lenguajes y el Ensamblador

2-35

Page 46: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

principio teníamos en papel pero ahora colocado en la memoria de lacomputadora.

Pronto se vio que el camino correcto consistía en hacer el trabajo delprogramador más fácil mientras que el de la máquina debería ser el másdifícil. Simplificar el trabajo del programador es una mejora sustancial en nuestro equipo. Llevando este razonamiento un paso más allá, ¿Por quéno usar un lenguaje que sea más sencillo de aprender, programar eintroducir a la máquina que una secuencia de números sin sentido másque para el más experto?

La respuesta a esto, en nivel sistema de computadora, se encuentra en ellenguaje ensamblador que no es más que convertir las instrucciones queentiende la Unidad de Proceso Cen tral (lenguaje de máquina) en unaserie de símbolos alfabéticos y números mucho más convenientes paralos programadores humanos. Los lenguajes ensambladores son, en unaprimera aproximación, versiones simbólicas y mucho más fáciles de leerde los lenguajes de programación de máquinas computadoras. Alincrementarse el uso de las computadoras, los programas eran cada vezmás complejos y de mayor tamaño y se reconoció la necesidad deconstruir los programas en unidades o módulos más pequeños eindependientes. Estas características fueron pronto introducidas en loslenguajes ensambladores que permitieron que módulos de programasescritos como unidades independientes fuesen integrados o ensambladosen uno más grande, de ahí el nombre de ensamblador. En la época ac tual,casi todo tipo de computadora, sea grande o pequeña, se vende con unlenguaje ensamblador y otros programas asociados que nos permitenintroducir nuestras instrucciones a la memoria de la máquina. El lenguaje ensamblador es definido por el fabricante y es único a cada modelo deUPC. Ocasionalmente, varios lenguajes ensambladores pueden existirpara la misma máquina pero el programa que se encarga de colocar losunos y ceros en la memoria, debe entregar el mismo resultado: elprograma objeto ejecutable por la computadora.

Aunque algunos estándares para lenguaje ensamblador han sidopropuestos, hay poca evidencia de que los fabricantes se apeguen a el,pero un patrón gen eral ha emergido:

· Cada instrucción ocupa una línea.

· Cada línea se forma de cuatro campos:

Etiqueta

Ensamblador

2-36

Page 47: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Mnemónico

Operando

Comentario

Cada línea fuente de programa representa una línea objeto traducida porel programa que se denomina ensamblador.

El cam po del mnemónico es el más importante y es el único cam poobligatorio que aparece en cada línea.

etiqueta operando comentario

mnemónico

LIM DC0,ADDR1 ;carga dirección fuente en DC

AQUI LMA ;Carga palabra en acumulador

AIA H"0F" ;quita 4 bits de la palabra

BZ SALIR ;salir de programa si elresultado es cero

SRA ;Guarda bits modificados

INC DC0 ;Incrementa el contador dedatos

JMP AQUI ;regresa a procesar siguientebyte

SALIR ;siguiente instrucción

Nótese que lo único sagrado e in al ter able son los códigos binarios de lasinstrucciones; los mnemónicos del ensamblador pueden ser alteradossiempre y cuando se reprograme al programa ensamblador parareconocerlos y hacer la traducción adecuada.

El cam po de las etiquetas puede o no tener información y si la contiene,sirve al ensamblador para llevar apuntadores de sitios interesantes dentrodel programa a los que seguramente queremos regresar. Estos sitios sonapuntadores en memoria pues no tenemos forma de usar la direcciónverdadera al no sa ber en qué lugar la pondrá el ensamblador. La dirección en donde comienza a ensamblarse el programa depende de la longitud del sistema operativo, del tamaño del ensamblador, de instruccionesespecíficas, etc.

El cam po de los operadores sirve para proveer información necesaria ala instrucción en caso de que exista. Por ejemplo, no podemos sumar unnúmero al registro Acumulador si no indicamos en el cam po de operandoeste número.

Otros Lenguajes y el Ensamblador

2-37

Page 48: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Los comentarios pueden o no ir, pero su uso es casi obligatorio puescontiene información que nos hace más fácil comprender qué es lo quehace el programa y en su caso modificar o dar mantenimiento aprogramas escritos por otra per sona o por nosotros mismos hace tiempo.La información contenida en este cam po es de vi tal importancia para elprogramador pero no influye en nada al resultado del ensamblador.

2.3 Conjunto de Instrucciones

El grupo de instrucciones usados por una Unidad de ProcesamientoCen tral par tic u lar es conocido como conjunto de instrucciones. Cadafabricante incorpora un conjunto de instrucciones ligeramente distinto en cada UPC, de acuerdo al uso al que se destinará el producto. Algunos sonmuy sencillos consistiendo en un puñado de instrucciones, mientras queotros son bastante complejos, con su to tal llegando a los varios cientos.Existen varios grupos de instrucciones, cada uno de ellos con unpropósito especifico tales como:

· de entrada y salida

· de transferencia

· condicionales

· aritméticas

· de interrupción

· etc.

Usualmente se les da un nombre que es una abreviatura en la forma deun grupo de caracteres, claro que, como ya sabemos, todo esto llegafinalmente a ser unos y ceros almacenados en una localidad de lamemoria prin ci pal.

2.4 Ensambladores

Un programa sencillo como el mostrado en la sección 1.3, no puede serensamblado tal como se presentó; es necesario informar al programaensamblador de varios elementos an tes de que pueda comenzar a realizarsu trabajo. Por ejemplo, es necesario informarle en qué localidad dememoria queremos comenzar a ensamblar el programa.

Ensamblador

2-38

Page 49: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Existen una clase de instrucciones llamadas directivas delensamblador que no forman parte del lenguaje de la máquina peroproveen al ensamblador de información que no puede deducir por símismo.

Para poder armar las direcciones de las etiquetas que el programacontiene, es necesario especificar el origen del programa. Esto se logracon la directiva “origen” (ORG) que es la única directiva obligatoria ynecesaria.

Para terminar el programa se usa la directiva “fin” (END) que informa al ensamblador que ya no siguen más instrucciones.

La directiva “iguala” (EQU) que nos hace más fácil la la bor deprogramar al asignar valores a vari ables para su uso pos te rior.

Otra de las directivas muy usadas es la asignación de una palabra o dedos palabras para asignar valores a vari ables (DB y DW) para su pos te rior uso.

Se debe recordar que las abreviaciones de las directivas delensamblador cambian de uno a otro y siempre se debe consultar el man -ual. Existen ensambladores bastante complejos que permiten toda unaserie de comandos complicados que hacen más sencillo el programar anivel ensamblador.

Nuestro programa, usando las directivas explicadas, quedaría:

ORG H"03FF"

mas cara EQU H"0F"

LIM DC0,ADDR1 ;carga dirección fuente en DC

AQUI LMA ;Carga palabra en acumulador

AIA mas cara ;quita 4 bits de la palabra

BZ SALIR ;salir de programa si el resultado escero

SRA ;Guarda bits modificados

INC DC0 ;Incrementa el contador de datos

JMP AQUI ;regresa a procesar siguiente byte

SALIR END ;siguiente instrucción

Una vez definido el inicio y fin de un programa, el ensamblador puedellevar a cabo su trabajo y nos entregará una secuencia de númeroshexadecimales que forman el programa objeto que correrá directamenteen la máquina tal como se muestra a continuación (el programa se

Otros Lenguajes y el Ensamblador

2-39

Page 50: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

modificó ligeramente para ser ejecutado en un procesador del tipo 80x86y se le agregaron todas las directivas del ensambaldor necesarias parapoder ensamblarlo):

Microsoft (R) Macro As sem bler Ver sion 5.00 4/15/93 06:30:48

Page 1-1

;****************************************************************

;Programa an te rior modificado ligeramente para un procesador

;tipo 80x86 con resultado de un ensamble.

;Nótese todas las directivas agregadas al ensamblador

;****************************************************************

;definiciones previas usadas en el programa

000F mas cara EQU 0Fh

; ————————————————————————————————

0000 datarea SEG MENT ; área definición dirección a convertir

0500 ORG 500h ; dirección de inicio de la zona dedatos

0500 ???? addr1 DW ?

0502 datarea ENDS

;*****************************************************************

0000 ejemplo SEG MENT ;Programa ejemplo

;————————————————————————————————————————————————-

0000 codigo PROC FAR

0100 ORG 100h

AS SUME CS:ejemplo, DS:datarea, ES:ejemplo ; donde está elcódigo

0100 inicio:

0100 8D 1E 0500 LEA BX,addr1 carga dir fuente enreg auxiliar

0104 89 07 AQUI: MOV [BX],AX ;mover datos de dir a Acum

0106 25 000F AND AX,mas cara ;quita 4 bits de la palabra

0109 74 05 JZ SALIR ;salir si el resultado es cero

010B 8B 07 MOV AX,[BX] ;Guarda bits en dirección

;apuntada por el registro BX

010D 43 INC BX ;Incrementa contador datos

010E EB F4 JMP AQUI ;regresa por siguiente byte

0110 SALIR: ;siguiente instrucción

0110 codigo ENDP

;—————————————————————————————————————————————————

0110 ejemplo ENDS

;******************************************************************

END inicio

Sym bols-1

Seg ments and Groups:

Ensamblador

2-40

Page 51: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

N a m e Length Align Com bine Class

DATAREA . . . . . . . 0502 PARA NONE

EJEMPLO . . . . . . . . 0110 PARA NONE

Sym bols

N a m e Type Value Attr

ADDR1 L WORD 0500 DATAREA

AQUI L NEAR0104 EJEMPLO

CODIGO F PROC 0000 EJEMPLO Length = 0110

INICIO L NEAR0100 EJEMPLO

MAS CARA NUMBER 000F

SALIR L NEAR 0110 EJEMPLO

FILE NAME TEXT ensambla

64 Source Lines

64 To tal Lines

10 Sym bols

51078 + 264170 Bytes sym bol space free

0 Warn ing Er rors

0 Se vere Er rors

2.5 Direccionamiento a Memoria

Aunque realicemos solamente operaciones con los registros internos ala UPC, eventualmente necesitaremos guardar la información en unalocalidad de memoria prin ci pal. Para realizar esta operación, se debeproporcionar como operando una dirección de la que se traerán oalmacenarán datos. Las formas de especificar la dirección dentro de lainstrucción pueden ser muy variadas pero contamos con tipos muyespecíficos como los que describimos a continuación.

2.5.1 Direccionamiento Implícito

Una instrucción que usa el direccionamiento implícito, utiliza elcontenido del registro contador de datos (DC) como dirección dememoria.

Esto implica un proceso de dos pasos:

· Cargar la dirección de memoria requerida en el registro DC.

· Una instrucción sin operandos se ejecuta y ésta utiliza al registroDC como un apuntador a memoria.

Otros Lenguajes y el Ensamblador

2-41

Page 52: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

2.5.2 Direccionamiento directo a memoria

Algunas instrucciones pueden especificar la dirección con la quetrabajarán directamente en su operando; a éstas se les conoce comoinstrucciones con direccionamiento directo a memoria.

Toda computadora tiene instrucciones con un rango limitado dememoria en la que pueden actuar. Si todas las instrucciones de unacomputadora están limitadas por esta restricción, a la computadora se leconoce como paginada.

Para formar la dirección fi nal a la que la UPC direccionará, se usa laparte alta del Contador de Programas (PC)y se une a la dirección depágina para formar la dirección efectiva. Este término se aplica a todadirección de memoria que se calcule de alguna forma utilizando para ellola información provista por la misma instrucción.

Los bits tomados del PC son llamados el número de página y los bitsproporcionados por la instrucción forman la dirección dentro de lapágina. Combinando ambos tenemos la dirección efectiva.

La imposición más severa impuesta por un esquema de páginas fijas esque el programa no puede referirse a otra página y los programas nopueden residir en los límites de las páginas cruzándolas, por lo que elprogramador gasta mucho tiempo calculando las páginas y localidadesde memoria para su programa.

Un método para eliminar algunas de las restricciones deldireccionamiento de páginas, consiste en proveer a la computadora deuna página base y un registro de apuntador de página que pueda seralterado por el programa a su conveniencia.

Una variación del esquema an te rior consiste en realizar saltos relativosal PC sumando un desplazamiento contenido en la instrucción, a estavariación se le llama direccionamiento relativo.

2.5.3 Direccionamiento Indirecto

Una última variación es la de usar una localidad de memoria que seráutilizada como dirección para encontrar los datos que queremos llevar orecuperar de la memoria. Este esquema es flex i ble y permite usarapuntadores para aplicar todas las técnicas de programación avanzada alas computadoras directamente (uso de apuntadores, co las, pilas, etc.).

Ensamblador

2-42

Page 53: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

2.6 Tipos de Instrucciones

A grandes rasgos las instrucciones pueden ser divididas en grupos muygenéricos, una vez más, depende del fabricante si incluye todos los tipos(o más) o un subconjunto de ellos. La aplicación fi nal del producto dictamuchas veces el tipo de instrucción necesario y el superfluo.

Aunque no exhaustiva, la siguiente clasificación puede muy bien servira nuestros propósitos:

· 1. Instrucciones que mueven datos. Incluyen instrucciones quemueven datos entre un registro y la memoria; entre dos registros einstrucciones inmediatas que cargan a los registros con un valorespecificado en el operando de la instrucción.

· 2. Instrucciones aritméticas y lógicas. Son generalmenteinstrucciones que trabajan con dos operandos y realizan sumas,restas, multiplicaciones, divisiones, Y, O así como sumas y restascon acarreos. Las banderas generalmente se afectan con elresultado.

· 3. Corrimientos. Son de tres tipos: corrimientos, corrimientosaritméticos y corrimientos lógicos. En algunos casos la palabra secorre a través de la bandera de acarreo.

· 4. Saltos y subrutinas. Incluyen saltos incondicionales, saltoscondicionales basados en las banderas, llamadas a subrutinas yregresos de subrutinas.

· 5. Incrementos y decrementos de los registros y la memoria.Usualmente incrementan en la unidad la memoria o los registrospara llevar una cuenta en lazos o para accesar a localidadescontiguas de memoria.

· 6. Comparaciones y pruebas. Comparan dos operandos ymodifican el registro de banderas de acuerdo al resultado orealizan pruebas sobre un operando.

· 7. Meter y sacar información de la pila (stack). Decrementan oincementan el registro de apuntador a la pila de acuerdo a laoperación realizada: empuja o saca.

· 8. Instrucciones con las banderas de estatus. Limpian o fijanalguna de las banderas del registro de banderas de la UPC antes derealizar alguna operación. Habilitan o deshabilitan lasinterrupciones a la UPC.

Otros Lenguajes y el Ensamblador

2-43

Page 54: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

· 9. Instrucciones especiales. Todas las que no caigan dentro de las8 anteriores como son las de entrada y salida, que algunosprefieren clasificar en un grupo extra y otras.

Puesto que las instrucciones son distintas en tre las computadoras, sediscute cada grupo en gen eral y a lo largo del libro daremos un ejemplo de microcomputadora y sus instrucciones.

Otra clasificación de las muchas existentes agrupa las instrucciones en 3 divisiones aún más genéricas:

– 1. Instrucciones de transferencia de datos que mueveninformación (direcciones, valores de operandos, instrucciones,etc.) sin cambio de una parte de la computadora a otra.

– 2. Instrucciones de procesamiento de datos que transfieren datosrealizando las operaciones necesarias requeridas.

– 3. Instrucciones de control de programa usadas para determinarel orden de ejecución de las otras instrucciones.

2.7 Lenguajes de Alto Nivel

La programación a nivel máquina es necesaria para que ésta funcione,pero un usuario común y corriente no puede invertir tanto tiempo enaprender a programar una computadora cuando su objetivo prin ci pal es la resolución de problemas.

Los lenguajes de alto nivel son la parte del sistema operativo(aplicaciones) con la que el usuario avanzado se familiarizará (se prefiere hoy en día las soluciones “enlatadas” en forma de programas deaplicación con cierta programación integrada: hojas de cálculo,procesadores de palabras, comunicaciones, autoedición, etc.). Para poder hacer que la computadora se comporte como queremos, debe haber unaforma de comunicar nuestros deseos a la máquina. La mayoría de lascomputadoras existentes tienen alguna forma de lenguaje desarrolladopara ellas. Existen tantos lenguajes como existen computadoras y cadauno de ellos llena un sitio en es pe cial aunque todos tienen en común quetratan de ser de propósito gen eral y “fáciles de usar”.

Aunque es verdad que las diferencias de cada máquina nos limitan en suforma de programarla en lenguaje ensamblador (u objeto), esto no seaplica en su gran mayoría en los llamados lenguajes de alto nivel. ¿Por

Ensamblador

2-44

Page 55: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

qué el nombre de alto nivel? Pues porque comparados con los primerosmétodos de programar una computadora son mucho más potentes yflexibles. De los lenguajes de alto nivel más conocidos y en tre los másviejos se encuentra el BA SIC. Es el lenguaje de alto nivel más usado ypop u lar en los sistemas pequeños de computadoras (computadoraspersonales) y en muchos de los sistemas grandes. Debe su popularidad ala sencillez de su sintaxis y a que es muy sencillo aprenderlo no tomandomás que unas cuantas horas para poder realizar nuestro primer programafuncional.

Esta misma sencillez del lenguaje BA SIC, es su prin ci pal desventajapues conforme las técnicas de programación han ido mejorando, senecesita cada vez de herramientas más poderosas que llenen losrequerimientos; han surgido así una serie de lenguajes que se substituyenunos a otros y cada uno clama ser la última y mejor herramienta para laprogramación:

LENGUAJE USO

FOR TRAN programación científica

CO BOL negocios

SMALLTALK objetos

C sistemas

SIMULA simulación

PASCAL enseñanza de técnicas correctas de programación

C++ interfases gráficas y ventanas, objetos

VI SUAL BA SIC interfases gráficas y ventanas, objetos

y muchísimos otros más cada uno con sus méritos, ventajas ydebilidades.

2.8 Intérpretes y Compiladores

No importando qué tan sofisticado sea el programa o el lenguaje en queesté escrito, nuevamente llegamos al punto en que la UPC debeinterpretarlo y ejecutarlo a la máxima velocidad posible. Esto implicatraducir cada una de las instrucciones del lenguaje de alto nivel oensamblador a unos y ceros que son colocados en las localidades precisasde memoria para que sean ejecutadas.

Las dos formas existentes de traducir las líneas de código de un lenguaje de alto nivel son usando programas intérpretes y programascompiladores.

Otros Lenguajes y el Ensamblador

2-45

Page 56: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

2.8.1 Intérpretes

Un programa intérprete toma el código desarrollado por el usuario yescrito en un procesador de palabras o generalmente en un procesador detexto proporcionado por el mismo intérprete y al darle la orden deejecutar un programa, tra duce una a una las instrucciones del códigofuente a lenguaje de máquina.

Esto tiene una serie de ventajas y desventajas:

Ventajas:

– Muy fácil corregir errores y desarrollar programas pues en todomomento tenemos control sobre la ejecución, podemosinterrumpir, poner puntos de espera, preguntar el contenido devariables, ejecutar el programa paso a paso, etc.

– Fácil de entender y manejar; como no permite tantas opciones, no tenemos tantos comandos que aprender para controlar el proceso.

– Los errores se corrigen rápidamente y se ve de inmediato elresultado de estas correcciones.

– Las instrucciones del programa siempre están a disposición delusuario y éste puede modificarlas a su conveniencia.

Desventajas:

– Para la distribución del programa terminado debemos incluir elintérprete y las instrucciones para usarlo además de lasinstrucciones para usar el programa.

– No da flexibilidad pues no permite unir el programa con otrosdesarrollados en otros lenguajes.

– No es portátil de un ambiente a otro pues el intérprete usualmentees distinto de máquina a máquina a menos que se apegueestrictamente a un estándard.

– El proceso de traducir las instrucciones una a una lleva tiempo ysi por cualquier causa es necesario ejecutar alguna instrucciónque ya fue traducida, es necesario volver a traducirla una y otravez.

– Se requiere de la memoria necesaria para poder ejecutar elintérprete, más la memoria necesaria para el programa.

Ensamblador

2-46

Page 57: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

– Como las instrucciones son interpretadas una a una, no es posibleoptimizar la traducción pues no tenemos el concepto deprograma completo sino de instrucción en instrucción.

– Si se quiere vender el programa final, se debe incluir cada una delas instrucciones permitiendo que el programa sea copiado y/omodificado ilegalmente las veces que se desee.

Por todas las razones expuestas, es muchas veces preferible utilizar uncompilador (ver siguiente sección) aunque algunas veces (si es posible)se prefiere desarrollar en un intérprete y entregar la versión fi nal delprograma en un compilador que aproveche las ventajas de estosprogramas.

2.8.2 Compiladores

Un programa compilador ejecutará el mismo programa que unintérprete, pero la acción se realiza de un modo distinto en cada caso. Elcompilador toma un programa fuente como una unidad y lo tra duce aprograma objeto en varios pasos dejando un programa ejecutable que yano requiere de ningún otro programa para ejecutarse a excepción delsistema operativo.

El programa que entrega el compilador puede ejecutarse directamentedesde el procesador de comandos del sistema operativo. Para que estosuceda, deben de existir varias condiciones:

– Que el programa fuente esté libre de errores de sintaxis

– Que el programa fuente no tenga errores de ejecución

– Que se le agregen al programa fuente todas aquellas rutinas quenecesita para poder realizar su trabajo.

Para que todo esto se cumpla se requiere de un trabajo adicional porparte del usuario y un esfuerzo mucho mayor que en el uso de unintérprete.

Es tal la popularidad de los sistemas de computación y de los lenguajes,que las compañías que los fabrican han invertido mucho tiempo y dineropara entregar un producto que sea rápido y evite muchas de las penuriasque se encontraban en los primeros compiladores comerciales.

El ciclo de desarrollo de un programa con un compilador consiste enescribir el programa en un procesador de texto separado del programa y

Otros Lenguajes y el Ensamblador

2-47

Page 58: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

ejecutar el compilador; si no existen errores de sintaxis se procede a ligarcon las librerías de funciones que el programa requiere du rante suejecución; se ejecuta el programa objeto, si existe algún er ror, porpequeño que este sea, se repite todo el proceso.

Como se ve en la descripción an te rior el proceso es minucioso,elaborado, complicado y tardado. Debe existir alguna ventaja en usar uncompilador para que éste exista. La prin ci pal ventaja que se obtiene es larapidez de ejecución del programa fi nal. Pero siguen existiendo ciertasventajas y desventajas con respecto a un intérprete:

Ventajas:

– Programa objeto muy rápido en su ejecución (hasta 100 vecesmás rápido que con un intérprete dependiendo de lasinstrucciones y otros factores).

– Se puede unir el programa con otros desarrollados en otroslenguajes por lo que tenemos acceso a una librería desarrolladapor otros.

– Las instrucciones son traducidas una única vez.

– No existen pedazos de código con errores potenciales pues elprograma se traduce como un todo y no instrucción a instrucción.Al traducir instrucción a instrucción puede ser que hayanpedazos del programa que nunca sean ejecutados en nuestraspruebas.

– Se puede optimizar el resultado final pues se conocen todas lasreferencias y todo lo que hace el programa en términos deinstrucciones.

– No se requiere de ningún programa auxiliar para poder ejecutar el producto terminado.

Desventajas:

– El ciclo de desarrollo es tardado: programación, compilación,ligar y ejecutar. Mientras que en el intérprete sólo es un paso:ejecutar.

Como la única desventaja aparente es la del desarrollo, loscompiladores modernos ya incluyen un ambiente in te gral en el que seescribe el programa, se compila, liga y ejecuta en un sólo paso utilizandola memoria para ello y sólo se graba el programa fi nal como un módulo

Ensamblador

2-48

Page 59: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

ejecutable cuando el ciclo de desarrollo está completo y así losolicitamos. Estos productos tratan de combinar las ventajas de unintérprete con las de un compilador y eliminar la mayoría de lasdesventajas de los intérpretes.

2.9 Sistemas Operativos Avanzados

La evolución de las computadoras sigue aún un ritmo desenfrenado.Muchas cosas sorprendentes son realizadas con las computadoras yquedan aún muchas más por realizar: Computadoras gigantescas querealizan todas las transacciones de un banco incluyendo a sus cajerosautomatizados; transacciones internacionales de computadora acomputadora, etc; computadoras para las aerolíneas que llevan los vuelos y reservaciones a nivel mundial; computadoras de tráfico aéreo quellevan el con trol vía ra dar de todos los vuelos que entran y salen de unaeropuerto y muchas aplicaciones más.

¿Puede usted imaginar la cantidad de potencia de cómputo requeridopara esto y la complejidad de un sistema operativo y los programasnecesarios para cumplir con el cometido asignado a la computadora?

Todo esto puede ser atribuido al nacimiento de grandes e increiblemente complejos sistemas operativos, todos ellos no prácticos hace apenas unos cuantos años. Hace poco tiempo el uso de más de 64K bytes de memoriaen un sistema per sonal era impensable e incosteable. Hoy son pocos lossistemas operativos que caben en esa cantidad de memoria.

La tendencia sigue siendo hacia compartir los datos por lo que términoscomo multitareas, multiusuario y multiproceso no serán del tododesconocidos en un fu turo. La necesidad de velocidad es tanta quenuevas arquitecturas surgen como alternativas al uso de un sóloprocesador cen tral: arquitectura paralela y redes neuronales son latendencia tecnológica del fu turo.

2.10 Resumen

Una de las par tes primordiales de un sistema de cómputo y sin el cual sufuncionamiento no es posible es el de la programación. Por medio de unprograma podemos guiar todas las acciones de la electrónica para poderllegar a una aplicación práctica y útil.

Otros Lenguajes y el Ensamblador

2-49

Page 60: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

El aspecto de la programación es muy extenso e incluye muchos temascomplejos. Pero su aspecto fun da men tal se de scribe brevemente en estecapítulo.

El sistema operativo (SO) forma la parte sobre la cual actuan todos losdemás programas, todo requerimiento a la computadora es encauzadopor el ca nal adecuado por medio de la parte de entrada y salida básica delSO llamada BIOS.

Todo programa para poder ser ejecutado debe residir en la memoria ydebe ser puesto de alguna forma en ella en comandos que la UPC puedaentender e interpretar para lo cual se han desarrollado toda una serie deprogramas llamados intérpretes y compiladores que se encargan de estala bor.

2.10.1 Puntos Importantes del Capítulo

· Un programa de arranque inicia el sistema de cómputo y lepermite funcionar.

· El procesador de comandos de un sistema operativo quedaresidente todo el tiempo para recibir órdenes de otros programas odel mismo usuario.

· Un programa consiste en una secuencia lógica de instrucciones yse conoce como programar a crear estas secuencias.

· El código fuente consiste en las instrucciones que el programaensamblador interpretará para crear un código objeto.

· El código objeto es el resultado de un ensamblador y consiste en el programa fuente interpretado y colocado en la memoria para suejecución.

· Toda Unidad de Procesamiento Central (UPC)consta de un juegode instrucciones definidas por el fabricante durante suconstrucción.

· Entre las formas de indicar una localidad o dirección de memoriacontamos con: direccionamiento directo, implícito o indirecto.

· Las instrucciones que permite una UPC son clasificados deacuerdo a su función y existen varias de estas clasificaciones.

· Un intérprete traduce instrucción a instrucción un programafuente mientras que un compilador lo hace todo de una vez.

Ensamblador

2-50

Page 61: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

2.11 Actividades

2.1 Investigue qué programa ensamblador viene junto con los circuitosbasados en una UPC de Motorola, tales como los Ap ple.

2.2 Encuentre el conjunto de algunas instrucciones de una UPC 68000de Motorola.

2.3 Haga un programa sencillo para multiplicar dos números de 8 bits en lenguaje ensamblador inventado por usted. Use el registro Acumulador ydos auxiliares llamados B y C. No emplee una instrucción que hagadirectamente la multiplicación.

2.12 Bibliografía

Llano Emiliano Sistemas Digitales y Arquitectura de Computadoras.Unam 1993. Capítulo 13.

Macro 86 Co lum bia Data Prod ucts, Inc. 1982.

MPC Op er a tions Guide Co lum bia Data Prod ucts, Inc. 1982.

Otros Lenguajes y el Ensamblador

2-51

Page 62: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

3. Sistemas NuméricosComo matemático, Laplace1 apreciaba enormemente el sistema

numérico dec i mal. Comprendía que cientos de años de esfuerzosmentales así como de buena suerte dieron como resultado el sistema queusamos y estaba en una posición en la que podía apreciar sus ventajas.Nuestro presente sistema numérico provee a los matemáticos modernos y científicos con grandes ventajas sobre los usados por anteriorescivilizaciones y es un fac tor importante de nuestro rápido avance.

Puesto que las manos son la herramienta más conveniente con la que lanaturaleza nos dotó, los seres humanos siempre hemos tendido a usarlaspara contar. Es entonces nat u ral y afortunado que nuestro sistema decontar se base en el número de dedos que tenemos. Sin em bargo pasóbastante tiempo an tes de poder representar estos números gráficamente.Las primeras representaciones gráficas encontradas consisten en marcasverticales y horizontales. El número 1 es un ejemplo de esto; esinteresante hacer notar que el 2 consistía de dos marcas horizontalesunidas con una línea y el 3 de tres marcas horizontales unidas (sistemaarábigo). Los números Romanos son un buen ejemplo de líneas usadascomo base para números (ver figura 3.1).

3-53

1 Pierre Simon marqués de Laplace (1749-1827). Astrónomo y matemático francés que dio basecientífica a la Hipótesis de las Nebulosas. Entre sus trabajos matemáticos más notables se destaca elperfeccionamiento de la teoría de las probabilidades.

Page 63: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Ensamblador

3-54

Figura 3.1 Comparación de algunos sistemas de números.

Page 64: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

El sistema dec i mal ha sido tan aceptado y adoptado por nuestracivilización que rara vez consideramos la posibilidad de otros sistemasen uso. De todas formas, no es razonable pensar que un sistema basado enel número de dedos que tenemos en las manos sea el más eficiente parausar en las máquinas que construimos. El hecho es que un sistema muypoco usado para otra cosa, pero muy sencillo, el sistema binario, haprobado ser el más nat u ral y eficiente para su uso en máquinascomputadoras.

3.1 El Sistema Decimal

Nuestro sistema ac tual se forma por 10 símbolos distintos: 0, 1, 2, 3, ..., 9 llamados dígitos Arábigos. Con este esquema nos veríamos forzados adetenernos en 9 o inventar otros símbolos para los demás números si nofuese porque usamos una notación de posición. Un ejemplo de esto lopodemos encontrar en los números romanos que son en esencia aditivos:III=I+I+I, XXV=X+X+V. Se requieren nuevos símbolos conforme laserie crece (X, M, C, etc.). Así, se usa V en lugar de IIIII=5 la únicaimportancia en posición en los números Romanos es si un símbolo pre -cede o an te cede a otro (VI=6, IV=4). La torpeza de este sistema resalta encuanto deseamos realizar cualquier operación con dos números, porejemplo multiplicar XII por XIV (12x14). El cálculo con númerosRomanos es tan engorroso que los primeros matemáticos se vieronforzados a usar casi exclusivamente el ábaco o tab las de contar y luegotraducir el resultado a números Romanos. Los cálculos con papel y lápizson tan increiblemente complicados en este sistema que la habilidad parahacerlo era muy apreciada en tre los antiguos Romanos.

La gran simplicidad y belleza de nuestro sistema dec i mal puedeentonces apreciarse en detalle. Sólo es necesario aprenderse 10 dígitos yel sistema de notación de posición para contar cualquier cantidad.Después de aprender de memoria 10 tab las de multiplicar y de sumar asícomo aprender unas sencillas reglas, es posible realizar cualquieroperación aritmética. Nótese la sencillez para realizar la operación 12 por 14:

14

x 12

28

14

168

Sistemas Numéricos

3-55

Page 65: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

El significado del número 168 puede notarse al decir la cantidad “cientosesenta y ocho”. Básicamente e l número consis te en(1x102)+(6x101)+(8x100). La importancia es que el valor de cada dígitoestá determinado por su posición. El 3 en 3000 vale distinto que el 3 en 30y se denota al hablar diciendo tres mil o treinta (tres decenas).

La regla gen eral para representar cualquier número en notación dec i mal es:

( . )31 10 1011

22

1 2a a a a a an nn n

- -+ + + =K K

donde n denota el número de dígitos a la izquierda del punto dec i mal.

La base del sistema es definido como la cantidad de dígitos distintosusados en cada posición en un sistema de notación. El sistema dec i maltiene base 10, esto significa que el sistema tiene 10 dígitos distintos pararepresentar cualquier cifra (0, 1, 2, 3, ..., 9). La historia registra el uso devarias bases. El sistema quinario (base 5) prevalece en tre los esquimalesy los indios de Norte América, la base doce aún se usa en relojes, pies,docenas; el de base 60 (usado por los Babilonios) en segundos y minutos.

3.2 El Sistema Binario

El matemático del siglo XVII, Leibnitz2, era un fanático del uso de labase 2 que sólo usa los símbolos 0 y 1 para representar cifras. Puedeparecer extraño que un matemático eminente use un sistema tan sencillo,pero debe recordarse que en esa época casi todos los matemáticos erantambién filósofos y religiosos. Su preferencia al sistema base dos sedebió a razones míticas, el uno representando a la deidad y el cero a lanada.

Cualesquiera fuesen las razones de Leibnitz para usar el sistema binario, en los últimos años se ha vuelto muy pop u lar. Todas las computadorasmodernas se construyen para operar usando el sistema binario o sistemascodificados en binario y todo in dica que en un fu turo cercano seguiránsiendo construidas de esta forma.

Ensamblador

3-56

2 Gottfired Wilhelm barón von Leibniz o Leibnitz (1646-1716). Filósofo y matemático alemántambién erudito en ciencia, historia y derecho. Desarrolló el cálculo infinitesimal sin conocer la obrade Newton en el mismo campo. Su filosofía se apoya fundamentalmente en la concepción de ununiverso compuesto por un número infinito de unidades de fuerza espiritual o materia a la que llamamónadas.

Page 66: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Los componentes básicos de las primeras computadoras eran losrelevadores y contactos que son binarios por naturaleza pues sólo puedenestar en dos estados posibles: cerrados (1) o abiertos (0). Los principalescomponentes de las computadoras actuales son los transistores similaresa los usados en televisores y ra dios. La necesidad de un funcionamientoconfiable llevó a los diseñadores a utilizar a los transistores en susestados de corte y saturación reduciendo así sus estados posibles a dosfácilmente identificables, conduciendo (1) o no (0). Una sim ple analogíapuede realizarse en tre estos dos estados y un foco de luz eléctrica. Encierto momento el foco está prendido (tran sis tor conduciendo) emitiendo luz o apagado (tran sis tor no conduciendo). Aunque el foco esté viejo y no produzca tanta luz, se puede decir con certeza si está prendido o apagado.Lo mismo sucede con un ra dio, si éste está viejo o con las pilas gastadas,hay que compensar subiendo el volumen pero por muy bajo que esté,siempre se puede decir si está prendido o no.

Debido al gran número de par tes que forman una computadora, esaltamente deseable utilizarlas de tal forma que los cambios en suscaracterísticas no afecten el desempeño to tal del sistema. La mejor formade lograr esto es usando los circuitos en su forma biestable (de dosestados posibles).

Sistemas Numéricos

3-57

Page 67: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

3.2.1 Contando en el Sistema Binario

El mismo tipo de notación de posición que usamos en el sistema dec i mal es el que se usa en el sistema binario. Obsérvense los primeros 16números en el sistema binario:

Tab la 3.1 Conversión de Dec i mal a Binario

Dec i mal Binario Dec i mal Binario

0 0 8 1000

1 1 9 1001

2 10 10 1010

3 11 11 1011

4 100 12 1100

5 101 13 1101

6 110 14 1110

7 111 15 1111

Debe notarse que el sistema dec i mal usa potencias de 10 mientras que elbinario potencias de 2 y en gen eral el sistema n usará potencia n. Mientras que el número 35 en dec i mal equivale a 3 x 101 + 5 x 100, el mismonúmero en binario (35) se representa como 1000112 significa 1 x 25 + 0 x24 + 0 x 23 + 0 x 22 + 1 x 21 + 1x20. Los siguientes ejemplos ilustran laconversión de una base a la otra, debe notarse que la potencia puedesubstituirse por potencia n para sistema n (por ejemplo 16 para sistemabase hex a dec i mal u ocho para sistema oc tal).

111 1 2 1 2 1 2 4 2 1 72 1 0= + + = + + =x x x

1011 1 2 0 2 1 2 1 2 6 0 2 1 93 2 1 0= + + + = + + + =x x x x

11011 1 2 1 2 0 2 1 2 1 2 2 1 01

4

1

83

3

81 0 1 2 3. = + + + + = + + + + =- - -x x x x x

Los números fraccionarios se forman al igual que en el sistema dec i mal:

Ensamblador

3-58

Page 68: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

0135 1 10 3 10 5 101 2 3. = + +- - -x x x

3.2.2 Conversión de Sistema Decimal a Binario

Existen muchos métodos de conversión en tre bases pero el primero ymás obvio es restar todas las potencias de la base al número en base 10hasta que el resultado sea cero. En base 2 restaremos la potencia mayor de 2 del número; al res tante se le aplica el mismo procedimiento hasta que elresultado sea cero. Para convertir 2510 a base 2 restaremos de 25 lapotencia mayor de 2 que no exceda a 25, en este caso 24 quedando25-16=9 del que restamos la siguiente potencia mayor (23=8) y asícontinuamos hasta que no tengamos nada que restar. El número quedacomo 24 + 23 + 20 ó 11001.

Un método más empleado para números grandes es dividir en tre la basey apuntar el residuo resultante de derecha a izquierda, volviendo a dividirel resultado en tre la base hasta que el resultado sea cero. Por ejemplo12510:

125ÿ2=62+1, 62ÿ2=31+0, 31ÿ2=15+1, 15ÿ2=7+1, 7ÿ2=3+1,

3ÿ2=1+1, 1ÿ2=0+1

tomando los residuos de derecha a izquierda: 11111012.

En el caso de fracciones se debe dividir el número en dos par tes, laentera en la que se aplica cualquiera de los métodos an tes expuestos y lafraccionaria.

La conversión de fracciones a la base de interés se logra restando de éstalas potencias negativas de la base hasta que no tengamos residuo o hastala precisión que se requiera. Este primer método es engorroso parafracciones grandes por lo que se prefiere multiplicar por la base y tomarlo que queda a la izquierda del punto para formar la fracción y lo quequeda a la derecha para volver a aplicar el procedimiento. Por ejemplo0.437510 a base 2:

2x0.4375=0.8750, 2x0.8750=1.750, 2x0.750=1.50, 2x0.50=1.0

tomando los números a la izquierda del punto dec i mal de izquierda aderecha tenemos que 0.437510=0.01112.

Sistemas Numéricos

3-59

Page 69: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

3.2.3 Suma y Resta en Sistema Binario

La suma y resta en sistema binario son mucho más sencillas de aprenderque en cualquier otro sistema pues las reglas son muy sencillas. Para lasuma tenemos que

0 + 0 = 0

0 + 1 = 1

1 + 0 = 1

1 + 1 = 0 y se lleva 1

Unos ejemplos bastan para comprender el procedimiento que es sim i laral dec i mal al que ya estamos acostumbrados:

101 1111 11.01

110 10100 101.11

1011 100011 1001.00

La resta tiene también reglas muy sencillas:

0 - 0 = 0

1 - 0 = 1

1 - 1 = 0

0 - 1 = 1 con un préstamo de 1

Y la forma de hacerla es sim i lar al sistema dec i mal:

1001 10000 110.01

-101 -11 -100.10

100 1101 1.11

3.2.4 Multiplicación y División Binaria

La tab la de multiplicar usada por el sistema binario sólo tiene cuatroreglas a diferencia de las 100 usadas para la multiplicación en sistemadec i mal:

0 x 0 = 0

1 x 0 = 0

0 x 1 = 0

1 x 1 = 1

Ensamblador

3-60

Page 70: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Sólo es necesario copiar de nuevo el fac tor si se multiplica por 1 ó ponerceros si es por 0:

1100

x1010

0000

1100

0000

1100

1111000

1100110

x1000

1100110000

Nuevamente la división es sumamente sencilla:

0ÿ1 = 0

1ÿ1 = 1

A continuación dos ejemplos de la división:

101 111.01

101 11001 100 11101.00

101 110

001 101

101 100

3.3 Representando Números en Otras Bases

Hemos dicho ya que los números en otras bases tienen tantos símboloscomo la base de que se trate, esto es, en base dos tenemos dos símbolosdistintos, en base 10, diez símbolos distintos para representar cualquiernúmero. ¿Pero qué símbolos usar para bases mayores que diez? Distintasculturas han empleado distintos símbolos para re solver este problema,pero actualmente la única base usada mayor que la dec i mal es la base 16 o hex a dec i mal.

Para representar números en base 16 usamos los nueve símbolos yaconocidos 0, 1, 2, ..., 9 y agregamos las letras para representar al 10, 11,12, 13, 14 y 15. Así, la A representa al símbolo 10, B al símbolo 11, etc.

Para convertir de base 10 a cualquier otra empleamos los mismosmétodos de la base dos, es decir dividiendo consecutivamente en tre la

Sistemas Numéricos

3-61

Page 71: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

base y anotando el residuo. Para el caso de base 16 dividiremos en tredieciséis.

Encontramos la equivalencia de un número en cualquier base conrespecto a la dec i mal usando notación de posición y multiplicando por labase elevada a la potencia de la posición menos la unidad:

F09516 = (15 x 163) + (0 x 162) + (9 x 161) + (5 x 160) = 6158910

Como la base 16 es di vis i ble en tre la base dos, el sistema hex a dec i mal es una forma conveniente de representar en notación corta al sistemabinario evitando errores (con este mismo propósito se utilizó muchotiempo la base 8). La forma de convertir de sistema hex a dec i mal a binario es sustituir cada uno de los símbolos usados en el número en hex a dec i mal por su equivalencia en binario:

F09516 = 1111 0000 1001 01012

o cualquier número en binario dividiendo el número en grupos de 4 dederecha a izquierda y sustituyendo por su símbolo equivalente en base16:

100010101102= 0100 0101 01102 = 45616

Para estas conversiones es conveniente tener una tab la a la mano:

Tab la 3.2 Distintas Representaciones de los Enteros del 0 al 15.

Dec i mal Binario Hex a dec i mal BCD

00 0000 0 0000 0000

01 0001 1 0000 0001

02 0010 2 0000 0010

03 0011 3 0000 0011

04 0100 4 0000 0100

05 0101 5 0000 0101

06 0110 6 0000 0110

07 0111 7 0000 0111

08 1000 8 0000 1000

09 1001 9 0000 1001

10 1010 A 0001 0000

11 1011 B 0001 0001

12 1100 C 0001 0010

13 1101 D 0001 0011

14 1110 E 0001 0100

15 1111 F 0001 0101

Ensamblador

3-62

Page 72: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

3.4 Decimal Codificado en Binario (BCD)

Puesto que las computadoras construidas usando el sistema binariorequieren de una menor cantidad de circuitos electrónicos y por lo tantoson más eficientes que las máquinas que operan con otros sistemasnuméricos, el sistema binario es el sistema más nat u ral para unacomputadora y el de mayor uso actualmente. Por otro lado, el sistemadec i mal es el más nat u ral para nosotros. Todos los cálculos querealizamos usualmente se realizan en el sistema dec i mal, pero deben serconvertidos por las computadoras de dec i mal a binario an tes de realizarcualquier operación. Debido a esto, muchas de las primerascomputadoras usaban un sistema de codificación dec i mal a binaria. Ental sistema, se usan grupos de dígitos binarios para representar cada unode los 10 símbolos usados en el sistema dec i mal. Por ejemplo, uno de loscódigos más obvios y naturales es usar un “código binario de pe sos”donde cada posición representa un “peso” tal y como se muestra en la tab -la 3.3

Tab la 3.3 Código binario de pe sos.

Código Binario Dígito Dec i mal

Peso

8 4 2 1

0 0 0 0 0

0 0 0 1 1

0 0 1 0 2

0 0 1 1 3

0 1 0 0 4

0 1 0 1 5

0 1 1 0 6

0 1 1 1 7

1 0 0 0 8

1 0 0 1 9

Nótese que son necesarios 4 dígitos binarios para cada símbolo dec i mal. Esto es ineficiente pues las combinaciones de 4 dígitos binarios son 24 =16 de los que sólo usamos 10 pero si usamos 3 dígitos 23 = 8 soninsuficientes.

Para simplificar la conversión de dec i mal a binario, es más prácticocodificar un número dec i mal d d d dn n- -1 2 1 0K donde { }d i ® 0 1 9, , ...,de la siguiente forma: Reemplace cada dígito dec i mal con su equivalentede 4 símbolos binarios tal como están definidos en la tab la 2 an te rior. Elnúmero resultante es llamado código binario dec i mal, código 8, 4, 2, 1 o

Sistemas Numéricos

3-63

Page 73: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

simplemente BCD (Bi nary-coded dec i mal), y lo indicaremos con elsufijo BCD. Así, tenemos que:

10001010101BCD = 45510

Hay que resaltar que el número resultante BCD y el binario son muydistintos. A cada uno de los dígitos binarios le llamamos bit (de bi narydigit). En la representación BCD, cada segmento de 4 bits representa unsólo dígito dec i mal cuyo peso es una potencia de 10. Unicamente 10 delos 16 posibles patrones de grupos de 4 bits son necesarios para larepresentación BCD. Aunque el formato BCD claramente simplifica laconversión dec i mal, tiene la desventaja de requerir más bits por cadanúmero a representar. Usando 8 bits, el mayor número rep re sent able es

10011001BCD = 9910

mientras que en binario con el mismo número de bits tenemos:

111111112 = 25510

Otras de las desventajas es en las operaciones matemáticas como la resta que normalmente se realizan usando el complemento del número (versiguiente sección). Para re solver estas desventajas se diseñaron otro tipos de códigos. Uno de los primeros es el llamado de exceso 3 (ex cess 3) en el que para formar la equivalencia, primero se suma 3 al número dec i mal.Por ejemplo para representar al 4, primero sumamos 3, resultando 7 yluego usamos el BCD “nor mal”, que es 0111. El 0111 es el código exceso3 para el 4.

Cambiando cada 0 por 1 y cada 1 por 0 formamos lo que se llama elcomplemento del número binario. Este procedimiento es usado paraformar el complemento a 9 de un número dec i mal. Por ejemplo elcomplemento de 0100 (1 dec i mal en código exceso 3) es 1011 u ochodec i mal.

El código exceso 3 no es un código de peso (de notación), esto es, cada 1no representa una potencia de 2 que podamos sumar para formar elnúmero dec i mal. Un código de peso en el que el complemento a 9 puedaser formado complementando cada bit, es el código 2, 4, 2, 1representado en la tab la 4. Este código se usa extensivamente eninstrumentos y calculadoras electrónicas.

Ensamblador

3-64

Page 74: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Tab la 4. Representaciones Alternas.

Dec i mal Exceso 3 Complemento Código

a nueve 2, 4, 2, 1

Peso

2 4 2 1

00 0011 1100 0 0 0 0

01 0100 1011 0 0 0 1

02 0101 1010 0 0 1 0

03 0110 1001 0 0 1 1

04 0111 1000 0 1 0 0

05 1000 0111 1 0 1 1

06 1001 0110 1 1 0 0

07 1010 0101 1 1 0 1

08 1011 0100 1 1 1 0

09 1100 0011 1 1 1 1

3.5 Números Negativos

Hasta el momento sólo hemos trabajado con números positivos (sinsigno) pero el signo positivo o negativo es necesario para distinguir a lospositivos de los negativos. Los números sin signo se consideran comopositivos y el signo de + es omitido. En una computadora los números sealmacenan en una memoria que tiene un número fini to y fijo deposiciones. Cada posición puede tomar un valor de 0 ó 1 y es costumbrerepresentar a los números negativos reservando la última posición de laizquierda para el signo. De esta forma, en una computadora que tengalon gi tudes de registro, llamadas palabras de 8 bits (8 bits equivalengeneralmente a 1 byte) sólo podran usarse 7 posiciones (128 númerosdistintos ó 2n-1) y la última para el signo.

Por convención se ha escogido utilizar un 1 para números negativos y 0para los positivos. De tal forma, -104 se representa por 11101000 y 104como 01101000. A esta notación se le llama notación con signo. Lasoperaciones matemáticas pueden realizarse en la misma forma que lasoperaciones manuales con números decimales.

El resultado de una operación matemática en una palabra de n bitsrequiere, típicamente, que el resultado sea una palabra de n bits. Si elresultado completo es una palabra de n+1 bits, como en el caso de unasuma, se dice que ha ocurrido un desbordamiento o saturación (over -flow). Un desborde se in dica con una generación ex tra de una señal quemodifica una memoria de un bit cambiándola de 0 a 1. En algunos casosla saturación puede ser ignorada y considerar como resultado adecuado a

Sistemas Numéricos

3-65

Page 75: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

los n bits de la palabra y en otros será necesario tomar alguna accióncorrectiva.

3.5.1 Complementos

Aunque el código de notación con signo es la contraparte directa delcódigo dec i mal usado por los seres humanos, otra representación binariallamada de complementos es usada con frecuencia en computadorasdigitales, principalmente porque simplifica la construcción de ciertasoperaciones aritméticas.

Existen dos tipos de complementos usados:

· 1. Complemento a la base. Se forma restando cada dígito de lacantidad al número de la base menos uno y luego agregando 1 alresultado así obtenido. Para el sistema decimal llamamos a estaforma complemento a diez, para el binario, complemento a dos.

· 2. Complemento a la base menos 1. Se forma restando a cadadígito de la cantidad al número de la base menos uno. Para elsistema decimal llamamos a esta forma complemento a nueve,para el binario, complemento a uno.

Por ejemplo el complemento a diez de 8710 es 1310 (1210+110) y el de2310 es 7710 (7610+110) mientras que el complemento a nueve de 8710 es1210 y el de 7710 es 2210. En el sistema binario el complemento a dos de101102 es 010102 y el de 110102 es 001102.

El método para encontrar el complemento en la base dos de cualquiercantidad consiste en sustituir todo 0 por 1 y todo 1 por 0, dependiendo deltipo de complemento se sumará 1 o no.

La ventaja prin ci pal de usar complementos en sistemas digitales du -rante la suma o resta, es que todos los bits del número son tratados deforma uniforme y que la resta y suma son realizadas por el mismo circuito que sólo suma y es mucho más sencillo.

Al usar la representación por complementos la resta queda simplificadarealizándose con sumas:

Ensamblador

3-66

Page 76: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Complemento a la base

89 89

-23 +77

66 66 (el último acarreo se descarta)

11011 11011

-10100 +01100

00011 100111 (el último acarreo se descarta)

Complemento a la base menos uno

89 89

-23 +76

66 1 65

+1 (el último acarreo se suma)

66

11001 11001

-10100 +01001

00011 1 00010

+1 (el último acarreo se suma)

00011

3.6 Código Grey y ASCII

Las secuencias de los números binarios son “naturales” y generalmentese comprenden con facilidad pues siguen un patrón posicional tal como el sistema dec i mal. Podemos, sin em bargo, representar a un número por una secuencia arbitraria de 1 y 0. Para evitar ambiguedad debemos sin em -bargo asignar a cada valor numérico una secuencia distintiva e in di vid -ual.

Los números representados en otros sistemas que los naturales, sonllamados códigos puesto que se les debe asignar un código (regla deasignación) para determinar el valor numérico representado por lasecuencia. Ya hemos analizado algunos códigos utilizados encomputación e introducimos dos más: el Grey reflejado y el ASCII.

El código ASCII (Amer i can Stan dard Code for In for ma tion In ter -change, Código Americano Estandard para el Intercambio deInformación) es un esfuerzo de los diseñadores para tener compatibilidad en tre las distintas máquinas y aplicaciones. El código se forma de 7 bits y

Sistemas Numéricos

3-67

Page 77: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

el oc tavo se deja disponible para que el diseñador juege con el, ya seapara comprobar por medio de paridad (explicada en los siguientescapítulos) si no hay er ror de transmisión o manipulación de datos o paraexpandir el juego de caracteres disponibles elevándolo de 27 (128) a 28

(256) (esto último es lo que se realiza en las computadoras modernas).Las primeras 32 posiciones están reservadas para carácteres de con trol yusualmente no se pueden desplegar o imprimir (hay formas de dar lavuelta a esto). Los demás se usan para las letras, los números y toda unaserie de símbolos utilizados. En Japón y otros países donde se usa otrotipo de letras que no son las romanas, se utilizan hasta 2 bytes (16 bits oposiciones de unos y ceros) para que el código pueda representar todassus palabras. El usar este código garantiza, en muchos casos,compatibilidad en tre datos de distintas aplicaciones de forma que elresultado de un programa pueda ser leído por otro con poco esfuerzo denuestra parte.

Ensamblador

3-68

Page 78: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

En el código Grey, los dos primeros números son representados enforma nat u ral, la siguiente serie de números son encontrados de la formaespecificada en la figura 3.2. Una imagen espejo se representa por la línea de guiones en tre los primeros dos números (en la tab la de la izquierda) yque da lugar al punto de la reflexión. De ahí en adelante un cero esañadido a la primera serie de números y un 1 a la segunda. Repeticionessucesivas del proceso de reflexión nos permiten hacer cualquier serie denúmeros.

La característica más importante del código Grey es que los númeroscambian de uno a otro sólo en un dígito. Por ejemplo notemos que delnúmero 7 (0100) al 8 (1100) sólo cambia el dígito en la posición cuartamientras que en la representación binaria (7=0111, 8=1000) cambian 4

Sistemas Numéricos

3-69

Figura 3.2 Código ASCII de 8 Bits.

Page 79: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

dígitos. Encuentra aplicación en un sin número de situaciones de la quedaremos un breve ejemplo.

Supongamos que tenemos una ve leta que nos dará la dirección delviento en cualquier momento. Un circuito recibe la señal y la interpretamandando el resultado a un computador que analizará los datos junto conmuchos más para dar un pronóstico de tiempo. Si el circuito detecta quemás de un dígito cambia a la vez, podemos estar seguros de que hay un er -ror en la transmisión o en el sen sor y podemos descartar la lectura yesperar a la siguiente o dar la alarma para que la situación se corriga.

3.7 Resumen

Los números son la base de todas las representaciones formales querealizamos. Las bases distintas a la de diez han estado en uso du rantemucho tiempo pero es la base 2 la única distinta de 10 que actualmenteusamos. Dada su sencillez, la base 2 se utiliza en las computadorasdigitales actuales. Es importante entenderla y ser capaz de realizaroperaciones sencillas fácilmente.

Ensamblador

3-70

Figura 3.3 Desarrollo del código Grey.

Page 80: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

3.7.1 Puntos Importantes del Capítulo

· El sistema decimal es un sistema de posiciones en la que a cadasitio se le da un peso que equivale a potencias de 10.

· El sistema binario se usa extensivamente en computación.

· Existen otras representaciones de números usando unos y cerosque hacen más fácil el tratamiento de números dentro de lacomputadora como son el BCD, exceso tres, 2421 ycomplementación.

· Los números negativos se representan reservando un bit para elsigno.

· El código Grey y el ASCII son usados extensivamente encomputación.

3.8 Ejercicios

3.1 Convierta los siguientes números a su equivalente binario:

a) 3910, b) 1210, c) 12310

3.2 De los números binarios obtenidos en el problema 3.1 encuentre suequivalente hex a dec i mal.

3.3 Convierta los números del problema 3.1 a base 8 y base 4 (recuerdeque la base 8 sólo consta de 8 símbolos distintos 0 a 7, y la base 4 del 0 al3).

3.4 Encuentre la equivalencia binaria de los siguientes números:

a) 3.12310, b) 0.437510, c) 1.110

3.5 Sume y luego reste en forma binaria 1210 + 1010.

3.6 Divida y multiplique en forma binaria 310ÿ1510.

3.7 Convierta los siguientes números binarios a su complemento de 1 yde 2:

a) 101112, b) 10012, c) 11112

3.8 Haga la siguiente resta usando complementos a 1 y a 2:111012-110112

Sistemas Numéricos

3-71

Page 81: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

3.9 Convierta los siguientes números hexadecimales a binario:

a) BCD16, b) 63516, c) FFF16

3.10 Una regla sencilla para multiplicar dos números en cualquier basees multiplicar los dos números en forma dec i mal. Si el producto es menosque la base, se toma tal cual; si es mayor que la base, divida en dec i malen tre la base y tome el residuo como el dígito menos significativo y elcociente como el más significativo. Por ejemplo 26 x 26 = 46, 38 x 28 = 68;

pero 26 x 46 = 86 y 6ÿ8 = 1 y sobran 2 por lo que 26 x 46 = 126. Usandoesta regla, multiplique:

a) 27 x 47, b) 27 x 37, c) 54 x 44

3.8 Bibliografía

Llano Emiliano Sistemas Digitales y Arquitectura de Computadoras.Unam 1993. Capítulo 3.

Ensamblador

3-72

Page 82: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Capítulo 44.1 Las herramientas

Existen una multitud de métodos para codificar un programa enensamblador. El primero y más primitivo consiste en codificardirectamente el programa por medio de una herramienta como DE BUG;veremos como esto es posible y por qué es un método utilizado solamente para programas pequeños.

El segundo método consiste en utilizar un código fuente en unprocesador de palabras o cualquier otro ed i tor que nos entregue comoresultado código ASCII y a continuación ensamblar este código paraproducir un código ejecutable.

Este método es el más corriente y conveniente, para llevarlo a cabo esnecesario seguir los siguientes pasos:

· 1. Preparar el programa, su estructura, sus datos, métodos decálculo, etc. Este paso previo se realiza generalmente en papel oen la multitud de programas disponibles para tal fin, como sonProcesadores de Palabra, programas de Diagramas de Flujo, etc.

· 2. Codificar el programa en un editor o Procesador de Palabra queentregue código ASCII como salida. Se puede utilizar desde elprimitivo EDLIN, el editor de programas de PASCAL o C, hastaun sofisticado procesador de palabras basado en Windows.

· 3. Transformar el código fuente en lenguaje de máquina pormedio de un ensamblador (por ejemplo MASM). En está fase secorrigen los posibles errores de estructura y sintaxis del programafuente.

4-73

Page 83: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

· 4. Ligar el programa si el ensamblador no lo hace por nosotros,esto es, agregar todas las rutinas externas a nuestro programa yque se requieran para su funcionamiento.

· 5. Verificar el funcionamiento del programa ejecutable entregadoen el paso anterior. Aquí será necesario corregir los errores delógica y funcionamiento del programa ejecutable. Se puedeutilizar el programa DEBUG o cualquier otro comercial paraejecutar el código paso a paso, revisar los registros, etc.

· 6. Repetir la secuencia anterior a partir del paso 2 tantas vecescomo sea necesaria hasta obtener un código limpio que ejecutesegún las especificaciones originales.

Como se ve de los pasos anteriores esto lleva mucho tiempo y con sumemuchos recursos de dinero y esfuerzo, por lo que el paso 1 es el másimportante y en el que debemos tardarnos más para evitar tardarnos en los demás.

4.2 La Sintaxis

Como en todo lenguaje de programación, hace falta respetar ciertasreglas. En esta sección detallamos algunas de las reglas del ensamblador.

4.2.1 Las Reglas del Juego

El lenguaje ensamblador, como todos los demás, se forma de un juegode instrucciones separadas en líneas conteniendo cada una de ellas (como ya se vio en capítulos precedentes) las siguientes par tes:

· Un identificador opcional.

· Un mnemónico válido que forme parte del juego de instruccionesdel procesador.

· Un operando o varios, separados por comas si el mnemónico así lo requiere.

· Un comentario en relación a la instrucción.

Dentro del archivo fuente no se requiere de ninguna organización en es -pe cial pero se recomienda utilizar cuatro columnas para mantener laclaridad del programa y hacernos la vida más fácil.

Ensamblador

4-74

Page 84: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

4.2.2 Los Caracteres

El ensamblador reconoce un subconjunto de la secuencia de caracteresASCII disponibles. Los caracteres válidos son:

· Los caracteres del alfabeto a excepción de los caracteresacentuados (se pueden usar en el campo de los comentarios).

· Los caracteres numéricos.

· Los siguientes símbolos:

· + - * / = ( ) [ ] ; ‘ . ! , _ : @ $ espacio tabulador CR (retorno) LF(alimentación de línea)

Los caracteres alfabéticos mayúsculas son tratados exactamente comolos minúsculos:

MOV AX,0 = MoV Ax,0

INC BX = inc bx

pero

‘ABC’ no es igual a ‘abc’

Aún así, se recomienda seguir algún tipo de convención propia yrespetarla siempre. A partir de este momento en el libro se sigue lasiguiente convención:

· Los comentarios en español tratando de no emplear anglicismosni modismos donde sea posible, siempre en minúsculas yutilizando acentos y marcas diacríticas que hagan más fácil sucomprensión.

· Las etiquetas en español y siempre en minúsculas.

· Las instrucciones y su operandos en mayúsculas siempre.

VRAI EQU 1 ;Colocar flag en 1

TRUE EQU 1 ;set flag en uno

Aunque el segmento an te rior puede ser muy claro para algunos,preferimos:

marca EQU 1 ;Colocar bandera o indicador comoverdadero (1)

Las Herramientas

4-75

Page 85: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Que creemos, es mucho más claro para todo mundo a excepción dealgunos cuantos privilegiados que preferimos discriminar a lo largo dellibro.

4.2.3 Los Separadores

Los diferentes elementos de un programa (instrucciones,identificadores, etc.) deben ser separados por lo menos con un espacio.Los operandos de una instrucción se separan en tre ellos por medio de unacoma y, en este caso, el agregar uno o más espacios es opcional y se hacemuchas veces sólo por claridad:

MOV AX,0

MOV Ax, 0

MOV AX, 0

MOV AX, 0

Son correctos pero

MOVAX, 0

es incorrecto pues no hay un espacio separador en tre el mnemónico y eloperador.

4.2.4 Los Identificadores

Los identificadores son los nombres definidos por el usuario parapropósitos diversos. Representan una vari able o una etiqueta o marca a laque probablemente, pero no necesariamente, hará referencia el programamás adelante. Los identificadores están formados por una serie decaracteres el primero de los cuales debe de ser alfabético, no puedecontener espacios y no debe de exceder de 80 caracteres en to tal.

4.2.5 Palabras Reservadas

El ensamblador reconoce en tre cuatro categorías de palabrasreservadas:

· Los mnemónicos del juego de instrucciones del procesador encuestión.

· Las directivas del ensamblador en caso de que se use.

· El nombre de los registros del procesador en cuestión.

Ensamblador

4-76

Page 86: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

· En caso de usar ensamblador, las palabras BYTE, WORD yDWORD.

En ninguno de los casos pueden aparecer estas palabras comoidentificadores en un programa.

4.3 Editores

Podemos escribir y discutir largo y tendido sobre las ‘grandes’ ventajasde un ed i tor o procesador marca X sobre el marca Y, pero no tiene sentidola discusión cuando para lograr un programa fuente sólo requerimos lomínimo in dis pens able de un procesador:

· Que sea lo más rápido posible de ejecutar. De ser posible quequede residente en memoria y aún más sin estorbar o robarmemoria principal a la hora de ejecutar nuestro lenguaje demáquina.

· Que entrege como salida un archivo de código ASCII sincaracteres extraños ni de control que el ensamblador no puedeusar.

En suma, se puede utilizar cualquier ed i tor o procesador por sencillo ocomplicado que sea. Lo importante a resaltar aquí es que nos sintamos agusto con él y que nos provea de herramientas que faciliten y nodificulten nuestro trabajo, ya de por si difícil.

Habrá gente que en este renglón se sienta en casa utilizando un ed i torprimitivo como EDLIN o WORDSTART y gente que no pueda trabajarcon algo menos que VENTURA. La elección depende de gustos ynecesidades. Para nuestro gusto, un ed i tor intermedio como EDIT de lasversiones nuevas del sistema operativo MS-DOS (6.2 en adelante) que seincluye como parte de sus utilerías, es suficiente para la mayoría de loscasos.

Si se cuenta con algún ed i tor residente en memoria como SIDE KICKcontamos con algunas ventajas adicionales como son el tener siempredisponible el ed i tor desde cualquier punto ya sea dentro de DE BUG,ejecutando el programa u otros.

Seguramente con el nuevo advenimiento de sistemas operativos máspoderosos basados en ventanas e iconos, el pan orama se modificará pero

Las Herramientas

4-77

Page 87: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

se debe recordar que más nuevo y complicado no necesariamente quieredecir mejor.

4.4 Debug

En los siguientes capítulos utilizaremos el programa DE BUG debido aque es un programa más sencillo de usar en principio que MASM y nospone en contacto íntimo con la máquina. Para teclear, probar y corregirun código sólo necesitamos ejecutar DE BUG mientras que para usarMASM se requiere de hasta 4 programas (ed i tor, MASM, LINK yEXE2BIN).

Al usar un programa como DE BUG nos ahorramos, por el momento,toda una serie de directivas del ensamblador que causan que el programaejecutable crezca.

Por último, al usar DE BUG nos ponemos en contacto íntimo con lamáquina. Tarde o temprano si se con tinua programando en ensambladorse requiere aprender a usar el DE BUG.

Tab la 4.1 DE BUG con tra Ensamblador

DE BUG Ensamblador

Fáci l deejecutar

Difícil de ejecutar

No sea g r e g anada alp rog ramaejecutable

Se agregan muchas líneas de código alprograma ejecutable

M u ycercano a la máquina

Nos aleja del funcionamiento in te rior de la máquina

No es tanversátil

Muy versátil

Bueno paraprogramaspequeños

Bueno para programas grandes

De bug es práctico para modificar registros de la UPC, localidades dememoria, cargar, crear e iniciar programas.

Para ejecutar DE BUG basta tenerlo en la memoria secundaria presentee invocarlo con la instrucción:

C>DE BUG

Ensamblador

4-78

Page 88: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

-

El guión que aparece a continuación es el indicador de que DE BUG seencuentra en memoria activo y listo a recibir nuestros comandos.

4.4.1 Comandos

El DE BUG acepta toda una serie de comandos sencillos de una letra que describimos brevemente a continuación:

(Los argumentos en tre paréntesis cuadrados indican parámetrosopcionales)

?. Despliega ayuda (en versiones nuevas de DE BUG).

D[dirección]. Despliega, despliega la información de cierta área dememoria en la pantalla (en hex a dec i mal).

F[dirección inicial] [dirección fi nal] [constante]

E[dirección]. In tro duce un programa usando códigos hexadecimales omodifica una dirección colocando los nuevos códigos hexadecimales.

A[dirección]. In tro duce un programa usando mnemotécnicos válidosdel juegos de instrucciones.

G[dirección]. Ejecuta un programa en memoria.

U[dirección inicial][,dirección fi nal]. Desensambla un programa enmemoria, esto es, convierte sus códigos hex a dec i mal a mnemotécnicos.

R[registro],. Visualiza o modifica registros de la UPC.

Nnombre.extensión. Informa a De bug el nombre del programa quequeremos recuperar o guardar.

W. Escribe programa en memoria a disco, para esto es necesario haberlepuesto nombre con el comando N e indicar su longitud (registro BX+CX) con el comando R

Q. Salir del programa DE BUG.

L. Carga un programa en memoria. Es preciso primero indicar quéprograma queremos con el comando N. Otra alternativa es invocando elprograma DE BUG [nombre programa con extensión].

Las Herramientas

4-79

Page 89: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Ejercicio 4.1 Introduciremos un pequeño programa utilizando DE BUGy lo ejecutaremos:

C>DE BUG

-E100

Introduzcamos esta serie de números seguidos cada uno de la barraespaciadora: B2 1 B4 2 CD 21 CD 20. Al introducir el último númerohex a dec i mal presionemos la tecla de re torno en lugar de barraespaciadora.

Verifiquemos: -D100 y ejecutemos: -G

Ejercicio 4.2 Volvamos a introducir nuestro programa utilizando ahoralos mnemotécnicos correspondientes. Por el momento no nos importaque significan. Termine cada línea con Re torno.

-A100

MOV DL,1

MOV AH,2

INT 21

INT 20

El la última línea presionamos Re torno para terminar con el programa ylo ejecutamos: -G

Problema 4.1 Usando el man ual de DE BUG averigüe cómo guardar suprograma utilizando los comandos R, N, W. Ejecute ahora el programadesde el Sistema Operativo. Escoja un nombre que termine con laextensión .COM.

Ensamblador

4-80

Page 90: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

4.5 MASM

Para el uso de un ensamblador el primer paso consiste, como ya semencionó, en diseñar el programa en papel, a continuación en pasarlo aun ed i tor que entrega ASCII. Como ejemplo introduzcamos nuestroprograma de la sección an te rior, para lo cual se requieren agregar otroscomandos propios del ensamblador:

cara SEG MENT

AS SUME CS:cara

MOV DL,1

MOV AH,2

INT 21h

INT 20h

cara ENDS

END

Se guarda el programa con cualquier nombre seguido de una extensión.ASM, por ejemplo PRUEBA.ASM. Más adelante explicaremos laslíneas adicionales. Lo siguiente es ensamblar el programa:

C>MASM prueba

El ensamblador pregunta por el nombre de tres archivos que por elmomento ignoramos, menos el segundo (LST, listado) que dirigimos a laimpresora con LPT1:. El siguiente paso es ligar el programa con lasrutinas externas al programa o con otros programas pues el ensambladorsólo nos entrega un archivo con extensión OBJ de objeto, código que aúnno es ejecutable.

C>LINK prueba

Al fi nal contaremos con un archivo llamado PRUEBA.EXE el ligadornos entrega un er ror que por el momento ignoramos pues no se especificóel inicio de la pila en el programa. Finalmente convertimos el programaEXE a uno de tipo COM que explicaremos en la siguiente sección:

C>EXE2BIN prueba prueba.com

4.5.1 Las Instrucciones del Ensamblador

El ensamblador cuenta con una serie de instrucciones para hacer másfácil la tarea del programador. Estas instrucciones, conocidas como

Las Herramientas

4-81

Page 91: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

pseudo - instrucciones, no son parte del juego de instrucciones de ningúnprocesador en es pe cial sino que sirven para indicar ciertas acciones alensamblador.

Analizaremos a continuación algunas de las más importantes.

4.5.1.1 Segmentos

La instrucción SEG MENT y ENDS informan al ensamblador en quésegmento se localiza el programa y deben contar con una etiqueta quedefina el nombre.

La pseudo instrucción AS SUME CS:nombre de fine el segmento dondese localiza el programa (definido con el registro CS, segmento de código) ¿Por qué el ensamblador no lo puede definir por sí mismo? La razón no esclara pero es necesario incluir la pseudo instrucción.

4.5.1.2 END

In dica el fin del archivo de programa

4.5.1.3 Definiciones

Es necesario muchas veces definir vari ables, palabras, bytes, etc. paraaclarar el significado de ciertas par tes del código. En tre las instruccionespara realizar esto tenemos EQU que asigna valores a etiquetas:

si EQU 1 ;identificador si=1

es cape EQU 27 ;identificador es cape=27

El valor especificado puede ser también una asignación completaevaluada al momento de ensamblar:

cinco EQU 2*2+1 ;asigna el valor a cinco de 5

seis EQU cinco+1 ;asigna el valor de seis (cinco yadefinido)

Los números pueden estar en binario (1011b), en hex a dec i mal (0AF2h)o en dec i mal (123 ó 123d) sólo es necesario colocar el identificadorrespectivo en cada número. En el caso de dec i mal no es necesario y en elcaso hex a dec i mal, si comienza por letra, es necesario colocar un 0 paraevitar que el ensamblador se confunda con una etiqueta.

Ensamblador

4-82

Page 92: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Para la definición de vari ables se utilizan las directivas DD, DB y DW.El comando DB de fine bytes que pueden tener un valor cualquiera en tre 0 y 255 dec i mal:

estado DB 0 ;de fine estado inicial

xyz DB 1,2,3 ;de fine una zona de tres elementostipo Byte

no_se DB ? ;un valor no definido aún

tab la DB 5 DUP(?) ;tab la de 5 elementos no definidosaún

tabla1 DB 5 DUP(1,2,3,4,5) ;Tab la de 25 elementos inicializados a1,2,etc.

tabla2 DB 10 DUP(0,1) ;Tab la de 20 elementos inicializados a0,1,0,1,etc.

La pseudo - instrucción DUP es opcional en operadores como DB, DWo DD y su propósito es hacer duplicado de sus argumentos. El númeroque pre cede a la instrucción in dica cuántas veces se quiere hacer elduplicado.

La directiva DW, de la misma forma que DB, de fine vari ables pero eneste caso de 16 bits (una palabra o Word en inglés). El mismo caso sucedepara DD que de fine palabras dobles o 32 bits.

Estas directivas pueden también servir para cadenas de caracteres:

mensaje DB ‘Bienvenido a Ensamblador$’

salta DB ‘Salta la línea’,13,10,’$’

alarma DB 07,’Mensaje con sonido’,’$’

Note que al fi nal se agrega el signo de $ que in dica el fin del mensaje ysólo es necesario si se intenta desplegar la cadena en la pantalla.

4.6 Diferencia entre COM y EXE

Tanto los archivos tipo COM como EXE pueden ser cargados en lamemoria prin ci pal y ejecutados ¿Entonces por qué preferir uno sobreotro y cuáles son sus diferencias?

Un archivo tipo COM es la forma más fácil de guardar un programaejecutable. Consiste únicamente de una serie de números en binario queconforman el programa. No existe ninguna otra información además delprograma por lo que ocupa el menor espacio posible en memoriasecundaria. Los archivos tipo EXE contienen un encabezado quecontiene información variada requerida para funcionar, lo que hace que

Las Herramientas

4-83

Page 93: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

el programa sea un poco más grande. Si el programa objeto es de 100bytes, el archivo COM será de 100 bytes, mientras que el EXE tiene unalongitud mínima de 640 bytes, aun cuando el programa se forme de 1 sólo byte.

Puesto que son más pequeños y compactos, los programas COM sonejecutados más rápido. Un programa del tipo COM puede utilizar unainstrucción del tipo INT 20 para terminar su ejecución, mientras que losEXE requieren de una instrucción tipo RET.

Por otro lado existen desventajas en usar archivos tipo COM:

· No pueden ocupar más de 64K bytes de memoria (la longitud deun segmento) lo que puede ser desventaja para un programa muygrande.

· No pueden ser ligados con otros archivos restando flexibilidad allenguaje. El propósito del programa LINK es el de unir variosprogramas en uno sólo ejecutable lo que acarrea toda una serie deventajas en sistemas grandes.

· No pueden usar con facilidad distintos segmentos de memoria,mientras que en los tipo EXE esto se realiza sumamente fácil.

· Se requiere de un paso extra, si usamos ensamblador, paraconvertir del tipo EXE a COM al tener que usar EXE2BIN.

Considerando todo esto es preferible comenzar con archivos tipo COMy luego evolucionar a los del tipo EXE.

4.7 Otros

Existen en el mercado otras herramientas profesionales para laprogramación en ensamblador. Incluimos tres herramientas de lacategoría Share ware en un disco de 3 1/2" que pueden sernos de utilidad,en es pe cial cuando no contamos con ninguna otra para practicar.

Recuerde que si el programa resulta útil es muy conveniente registrarsecon el autor. Recibe uno el derecho le gal a usarlo, actualizaciones,manuales, etc.

Vale la pena mencionar el programa Lan guage Win dow (Share ware)que coloca una tab la del juego de instrucciones 80286 en la memoria ypuede ser activado en cualquier momento.

Ensamblador

4-84

Page 94: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

4.8 Esqueleto de Programa en Ensamblador

Presentamos el esqueleto que sugerimos sea usado para ensamblarprogramas.

;nombre del programa

;con descripción

;y vari ables utilizadas

;autor, fecha, versión

;——————————————————-

;definiciones con la instrucción EQU

;——————————————————-

pila SEG MENT STACK ;de fine la pila

DB 20 DUP(‘pila’) ;con la palabra ‘pila’

pila ENDS

;——————————————————-

datos SEG MENT ;de fine segmento de datos

;datos aquí con DB (datos DB‘hola$’)

datos ENDS

;——————————————————-

prognom SEG MENT ;de fine segmento de código

;——————————————————-

prin ci pal PROC FAR ;parte prin ci pal del programa

AS SUME CS:prognom, DS:datos

comienzo: ;aquí programa prin ci pal

;prepara pila para el regreso

PUSH DS ;salva el viejo segmento de datos

SUB AX,AX ;coloca cero en AX

PUSH AX ;y guárdalo

;prepara DS con segmento ac tual

MOV AX,datos ;dirección del segmento de datos

MOV DS,AX ;y guarda en registro DS

;La parte prin ci pal programa va aquí

RET ;regresa al S.O.

prin ci pal ENDP

;——————————————————-

subr1 PROC NEAR ;de fine una subrutina

;Aquí va la subrutina

subr1 ENDP

;——————————————————-

prognom ENDS ;fin del segmento de código

;——————————————————-

END comienzo ;fin del ensamble

Las Herramientas

4-85

Page 95: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Se debe hacer notar aquí la incialización del segmento de pila en cuyamemoria reservada se coloca la palabra “pila” muchas veces, de estaforma es muy claro donde comienza la pila para propósitos de espulgar elprograma y nos damos inmediatamente cuenta del contenido modificadode la pila.

4.9 Resumen

Se in tro duce y comentan sobre las principales herramientas paraensamblar un programa: DE BUG y MASM. Estos programas sonsencillos de usar pero a su vez constan de una serie de comandos quedeben ser aprendidos an tes de poder utilizarlos en toda su capacidad. Eneste capítulo se establecen las reglas que serán utilizadas a lo largo dellibro.

4.10 Bibliografía

Llano Emiliano Sistemas Digitales y Arquitectura de Computadoras.Unam 1993.

Mercier Philippe Assembleur Fac ile. Marabout 1992, Alleur Bélgica.

Varios Macro 86. Co lum bia Data Prod ucts Inc. USA 1986.

Ensamblador

4-86

Page 96: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Capítulo 55.1 Entrada/Salida

La transferencia de datos en tre la lógica que forma parte del sistema decomputadora y aquella que está más allá de éste, se conoce en gen eralcomo entrada/salida o E/S (in put/out put o I/O).

Se incluye dentro del ámbito del sistema a toda la lógica que se hayadiseñado para trabajar en conjunción con la UPC. Toda aquella que nocaiga dentro de esta clasificación se le conoce como externa.

La interfase en tre el sistema de computación y la lógica externa debeestar claramente definida; debe proveer de facilidades para transferirdatos, además de las señales de con trol que identifiquen a todos loseventos que ocurren.

Hay muchas formas en las que un sistema puede transferir datos hacia elex te rior; pero todos están incluídos en las siguientes tres categorías:

1) E/S Programada. En este caso todas las transferencias dedatos entre la computadora y el exterior son controladas por lacomputadora o para ser más precisos por un programa corriendoen la computadora. Existirá un protocolo bien definido en el quela computadora hace conocer a la lógica externa que los datosestán disponibles en una localidad de memoria fija de donde ésta los puede tomar, o bien, la computadora indicará de algunaforma a la lógica externa que está esperando que pongainformación en ciertas localidades de memoria para poderaccesarlas. La característica clave de la Entrada/Salida

5-87

Page 97: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Programada es que la lógica externa hace exactamente lo que sele dice que haga.

2) E/S por Interrupción. Las interrupciones son una formaque tiene la lógica externa para forzar a la computadora a poneratención y suspender lo que está haciendo para atender a lasnecesidades de la lógica externa.

3) Acceso Directo a Memoria. Esta es una forma de transferirdatos entre la memoria interna y los dispositivos externos sininvolucrar a la Unidad de Procesamiento Central en la lógica dela transferencia.

5.2 Entrada/Salida Programada

Los datos son transferidos en tre el sistema de computación y la lógicaexterna, en cualquier dirección, por medio de un puerto de entrada ysalida. Un puerto de entrada y salida consiste en un puerto con memoriade entrada y salida (buffer) conectado a las líneas de datos del bus delsistema y a las interconexiones que accesan a la lógica externa.

Cuando la lógica externa transmite datos al sistema de cómputo, lo hacepresentando los datos en las conexiones del puerto de entrada y salida,por lo que este mismo puerto almacena provisionalmente estos valores.El puerto de entrada y salida no puede estar comunicándoseconstantemente con las líneas del bus de datos, puesto que estas líneaspueden estar llevando información de o hacia la memoria. Si lasconexiones del puerto de entrada y salida se comunicaranpermanentemente con el bus de datos, cada vez que la lógica externapresentase datos a las conexiones de entrada y salida, los datos sepropagarían por las líneas del bus de datos con consecuenciasimprevisibles. La UPC debe, por lo tanto seleccionar un puerto de E/S yleer el contenido del puerto en la misma forma que lo hace de unadirección de memoria.

Como los datos se leen de los puertos de E/S tal como si se tratase de unalocalidad de memoria, a esta forma de transferencia de E/S se le conocetambién como E/S de mapa de memoria (mem ory mapped I/O). Estetipo de esquema permite a la computadora utilizar las mismasinstrucciones poderosas de lectura y escritura tanto para localidades dememoria como para los puertos de Entrada/Salida. Por ejemplo, sepueden realizar operaciones aritméticas directamente con los puertos sinnecesidad de almacenar los datos en memorias provisionales.

Ensamblador

5-88

Page 98: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Normalmente existe más de un dispositivo externo por lo que debe dehaber más de un puerto de entrada y salida. Una forma rudimentaria, peromuy utilizada en sistemas pequeños, de obtener uno o más puertos deentrada y salida consiste en dividir las líneas de dirección de la UPC en tre la memoria y los puertos. Por ejemplo, si tomamos una línea de direccióncualquiera de un sistema de microcomputadora y escogemos que cuandosu valor sea 0 accese a la memoria y que cuando éste sea 1 accese a lospuertos de entrada y salida, tendremos dividida la memoria en dos áreasbien diferenciadas, una de las cuales nos sirve para comunicarnos con losdispositivos externos y la otra con la memoria prin ci pal.

La penalidad pagada cuando una línea de dirección es utilizada paraseleccionar el buffer de un puerto de entrada y salida, es que el mapa dememoria se re duce automáticamente a la mitad, lo que en la mayoría delos sistemas de medios a grandes es un precio muy severo a pagar,solamente para seleccionar un puerto.

Un método preferido es agregar a la UPC más líneas que controlen latransferencia de y hacia los puertos de entrada y salida.

Desafortunadamente la transferencia a ciegas de datos de un sistema decomputación y la lógica externa, no siempre provee la suficientecapacidad de entrada y salida. Las siguientes características no existen en este sistema:

1.- El sistema de cómputo debe decir a la lógica externa cuando losdatos han sido colocados en el buffer de entrada y salida y por lo tantoestán listos para ser leídos; de la misma forma la lógica externa debe de indicar a la computadora cuando ha colocado datos en el buffer deentrada y salida, y éstos pueden ser leídos.

2.- Tanto la computadora como la lógica externa deben de teneralguna forma de informarse entre ellas la naturaleza de los datos quevan a intercambiar. Claramente los datos que se están transfiriendopueden ser sujetos a varias interpretaciones, por ejemplo pueden serdatos puros binarios, algún código que identifique alguna operación aejecutarse; pueden ser parte de una dirección o una direccióncompleta.

Cuando la computadora transmite señales a la lógica externa como unmedio para identificar eventos o datos se refiere a estas señales comocontroles de entrada y salida. La misma información viajando en sentido

Lógica más allá de la UPC

5-89

Page 99: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

opuesto, esto es de la lógica externa hacia la computadora, se le conocecomo estado de entrada y salida. La lógica externa no puede controlar a lacomputadora, sólo puede enviar información de su estado para que lacomputadora la interprete.

Los sistemas de computación usualmente tienen toda una serie decontroles de entrada y salida así como líneas de estado que son separadasy distintas de los puertos de entrada y salida. Las computadorasusualmente asignan uno o más puertos de entrada y salida para funcionarcomo conductores del con trol y del estado, mientras que otros puertos deentrada y salida son los encargados de transferir los datos. Es solamentela forma en que la UPC interpreta los datos que hacen la diferencia en treinformación de datos, con trol o estado de los dispositivos.

5.3 Entrada/Salida por Interrupción

Casi todas las UPC tienen una línea por la cual la lógica externa puedesolicitar atención inmediata. A ésta se le conoce como señal de peticiónde interrupción puesto que por medio de ella la lógica externa pide seainterrumpido lo que se esté haciendo y se le preste atención.

Nótese que aunque nos hemos referido a la lógica externa entregandodatos, el flujo de información bien puede ser en el sentido contrario. Dehecho, nada nos dice que una salida o entrada de datos tenga que sucederdespués de una interrupción, bien pueden ser señales de con trol las que se transmitan.

El propósito de la interrupción es informar a la UPC que suspenda loque está haciendo, procese los datos que se están transmitiendo desde elpuerto de E/S y reanude lo que suspendió.

La característica más importante de toda esta serie de eventos es que son asíncronos e impredecibles.

5.3.1 Respuesta de la UPC a una Interrupción

En su forma más el e men tal, la Unidad de Proceso Cen tral puede re -sponder a una interrupción cargando en el registro Contador de Programa (PC) la dirección inicial del programa que atiende a la interrupción peroesto nos deja con dos preguntas:

Ensamblador

5-90

Page 100: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

– ¿Qué pasa con el programa que está en ejecución?

– ¿De dónde obtiene la UPC la dirección del programa que lalógica externa necesita que se ejecute?

El programa que se está ejecutando en memoria tiene informaciónalmacenada en los registros de la UPC que puede ser importante: elacumulador (A), el Contador de Programa (PC), el Contador de Datos(DC) y otros registros existentes en la UPC. Si el nuevo programa aejecutar no tiene algún mecanismo de guardar toda esta información, secorre el riesgo de no poder volver a ejecutar el programa que estaba enprimer lugar. Si guardamos los valores de los registros con sólorestituirlos a los registros correspondientes, en es pe cial el Contador dePrograma, podemos regresar al sitio en el que suspendimos la ejecución.

Una interrupción no se reconoce hasta terminar con la instrucción quese está ejecutando, por lo que el registro de Instrucción (I) es quizá elúnico que no importe su valor pues inmediatamente es substituido por lainstrucción próxima a ejecutarse.

Existen dos formas de guardar la información necesaria para podervolver al punto donde se interrumpe un programa an tes de comenzar elque atiende a la interrupción:

– 1) La ejecución de un microprograma almacenado en la Unidadde Control que automáticamente guarda los registros pornosotros en un área predeterminada de memoria. A esta área dememoria reservada se le llama Pila (Stack) (en algunos diseñosse guardan en un juego de registros paralelos).

– 2) Dejar que el programador ejecute primero una rutina deservicio a la interrupción que se encarge de almacenar los datosde los registros en un lugar seguro.

Al fi nal de la ejecución del programa de interrupción, no importandoque método esté disponible, se deben realizar los pasos en ordencontrario para restaurar los registros correspondientes y volver al sitiodel programa donde éste fue interrumpido.

Ahora consideremos la forma de obtener la dirección donde se ejecutará la rutina que atiende a la interrupción. Si se trata de un sólo caso,

Lógica más allá de la UPC

5-91

Page 101: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

podemos considerar el tener una dirección de memoria fija que sepa deantemano la UPC, pero en el caso de múltiples puertos de entrada y salida esto resulta un poco impráctico.

Considere la forma en que la UPC responde a una interrupción:

– 1) Manda la señal de aceptación de la interrupción.

– 2) Guarda de forma automática todos los registros o permite alusuario guardarlos de alguna manera.

– 3) Mueve el contenido del vector de interrupciones que mandael puerto de E/S, al Contador de Programa para comenzar aejecutar un programa en otra localidad de memoria.

– 4) Realizar los pasos en sentido contrario para regresar al puntodel programa donde éste fue interrumpido.

Utilizar un vec tor de interrupciones que forme la dirección en memoriadonde se encuentra el programa que atiende a la interrupción,proporcionado por el dispositivo que interrumpe, nos permite tener granflexibilidad al momento de definir nuestras rutinas.

En forma funcional podemos comparar una interrupción con unasubrutina de un lenguaje de alto nivel.

5.3.2 Código de Selección de un Dispositivo que Interrumpe

Otro de los esquemas muy utilizados consiste en exigir que eldispositivo que interrumpe a la UPC mande un código que identifiquequé puerto de E/S es el que interrumpe.

Si se manda un código de selección del dispositivo, podemos entoncesaccesar a una tab la en memoria que nos dé el vec tor de dirección deinterrupción que cargaremos al Contador de Programa para ejecutar larutina de interrupción.

Para esto se exige un poco más de la lógica externa pues debe ser capazde almacenar su código de selección; existen para esto en el mercadovarios tipos de circuitos programables de interfase de E/S (PIO, PIA, etc.)

La secuencia de eventos es como sigue:

– 1. La lógica del dispositivo externo crea una señal de petición deinterrupción que transmite a la UPC.

Ensamblador

5-92

Page 102: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

– 2. Cuando la UPC está lista a dar servicio a la interrupción,responde con una señal de aceptación.

– 3. Al recibir la señal del procesador, la lógica del dispositivoexterno coloca un código de identificación (de X número de bits)en el bus de datos del sistema. La UPC recibe los datos y losinterpreta como un código de identificación que usa para armar la dirección donde se encuentra localizado el programa que atiendea la interrupción en cuestión.

– 4. Siguiendo un protocolo especificado por el sistema, eldispositivo externo coloca ahora sus datos a través del puerto deentrada y salida para que éste lo transmita al bus del sistemacuando se le solicite.

Generalmente se pueden deshabilitar las interrupciones con algunainstrucción del juego de instrucciones que lo permita, pero existe otrotipo de interrupciones que exigen el máximo de atención y no puedenesperar. A este tipo de interrupciones con tan alta prioridad se les conocecomo no mascarillables y no pueden ser deshabilitadas. Generalmente sereserva esta línea de muy alta prioridad a eventos tales como fallainminente de energía o un er ror del sistema que impide que éste puedaseguir trabajando, tal como un er ror de memoria.

5.4 Acceso Directo a Memoria

Como ya se observó en las secciones precedentes, el objetivo de lamayoría de las operaciones de entrada y salida es la transferencia de datos en tre los dispositivos externos y la UPC. Ya sea la E/S programada o la deinterrupciones, se requiere de la participación activa de la UPC, esto es,la ejecución de instrucciones para leer o escribir tanto a los dispositivosexternos como a la memoria interna (prin ci pal). Esto puede no ser tanrápido como se piensa para ciertos procesos que requieren de extremadavelocidad como es el caso de la transferencia del contenido de memoria ala pantalla de visualización (CRT) o de y hacia la memoria dealmacenamiento masivo como son los dis cos flexibles y duros de unsistema. Una vez más, la solución consiste en substituir los programaspor electrónica que realice la misma función pero a más velocidad.

La solución lógica consiste en diseñar una computadora de propósitoespecífico que se dedique exclusivamente a la transferencia de datos de yhacia la memoria. A tal circuito se le conoce como dispositivo de AccesoDirecto a Memoria o por su siglas en inglés como DMA.

Lógica más allá de la UPC

5-93

Page 103: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Una discusión completa del tema queda fuera del rango que pretendeabarcar este libro por lo que, una vez más, referimos al lector interesado ala bibliografía para más detalles del tema.

5.5 Realización en la Familia Intel

Los procesadores de la fa milia Intel, 80x86 y Px, no escapan a estasimposiciones de servicio y requieren de un esquema complejo deinterrupciones y de acceso directo a memoria.

Una de las características interesantes de este circuito es que contienedentro de su juego de instrucciones una instrucción que nos permitesimu lar una interrupción por medio de programa (instrucción INT).

Aunque contar con una instrucción que simule las interrupciones porprograma pueda so nar extraño e innecesario en un principio, baste sa berque los diseñadores pasan muchas horas diseñando y programando larealización de rutinas eficientes para muchas de las operaciones que serealizan dentro de un sistema de cómputo. Tener acceso a estas rutinasnos da gran flexibilidad y facilidad de programación como veremos enlos siguientes capítulos.

La lista de interrupciones y sus funciones es enorme y hay librosdedicadas a ellas. Para nuestros propósitos usaremos algunas cuantas que iremos describiendo en cada caso.

5.6 Formas de Direccionamiento

Como ya se ha mencionado, las instrucciones especifican los siguienteselementos dentro de una UPC:

· La operación a realizar (suma, mueve datos, resta, etc.)

· Los elementos a manipular en la UPC, ya sea en la memoria o enlos registros de trabajo.

Para acceder a una información en la memoria, la UPC debe sa ber sudirección y su longitud.

Existen distintas posibilidades de presentación de una localidad dememoria. Analizaremos en detalle cada forma de direccionamiento puesse encuentran en casi todas las instrucciones a utilizar.

Ensamblador

5-94

Page 104: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Es importante resaltar que en ninguna instrucción (generalmente)se permite como operandos dos direcciones de memoria.

Ilustraremos nuestros ejemplos con la instrucción mover (MOV, move)que es una instrucción que se encuentra en el juego de instrucciones detoda UPC. Esta instrucción se encarga del movimiento de datos de lamemoria a los registros, de los registros a la memoria, de la memoria a lamemoria o en tre registros dependiendo de sus argumentos y delprocesador que se trate.

La forma gen eral de esta instrucción es:

MOV destino, fuente

pero nada nos in dica que no pueda ser exactamente al revés. Eldiseñador tiene en esto la última palabra. Dentro del sistema Intel se sigue la primera convención y la instrucción tiene cinco formas:

MOV registro, constante

MOV memoria, constante

MOV registro, memoria

MOV memoria, registro

MOV registro, registro

Nótese que no hay forma de mover en tre localidades de memoria sinpasar an tes por un registro.

Las constantes o localidades de memoria pueden estar definidas conetiquetas si se usa un ensamblador, lo que facilita enormemente la tareade llevar el con trol de estas localidades o constantes (re vise pseudoinstrucción AS SUME y EQU en capitulo an te rior).

Por el funcionamiento del procesador que estamos analizando, ladirección se di vide en segmento+dirección dentro del segmentorepresentado como:

Segmento:Desplazamiento

Recuerde que el registro por omisión para datos es siempre DS(segmento de datos) de forma tal que en lugar de usar

MOV AX,DS:[BX]

MOV AX,DS:[SI+2]

se usa

Lógica más allá de la UPC

5-95

Page 105: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

MOV AX,[BX]

MOV AX,[SI+2]

Como siempre existen excepciones que confirman la regla:

Si se usa el registro BP (apuntador base), el segmento por omisión seráSS (segmento de pila).

Si el programador de cide usar un segmento alterno. Este se debeespecificar en la instrucción:

MOV AX,CS:[BX]

La dirección efectiva o real se forma en los sistemas 80x86 desplazando4 bits a la izquierda el contenido del registro de segmento y luegoagregando el contenido del registro especificado. Si hablamos de 16 bitsnos da un número de 20 bits (FFFFFF hex a dec i mal) para la dirección ó 1Mega byte de memoria directa. Para las aplicaciones actuales estámemoria es insuficiente por lo que se usa memoria vir tual para tratar demantener la compatibilidad con diseños anteriores a la vez que se trata deempujar el estandard a nuevas dimensiones, empantamiento que tarde otemprano tendrá que romperse y crear una nueva generaciónindependiente.

Resumiendo:

segmento 0000 (desplazado 4 bits a la izquierda)

+ registro

dirección efectiva de 20 bits

Presentamos en la tab la 5.1 un resumen de los tipos dedireccionamiento.

Ensamblador

5-96

Page 106: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Tab la 5.1 Formas de Direccionamiento

Inmediata registro valorîinmediato

Directa registroîdirección de memoria

Base registroîDS:[BX] o SS:[BP]

Indice registroîDS:[SI] o DS:[DI]

Indice ybase

registroî[BX][SI], [BX][DI],[BX+SI], [BP][SI], [BP][DI] o

[BP+SI]

Base yDesplazam

iento(Directo oInmediato)

registroîident.[BX], ident.[BP] o[BX+constante]

Indice yDesplazam

iento(Directo oInmediato)

registro ident.[SI], ident.[DI] o[SI+constante]

Base,Indice y

Desplazamiento

(Directo oInmediato)

registroîident.[BX][SI],ident.[BX][DI], ident.[BP][SI],

ident. [BP][DI]

5.6.1 Inmediata

RegistroîValor inmediato

El contenido de un registro es inicializado por un valor inmediato o unaconstante.

Ejemplos:

MOV AH,12 ;AHî12, AL no es afectado,

; el movimiento es de 8 bits (1 byte)

MOV BX,1 ;BXî1, tanto BL como BH se afectan,

Lógica más allá de la UPC

5-97

Page 107: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

; movimiento de 16 bits (1 palabra)

El nombre del registro in dica el número de bits implicados en laoperación (L o H de 8 bits=1 byte, X de 16 bits=1 palabra)

5.6.2 Directo

Registroîdirección de memoria

El contenido de un registro es sustituido por el contenido de la zona dememoria apuntada por el identificador. La operación puede ser de 8 ó 16bits y si los dos operandos no coinciden, se gen era un er ror al ensamblar.

Ejemplos:

;de fine los apuntadores a memoria

Ident1 DB 2 ;apuntador de 1 byte

Ident2 DW 5 ;apuntador de 2 bytes=1 palabra

Ident3 DB ? ;de fine una zona de 1 byte

;Operaciones de memoria a un registro

MOV AH,ident1 ;AHî2 (8 bits)

MOV BX,ident2 :BXî5 (16 bits)

;Operaciones de registro a memoria

MOV ident1,CH ;ident1îCH (8 bits)

MOV AH,ident2 ;ER ROR, operación de 16 bits a unregistro de 8 bits

5.6.3 Base

RegistroîDS:[BX]

RegistroîSS:[BP]

Inicializa un registro con el contenido del área de memoria situada en ladirección DS:[BX]. En este caso [BX] representa el contenido de la zonade memoria cuya dirección está contenida en BX. La operación puede ser de 8 ó 16 bits. Quedará esto más claro con los siguientes ejemplos:

MOV BX,8 ;BXî8

MOV AX,[BX] ;AXîcontenido de la zona de memoriade la

;dirección DS:0008

Ident1 DB 2 ;De fine una zona de 1 byte

Ident2 DW 5 :De fine una zona de 2 bytes

Ensamblador

5-98

Page 108: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

MOV BX,OFF SET ident2 ;BXîDesplazamiento de ident2

MOV AX,[BX] ;AXîde la zona de memoria a ladirección

; DS:ident2 (ident2=5)

En las dos líneas precedentes obsérvese que la pseudo instrucción OFF -SET in dica un desplazamiento a partir de la vari able. Como la vari ablecontiene 2 se in dica un desplazamiento de 2 bytes, el propio de IDENT1(2), el de IDENT2 parte alta (0) y finalmente el de IDENT2 parte baja (5).

Una forma alternativa de este direccionamiento es con el uso delregistro BP con el apuntador de segmento SS:

MOV BP,0AFFFh

MOV AX,[BP] ;AXîcontenido de la zona de memoria

; apuntado por SS:BP (afff)

5.6.4 Indice

RegistroîDS:[SI]

RegistroîDS:[DI]

Este modo de direccionar se utiliza generalmente para las cadenas decaracteres o para aislar un elemento de una tab la o matriz. Generalmenteel segmento utilizado es DS salvo en las excepciones que resaltaremos enejemplos.

MOV SI,0

MOV AX,[SI] ;AXîcontenido de la memoria en ladirección DS:0

MOV DI,0

MOV [DI],AH ;Zona memoria apuntado porDS:0îcontenido de AH

Lógica más allá de la UPC

5-99

Page 109: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

5.6.5 Indice y base

RegistroîDS:[BX][SI]

RegistroîDS:[BX][DI]

RegistroîDS:[BX+SI]

RegistroîSS:[BP][SI]

RegistroîSS:[BP][DI]

RegistroîSS:[BP+SI]

Este tipo de direccionamiento utiliza BX y SI o DI, la base o segmentoes DS. Es posible usar también la notación [BX+SI], [BX+DI].

MOV BX,2

MOV SI,5

MOV AH,[BX][SI] ;AHîcontenido de la dirección de

;memoria DS:7 (BX+SI)

Se habla de un segmento base puesto que frecuentemente se utiliza parareferenciar los elementos de una tab la, de ahí el nombre de base (delinicio de la tab la):

tab la DB 20 DUP(?) ;de fine tab la de 20 elementos

MOV BX,OFF SET tab la ;BXîdirección base de la tab la

MOV SI,2 ;Se va a leer el tercer elemento de latab la

;(siendo el primero 0)

MOV AH,[BX][SI] ;AHî3er elemento de la tab la

MOV SI,8 ;Apuntar al noveno elemento de la tab -la

MOV AL,[BX][SI] ;ALî9no elemento de la tab la

La segunda forma del direccionamiento índice y base es el que utiliza aBP y SI o DI como apuntador donde SS es el segmento base por omisión.

MOV BP,2

MOV SI,5

MOV AH,[BP][SI] ;AHî contenido de la memoria a

; la dirección SS:[BP+SI] (SS:5+2)

Ensamblador

5-100

Page 110: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

5.6.6 Base y Desplazamiento (Directo o Inmediato)

RegistroîDS:ident.[BX]

RegistroîSS:ident.[BP]

RegistroîDS:ident.[BX+constante]

Una combinación de los precedentes tipos de direccionamiento(elementos dentro de una tab la).

Ident1 DW 5 DUP(?) ;Zona de 10 bytes (5 palabras)

MOV BX,2

MOV AX,ident2[BX] ;AXî3er elemento de la tab la Ident2

5.6.7 Indice y Desplazamiento (Directo o Inmediato)

Registroîident.[SI]

Registroîident.[DI]

Registroî[SI+constante]

Otra combinación de los precedentes (elemento dentro de un registro).

MOV SI,4

MOV AX,[SI+1] ;AXîcontenido de la zona de memoria

;apuntado por DS:4+1

5.6.8 Base, Indice y Desplazamiento (Directo o Inmediato)

Registroîident.[BX][SI]

Registroîident.[BX][DI]

Registroîident.[BP][SI]

Registroîident.[BP][DI]

Registroî[BX+SI+ident.]

Este tipo de direccionamiento complicado es utilizado para direccionara estructuras (elemento dentro de un registro que está dentro de una basede datos).

Ident1 DB 2 ;Zona de 1 byte

MOV BX,5

MOV SI,4

MOV AX,ident1[BX][SI+1]

;AXîcontenido de la zona de memoria

Lógica más allá de la UPC

5-101

Page 111: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

; apuntado por DS:2+5+4+1

5.6.9 Número de Bits en una Instrucción

Si una dirección de memoria como [BX+1] aparece como operando, elcircuito 80x86 debe sa ber si va a manipular a 1 ó 2 bytes en dichadirección. Hemos dicho que si el segundo operando lo forma un registro,éste de fine por completo el tipo de operación con lo que respecta alnúmero de bytes. Pero existen ciertos casos donde los operandos de laoperación no permiten intuir el número de bytes lo que provoca unmensaje de er ror al ensamblar. Por ejemplo en los siguientes casos:

MOV [BX+1],4

INC [DI]

MOV [SI+2],1

Se debe de completar la instrucción como sigue:

Para el caso de 1 byte

MOV BYTE PTR [BX+1],4

INC BYTE PTR [DI]

MOV BYTE PTR [SI+2],1

Para los operaciones del tipo palabra

MOV WORD PTR [BX+1],4

INC WORD PTR [DI]

MOV WORD PTR [SI+2],1

Donde BYTE PTR se refiere a Apuntador de Byte y WORD PTR aApuntador de Palabra.

5.7 Resumen

Hemos dicho que un sistema de cómputo sólo debe de contar con laUPC y la memoria prin ci pal. Aunque esto es estrictamente cierto, lafuncionalidad del circuito sería casi nula. Es necesario, entonces, agregar toda una serie de circuitos y dispositivos que hagan que el diseño seafuncional y práctico para el que lo usa.

Ensamblador

5-102

Page 112: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

La interfase a estos dispositivos y circuitos se realiza por medio de lospuertos de Entrada/Salida. Es por estos puertos que la computadora secomunica y recibe información del mundo externo.

Los diseños de las computadoras modernas toman en cuenta esta vari -able y tratan de integrarla dentro del circuito resultante.

5.7.1 Puntos Importantes del Capítulo

· La transferencia de datos entre el sistema de cómputo y el mundoexterno se le conoce como Entrada y Salida (E/S o I/O).

· La E/S se puede dividir en Programada, por Interrupciones yAcceso Directo a Memoria (DMA).

· La E/S programada es conocida también como E/S de mapa dememoria pues se divide el mapa de memoria entre memoria ydispositivos de E/S.

· Para evitar dividir el mapa de memoria se prefiere agregar máslíneas de control a la UPC que seleccionen entre la memoria y losdispositivos de E/S.

· La E/S por Interrupción solicita al sistema su atención por mediode una línea la atención.

· Si la UPC es interrumpida debe de realizar una secuenciaordenada antes de atender a la interrupción y esto incluye entreotras cosas el preservar el contenido de los registros.

· El dispositivo externo que interrumpe debe proporcionar uncódigo de dispositivo o un vector de interrupciones que es ladirección donde se encuentra el programa que atiende aldispositivo.

· El DMA consiste en guardar o leer datos de la memoria principalsin la intervención de la UPC. Para esto, es necesario generartodas las señales que requiere la memoria y que en condicionesnormales genera la propia UPC.

· Existen varias formas de componer una instruccíon:directa, base,índice y las combinaciones de las anteriores.

Lógica más allá de la UPC

5-103

Page 113: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

5.8 Instrucciones Analizadas

INT, MOV

5.9 Problemas

5.1 Justifique la decisión de los diseñadores de conservar el esquema dememoria real de sólo 1 mega byte en lugar de los 4 giga bytes accesablespor los modelos 386, 486, P5 y P6.

5.2 Ensamble todos los pedazos de código en el ensamblador agregando las pseudo instrucciones necesarias y depure hasta no obtener ningún er -ror. No importa que el programa no tenga sentido y que no se pueda ver elresultado.

5.3 Intente ahora introducir los pedazos de código desde DE BUG.Ahora sí podemos ver los resultados de las transferencias utilizando lasinstrucciones adecuadas del programa DE BUG.

5.4 Investigue las mejoras de diseño de las siguientes generaciones: 486a P5, P5 a P6.

5.10 Bibliografía

Llano Emiliano Sistemas Digitales y Arquitectura de Computadoras.Unam 1993. Capítulo 12 y 14.

Mercier Philippe Assembleur Fac ile. Marabout 1992, Alleur Bélgica.Capítulo 1.

Ensamblador

5-104

Page 114: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Capítulo 66.1 Más sobre Interrupciones

Todos los diseños de computadoras incluyen la previsión deinterrupciones electrónicas. Lo novedoso del circuito 80x86 es lainclusión de estas mismas interrupciones electrónicas pero dentro deljuego de instrucciones del circuito lo que permite el acceso a las utileríasdiseñadas cuidadosamente (algunas no tanto) que hacen que elprogramar en ensamblador se simplifique.

La instrucción de interrupción (INT realiza dentro del la UPC todos lospasos de una interrupción generada por un dispositivo de E/S y transfierela ejecución del programa prin ci pal a la subrutina de interrupciónapuntada por la dirección encontrada en el vec tor de interrupciones quese pasa como argumento de la instrucción.

Los vectores de interrupción se encuentran en las localidades bajas dememoria, de la dirección 00000h a la 00400h (1Kbyte), formando así 256 vectores de interrupción cada uno de 32 bits (segmento:dirección).

Por ejemplo si empleamos la instrucción INT 20, informamos a la UPC

que se transfiera con trol a la subrutina cuya dirección encontramos en lalocalidad 20*4=80 dec i mal ó 40h. Se debe seguir la convención de bytemenos significativo primero, esto es, byte bajo de dirección, byte alto dedirección, byte bajo de segmento, byte alto de segmento.

Una lista completa de las interrupciones se encuentra en la sección deROM del man ual IBM Per sonal Com puter Tech ni cal Ref er ence.

Para pasar parámetros a la subrutina de interrupción se utilizan losregistros, cada uno de ellos con una función distinta según el caso. El

6-105

Page 115: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

llamar a una interrupción hace que el procesador guarde la dirección deregreso (CS e IP) junto con las banderas en la pila. Afecta también a lasbanderas IF (bandera de interrupción) y TF (bandera de trampa o paso apaso).

Ejemplo 6.1. Ilustraremos aquí el punto con un breve ejemplo yaconsiderado en el capítulo 4 sección 4.4.1. En ese punto no se explicó lafunción del programa, pero aquí ya tenemos todos los elementosnecesarios para comprender su función y colocar los comentarios:

MOV DL,1 ;Valor ASCII a desplegar

MOV AH,2 ;Despliega un carácter ASCII en lapantalla

INT 20h ;Función de despliegue

INT 21h ;Regresa con trol a programa su per vi -sor

Dando por resultado que el programa despliegue una cara feliz en unpunto x de la pantalla, sobre el cual por el momento no tenemos con trol, yregrese al programa su per vi sor, en este caso, DE BUG. En este punto esnecesario introducir el programa de nuevo a la computadora usando DE -

BUG.

Hemos pues aprendido el vec tor de interrupciones que los diseñadoresdel ROM de IBM utilizaron para definir la interrupción de la pantalla (21h)y la de fin de programa que llama (20h).

Si consultamos la tab la del capítulo 3 de códigos ASCII, podemos ahoravariar el carácter a desplegar modificando la primera instrucción.

6.2 Saltos Incondicionales (JMP)

¿Qué pasaría si en lugar de una cara feliz queremos muchas?Requerimos pues de introducir una nueva instrucción: JMP. Estainstrucción salta a la localidad de memoria que se le in dica acontinuación como argumento.

Si empleamos el ensamblador podemos usar direcciones simbólicasdefinidas previamente:

Aqui:

MOV DL,1

MOV AH,2

INT 21h

JMP aqui

Ensamblador

6-106

Page 116: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Si se emplea el DE BUG se debe de especificar la dirección:

-a100

MOV DL,1

MOV AH,2

INT 21

JMP 0100

Desensamble el programa para asegurarse de que lo tecleó bien:

-u100,106

1649:0100 B201 MOV DL,1

1649:0102 B402 MOV AH,2

1649:0104 CD21 INT 21

1649:0106 EBF8 JMP 0100

Al ejecutar el programa (-g) la pantalla se llena inmediatamente de carasfelices. Para interrumpir el programa presionamos la tecla de CTRL y la de BREAK a la vez. Esto gen era una interrupción de teclado que al seratendida reconoce la secuencia de teclas e interrumpe el programaregresando con trol al programa su per vi sor.

Los saltos pueden ser incondicionales o condicionales y a su vezdividirse en tres tipos:

· Cortos. La dirección está representada en 8 bits, por lo que caeentre las direcciones comprendidas a -128 y +127 bytes de ladirección de donde se realiza el salto.

· Cercanos. Se representa en 16 bits por lo que van dentro delmismo segmento a -32,767 ó +32,768 bytes de distancia.

· Lejanos. A otro segmento. Se representan por 32 bits y losregistros IP y CS son modificados.

· De índice. Pueden ser cortos o cercanos y toman la forma de JMPregistro o JMP memoria. Se usan en general para salto indirectousando como apuntador un índice contenido en un registro o enuna localidad de memoria:

Salta DW uno ;de fine tab la de etiquetas

DW dos

DW tres

DW cuatro

MOV BX,escoge ;Coloca en BX la opción

JMP Salta[BX] ;Salta a Uno si escoge=0

Explorando el Ensamblador

6-107

Page 117: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

;a Dos si escoge=1, etc.

uno: ;instrucciones para opción Uno

dos: ;instrucciones para opción Dos, etc.

Trataremos por el momento con saltos incondicionales. Observemosdetenidamente los códigos que nos entrega el programa DE BUG: B201,

B402, CD21, EBF8. Por deducción podemos inferir que B2 corresponde elnúmero hex a dec i mal a la instrucción MOV, CD el de INT y EB al de JMP.¿Pero por qué en la instrucción JMP el programa coloca F8 en lugar de ladirección 100 que es a la que estamos saltando para continuar con laejecución del programa? Recordemos que estamos saltando a unascuantas instrucciones atrás y por lo tanto es un salto corto definible en 1byte. Si se tratase de un salto hacia adelante de 8 bytes, el códigocorrespondería a EB08, pero éste es un salto hacia atrás y por lo tantonegativo de 8 bytes que corresponde a F8.

6.3 Incrementando Registros y Memoria (INC)

Podemos introducir una nueva variante al programa dejando quedespliege toda la serie de caracteres ASCII en lugar de uno sólo:

MOV DL,00

MOV AH,02

INT 21

INC DL

JMP 0102

Lo que nos lleva a una nueva instrucción: INC. Esta instrucciónincrementa un registro o la memoria en una unidad. La bandera CF no esafectada nunca por esta operación pero sí las banderas de cero ysaturación (ZF, SF) son modificadas de acuerdo al resultado.

Ejemplos:

INC BX ;Operación de 2 bytes

INC AL ;Operación de 1 byte

INC vari able ;Incrementa una dirección

INC tab la[BX] ;Incrementa un elemento de una tab la

Recuerde que en nuestro programa muestra se realiza una operación de1 byte y el número máximo que se obtiene es de FFh ó 255 la siguienteoperación de incremento regresa el contador a 0 y vuelve a comenzar lacuenta.

Ensamblador

6-108

Page 118: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Ejercicio. 5.2 Deje ejecutar el programa por un tiempo aleatorio einterrumpa. Visualice el contenido de los registros utilizando lainstrucción r del DE BUG.

6.4 Lazos (LOOP)

Nuestro programa va mejorando pero aún falta mucho para lograr elcon trol deseado. Una nueva mejora sería controlar el número de vecesque el programa pasa por un conjunto de operaciones. Si modificamos elprograma de la siguiente manera podemos lograrlo:

MOV CX,0100

MOV DL,00

MOV AH,02

INT 21

INC DL

LOOP 0105

INT 20

Se in tro duce un nuevo elemento de programación: la instrucción LOOP.Está instrucción realiza un salto condicional a la dirección indicadamientras un contador, en el registro CX, no cumpla con cierta condición.En este caso la condición es: No saltar cuando CX=0. Esta instrucción noafecta a las banderas pero si decrementa el registro CX de formaautomática.

ATENCION: ¡Si el contador CX se encuentra en cero, la instrucciónLOOP decrementa al registro an tes de realizar la comparación por lo querecorreremos el código 256 veces! Se puede usar la instrucción de saltocondicional JCXZ (Jump if CX zero, salta si CX es cero) an tes de entrar al lazo:

JCXZ no_entra ;prueba CX

repite: ;instrucciones del lazo

...

LOOP repite

no_entra: ;no entrar al lazo

Note que en este caso al estar usando DE BUG, la primera instrucción in -tro duce en CX un contador de 256 dec i mal.

Explorando el Ensamblador

6-109

Page 119: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Ejercicio 5.3 Agregar las lineas necesarias para ensamblar con MASM yensamble. Utilice pseudo instrucciones específicas para los contadores ydirecciones.

La instrucción LOOP tiene dos variantes:

· LOOPE. Realiza el lazo mientas CX<>0 y ZF=1

· LOOPNE. Realiza el bucle mientras CX<>0 y ZF=0

Se debe tener cuidado con las banderas pues un código aparentementecorrecto a primera vista no funcionará:

MOV SI,OFF SET cadena ;En SI lleva el apuntador a unacadena

Busca:

CMP AL,[SI] ;Compara con una cadenaalmacenada en AL

INC SI ;Prepara para la siguiente cadena acomparar

LOOPNE busca ;Busca hasta encontrar cadena

La instrucción CMP compara las dos cadenas y modifica las banderas deacuerdo al resultado (ver siguiente sección), pero la siguiente instrucciónes una operación aritmética que vuelve a modificar las banderas, en estecaso la que más nos interesa, la bandera de cero (ZF) por lo que LOOPNEno puede salir del bucle nunca.

6.5 Saltos Condicionales y Comparaciones

Existen muchos casos en programación en los cuales no nos essuficiente un salto incondicional a una dirección predeterminada, sinoque deseamos saltar sólo si se cumple alguna condición previa.

Para estos casos, los diseñadores del circuito proveen de los saltoscondicionales que pueden ir desde unos cuantos hasta una gran variedadcomo en los diseños modernos.

Todos los saltos condicionales dependen de las banderas para hacer suspruebas por lo que es necesario modificarlas de alguna forma (con alguna instrucción) an tes de hacer la prueba de salto. La instrucción preferida esCMP:

CMP Registro,Constante

CMP Memoria,Constante

Ensamblador

6-110

Page 120: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

CMP Registro,Memoria

CMP Memoria,Registro

CMP Registro,Registro

La operación realiza una resta sin modificar ni el destino ni la fuentepero sí modificando las banderas de acuerdo al resultado. Por ejemplo:

MOV AH,5

CMP AH,6 ;-AH+6

AH=05h=0000 0101 ó 1111 1011 en complemento a 2.

1111 1011+0000 0110 = 1 0000 0001 por lo que las banderasmodificadas serán:

· OF=0 (no hay desbordamiento),

· SF=0 (último bit del byte o signo),

· ZF=0 (el resultado es diferente a 0) y

· CF=1 (puesto que hay un acarreo).

Se debe poner cuidado en operaciones indefinidas:

CMP [BX],1 ;Operación indefinida

Se de fine poniendo el tipo de apuntador:

CMP BYTE PTR [BX],1 ;Del tipo Byte -[BX]+1

CMP BYTE WORD [BX],1;Del tipo Word (2 bytes) -[BX]+1

El juego de instrucciones del circuito 80x86 nos ofrece una amplia gamade saltos condicionales divididos en tres categorías genéricas:

· Comparación de banderas

· Comparación entre números sin signo

· Comparación entre números con signo

Para la comparación de banderas, todas las instrucciones toman laforma J.. identificador donde J.. en el mnemónico de la instrucción eidentificador es una etiqueta o dirección localizada en un intervalo de +128a -127 bytes de distancia.

Explorando el Ensamblador

6-111

Page 121: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Tab la 6.1 Comparación de Banderas

Instrucción Condición Significado

JZ Salta si ZF=1 (Jump if Zero)

JE Salta si ZF=1 (Jump if Equal)

JNZ Salta si ZF=0 (Jump if Not Zero)

JNE Salta si ZF=0 (Jump if Not Equal)

JC Salta si CF=1 (Jump if Carry)

JNC Salta si CF=0 (Jump if Not Carry)

JS Salta si SF=1 (Jump if Sign)

JNS Salta si SF=0 (Jump if Not Sign)

JO Salta si OF=1 (Jump if Over flow)

JNO Salta si OF=0 (Jump if Not Over flow)

Sabemos que en las comparaciones aritméticas sin signo la banderaCF=1 in dica un desbordamiento de capacidad. Si comparamos dosnúmeros A y B con la instrucción CMP (-A+B) y encontramos undesbordamiento, esto nos in dica que A<B puesto que el complemento a 2de A es un número positivo muy grande que al sumarse a B nos da undesbordamiento. De la misma forma si A>B no habrá desbordamiento ysi A=B el indicador de cero (ZF) será 1.

Tab la 6.2 Comparación de Números sin Signo

Salta si Instrucción Valor de la bandera

A>B JNBE o JA(Jump if not Be low or Equal,, Jump if Above)

CF=0 y ZF=0

A>=B JNB, JAE o JNC(Jump if Not Be low,Jump if Above or Equal,Jump if Not Carry)

CF=0

A<=B JBE o JNA(Jump if Be low or Equal, Jump if Not Above or Equal)

(CF=1 y ZF=1) o (CF<>ZF)

A<B JB, JNAE o JC(Jump if Be low, Jump if Not Above or Equal,,Jump if Carry)

CF=1

A=B JE o JZ(Jump if Equal, Jump if Zero)

ZF=1

A<>B JNE o JNZ(Jump if Not Equal, Jump if Zero)

ZF=0

Ensamblador

6-112

Page 122: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

A diferencia del grupo an te rior, los siguientes saltos condicionalestoman en cuenta operaciones con signo.

Tab la 6.3 Comparación de Números con Signo

Salta si Instrucción Valor de la bandera

A>B JG o JNLE(Jump if Greater, Jump if Not Less or Equal)

(ZF=0 y OF=SF)

A>=B JGE o JNL(Jump if Greater or Equal, Jump if Not Less)

SF=OF

A<=B JNG o JLE(Jump if Not Greater, Jump if Less or Equal)

(ZF=0 y SF=OF) o(ZF=1 y SF=OF) o (ZF=0 y SF<>OF)

A<B JNGE o JL(Jump if Not Greater or Equal, Jump if Less)

(SF<>OF)

A=B JE o JZ(Jump if Equal, Jump if Zero)

ZF=1

A<>B JNE o JNZ(Jump if Not Equal, Jump if Not Zero)

ZF=0

En un ejemplo notaremos la importancia de seleccionar un grupo u otro:

MOV AH,0FFh

CMP AH,0 ;Compara FF con 0

JB sigue ;Comparación sin signo

;Salta si menor

La instrucción JB no provocará el salto pues 255 no es in fe rior a 0.

MOV AH,0FFh

CMP AH,0 ;Compara FF con 0

JL sigue ;Comparación con signo

;Salta si menor

En este caso si hay un salto pues -1 (0FFh en aritmética con signo) esmenor que 0.

Todos los saltos condicionales dentro del juegos de instrucciones delcircuito 80x86 son saltos cortos, esto es, a -127 ó +128 bytes de distancia yno modifican las banderas. Por lo que si se requiere un salto largo se debede emplear un truco, en lugar de:

Explorando el Ensamblador

6-113

Page 123: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

JL sigue

... ;Serie de instrucciones

... ;que dan más de 128 bytes

... ;(er ror señalado por el ensamblador)

sigue:

Usaremos:

JGE sigue1 ;Instrucción contraria a JL

JMP sigue ;Serie de instrucciones

sigue1: ;que dan más de 128 bytes

...

sigue:

6.6 Operaciones Lógicas (AND, OR, NOT, XOR,TEST, NEG)

Existen cierto tipo de instrucciones muy próximas a la lógica de lamáquina, en es pe cial a las que realiza la UAL, que permiten manipular losbits individuales de maneras extrañas y muy prácticas. Todas tienen lassiguientes combinaciones posibles:

Mnemónico Registro, Valor

Mnemónico Memoria, Valor

Mnemónico Registro, Memoria

Mnemónico Memoria, Registro

Mnemónico Registro, Registro

Donde Registro es un registro interno de trabajo de 8 ó 16 bits, Valor esuna constante o valor y Memoria es una dirección de memoria oapuntador a una.

Todas las operaciones lógicas son realizadas bit a bit.

6.6.1 Y Lógico (AND)

La primera que analizaremos es la operación Y (AND) que nos entrega un 1 si los dos operadores son 1 y un 0 si cualquiera de ellos es cero. Seutiliza muy a menudo para aislar ciertos bits de un byte o para poner encero ciertos bits de un byte. Una de las aplicaciones menos utilizadas dela operación Y Lógica es obtener el residuo de una resta:

Calcule el residuo de 29/8

00001 1101 (29)

AND 0000 0111 (di vi sor-1=7)

Ensamblador

6-114

Page 124: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

0000 0101 (residuo de 5)

Cuando se trata de eliminar ciertos bits y otros no, se le nombra aloperador de Y Lógico mascarilla. Un cero en la máscara nos dará porresultado un cero y un uno conserva el valor orig i nal del operando:

AND AX,6 ;Usa mascarilla (6) para conservarbits 1 y 2

AND AX,0FBh ;Usa mascarilla para eliminar bits 2 y4

Ejercicio 6.2 Diga cuales de las siguientes instrucciones sonincorrectas y por qué.

AND 6,AX

AND AX,BH

6.6.2 O Lógico (OR)

La operación O (OR) da por resultado un 1 si cualesquiera de los dosoperadores es un uno. La mascarilla en este caso sirve para forzar ciertosbits a 1 lógico.

Ejercicio 6.3 Diga cuales de las siguientes instrucciones sonincorrectas y por qué.

OR AX,0104h

OR 014h,AX

OR BH,AX

6.6.3 No Lógico

En este caso la operación da por resultado el contrario de lo queteníamos en un principio; esto es, si hay un 1 tendremos un 0 y si hay uncero un 1. La operación toma la forma

NOT Registro

NOT Memoria

6.6.4 O Exclusivo Lógico (XOR)

Esta operación da por resultado un 1 si los bits son diferentes y un 0 sison iguales. Un uso común de la instrucción XOR es para colocarrápidamente un registro en cero:

XOR AX,AX ;Coloca AX en cero

Puede utilizarse también para invertir (complementar) uno o más bitscon una mascarilla:

Explorando el Ensamblador

6-115

Page 125: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

XOR AH,6 ;Complementa bits 1 y 2 de AH

Esta instrucción es muy usada en programas gráficos donde se deseapasear una figura por un fondo sin destruir éste.

6.6.5 Prueba Lógica (TEST)

La prueba lógica es el equivalente a la operación Y (AND) sin modificarlos operadores pero alterando las banderas de acuerdo al resultado. Escom pa ra ble a la operación CMP para comparaciones lógicas.

6.6.6 Las Banderas

En todas las operaciones lógicas se modifican las banderas, a excepciónde la operación TEST que es una prueba no destructiva, de la siguienteforma:

· Las banderas CF (acarreo) y OF (saturación) siempre son ceropuesto que las operaciones no son aritméticas.

· El indicador AF (auxiliar) queda indeterminado y no se usa.

· Los indicadores SF (signo), ZF (cero) y PF (paridad) se modificande acuerdo a los operadores.

· La operación NO (NOT) es una excepción a lo anterior pues nomodifica las banderas.

6.6.7 Complemento a 2 (NEG)

Con esta operación realizamos la negación de cada uno de los bits de unbyte o palabra y luego la suma de 1 (el complemento a 2) en un sólo paso.Las formas permitidas de la operación son:

NEG Registro

NEG Memoria

Como ejemplos tenemos:

MOV AX,5

NEG AX ;AX=-5

NEG AX ;AX=5

Nuevamente hay que tener cuidado con los operadores indeterminados:

Ensamblador

6-116

Page 126: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

NEG [BX] ;¿Es byte o palabra?

NEG BYTE PTR [BX] ;byte

NEG WORD PTR [BX] ;palabra

6.7 El Mundo Externo: IN y OUT

La UPC pasa una gran parte del tiempo comunicándose con losdispositivos externos o atendiendo sus demandas por medio de las rutinas de interrupción. El ensamblador da el con trol de todos estos recursos alprogramador y permite funciones que en lenguajes de alto nivel es muydifícil o imposible realizar. Para ilustrar el punto supongamos quequeremos controlar con precisión la forma en que la bocina de nuestracomputadora per sonal emite sonidos (ampliaremos el concepto encapítulos subsecuentes).

Para poder controlar el mundo externo necesitamos introducir lasinstrucciones IN y OUT. Estas instrucciones son la única forma en que unlenguaje en ensamblador puede comunicarse con un puerto externo y sonmuy comunes en todos los circuitos de microcomputadoras.

6.7.1 La instrucción OUT

Esta instrucción envía un byte o una palabra a un puerto.

OUT Puerto, AL ;envía byte a puerto

OUT Puerto, AX ;envía palabra a puerto

El número de puerto puede ser enviado también al registro DX:

MOV DX,puertonum ;el número de puerto a DX

OUT DX,AL ;envía contenido de AL al puertoidentificado por DX

La instrucción no afecta ninguna bandera.

6.7.2 La instrucción IN

Al contrario de la instrucción OUT, IN recibe un byte o palabra de unpuerto externo:

IN Puerto, AL ;recibe byte de puerto y coloca en AL

IN Puerto, AX ;recibe palabra de puerto y coloca enAX

El número de puerto puede ser enviado también al registro DX:

MOV DX,puertonum ;el número de puerto a DX

Explorando el Ensamblador

6-117

Page 127: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

IN DX,AL ;recibe byte de puerto identificadopor DX y coloca en AL

La instrucción no afecta ninguna bandera.

Introduzcamos el siguiente programa desde DE BUG:

IN AL,61

AND AL,fc

XOR AL,2

OUT 61,AL

MOV CX,140

LOOP 10b

JMP 104

Asegúrese de las instrucciones con el comando U y an tes de ejecutarsalve el programa

-nsonido.com

-rbx

BX 0000

:

-rcx

CX 0000

:f

-w

Writ ing 000F bytes

El programa no puede interrumpirse una vez que se ejecuta pero esilustrativo de ciertos conceptos que redondean este capítulo. Nopodemos utilizar la instrucción de interrupción puesto que losdiseñadores no pensaron que fuese importante contar con una rutina deinterrupción para la bocina.

Comentemos ahora el programa:

bocina EQU 61h ;puerto que controla la bocina

quita EQU 0fch ;máscara para quitar bits 0 y 1

;el bit 0 controla un oscilador que queremos apagar y el bit 1 se conecta a unacompuerta

;que gen era el pulso que se envía a la bocina

alterna EQU 02h ;máscara para alternar bit 1

;y generar sonido pulsante

retraso EQU 140h ;retraso para poder escuchar el sonido

IN AL,bocina ;

Ensamblador

6-118

Page 128: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

AND AL,quita ;apaga oscilador y compuerta

sigue:

XOR AL,alterna ;apaga y prende la compuerta

OUT bocina,AL

MOV CX,retraso ;marca la frecuencia

repite:

LOOP repite ;pierde el tiempo

JMP sigue ;repite el proceso

Ejercicio 6.4 Introduzca el programa an te rior en MASM agregandotodas las pseudo instrucciones que vengan al caso.

Ejercicio 6.5 Varíe el retraso y comente sobre el resultado.

6.8 Resumen

Las interrupciones forman el trabajo prin ci pal y el cuello de botella de la UPC. El circuito de INTEL nos permite tener acceso a las mismas rutinasde interrupción diseñadas por los fabricantes del SO dandonos muchasventajas.

Los saltos dentro de un segmento de código de programa puedendividirese en incondicionales y condicionales y a su vez losincondicionales dependiendo el signo.

Las máscaras son patrones de bits que nos permiten eliminar ciertassecuencias de un byte que no nos interesan.

Las instrucciones de IN y OUT nos permiten tener acceso de formadirecta a los dispositivos externos.

6.9 Instrucciones Analizadas

INT, JMP, INC, LOOP, JCXZ, LOOPE, LOOPNE, CMP, JZ, JE, JNZ,JNE, JC, JNC, JS, JNS, JO, JNO, JNBE, JA, JNB, JAE, JBE, JNA, JB,JNAE, JG, JNLE, JGE, JNL, JNG, JLE, JNGE, JL, AND, OR, NOT,XOR, TEST, NEG, IN, OUT.

6.9 Problemas

6.1 Averigue algunas de las interrupciones prácticas dentro del sistemaoperativo MS-DOS.

Explorando el Ensamblador

6-119

Page 129: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

6.2 Utilice las interrupciones aprendidas en su ventaja modificando elprograma del ejercicio 6.1.

6.3 Modifique el programa del ejercicio 6.1 para que limpie la pantalla y luego coloque una cara sonriente en la mitad de la pantalla.

6.10 Bibliografía

Mercier Philippe Assembleur Fac ile. Marabout 1992, Alleur Bélgica.

Barden Wil liam Jr. How to Pro gram Mi cro com puters. Sams & Com -pany 1987.

Lafore Rob ert As sem bly Lan guage Primer for the IBM PC. The WaiteGroup 1992.

IBM Per sonal Com puter Tech ni cal Ref er ence.

Ensamblador

6-120

Page 130: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Capítulo 77.1 El Sistema Operativo

En todo sistema de cómputo existe una relación íntima en tre losprogramas en ensamblador y el sistema operativo (SO) que se ejecuta enla computadora. En los sistemas personales el sistema operativo re sideprincipalmente en el disco ya sea duro o flex i ble y recibe el nombre deDOS(Disk Op er ating Sys tem).

Como ya sabemos el propósito prin ci pal del SO es administrar a otrosprogramas, mantendiéndolos en áreas específicas de memoriasecundaria para su almacenamiento o en memoria prin ci pal para suejecución. Provee las funciones básicas de impresión, despliegue,almacenaje, etc. A todas estas funciones sólo se puede acceder en su nivel más bajo a través del lenguaje ensamblador.

En un principio la per sona que se debía entender con el SO debía tenerun íntimo conocimiento de la máquina. Por ejemplo, si se deseabaguardar un archivo en disco flex i ble, se debía sa ber al detalle dónde selocalizaba cada byte en el disco, el tiempo que tarda en dar unarevolución, cuanto tarda el mo tor de pasos en llegar a una pistadeterminada, etc. Como se puede imaginar, los programas se convertíanen programas muy lar gos y complejos. Si por cualquier causa cambiabanlos dispositivos, todo debía de ser reescrito.

Si el SO de todas formas debía de tener rutinas de manejo de todos losdispositivos conectados a la máquina. ¿Por qué no hacer las rutinas delSO accesibles a los otros programas? La idea detrás del SO cae dentro deesta pregunta. De esta forma si se desea escribir un carácter a la pantallano se debe sa ber ya nada del circuito que la controla sino únicamente la

7-121

Page 131: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

información de la rutina que lo puede hacer y cómo decirle qué queremoshacer. De esta forma, al llamar una rutina del SO, nuestra tarea seconvierte de una de extrema complejidad a una de moderada a pocadificultad.

Todas estas rutinas de con trol de periféricos residen en una memoriaROM que forma parte del BIOS de la computadora y a la que podemostener acceso de forma ilimitada.

Analizaremos a lo largo del capitulo diversas utilerías del BIOS que nosserán de utilidad posteriormente.

7.2 El Teclado

La rutina de interrupción que atiende al teclado es la 21h entrando con el registro AH en 1 y regresando en AL al carácter leído. El uso de las teclasCTRL y BREAK interrumpe la rutina.

Ejercicio 7.1 Introduzca los siguientes ejemplos usando DE BUG. Noolvide revisar el registro AL para ver el código ASCII de la tecla que sepresionó.

MOV AH,1

INT 21

INT 20

Se puede utilizar un salto incondicional para introducir una oracióncompleta:

MOV AH,1

INT 21

JMP 100

Mientras estamos en la rutina de interrupción del teclado podemosrevisar las funciones de edición que la rutina nos proporciona como es elborrado de caracteres, el empleo de teclas de con trol, etc.

Se puede obligar a la rutina del teclado a guardar la información en unamemoria intermedia. Para esto es necesario pasar como parámetro 0Ahen el registro AH y en los registros DS:DX la dirección de la memoriaintermedia de almacenaje (buffer) en cuyo primer byte debemos guardarel máximo número de caracteres a leer del teclado. La rutina nos regresaen el segundo byte de la memoria de almacenaje el número de caracteresleídos del teclado.

Ensamblador

7-122

Page 132: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Ejercicio 7.2 Introduzca y ejecute el siguiente programa en DE BUG:

MOV DX,109

MOV AH,a

INT 21

INT 20

DB 20

Ex am ine el resultado con la instrucción D.

Ejercicio 7.3 Convierta el programa del ejercicio 7.2 a MASMañadiendo las pseudo instrucciones requeridas. No olvide inicializar elregistro de segmento de datos (DS) con la dirección apropiada usandoSEG MENT.

7.3 La Pantalla

Para desplegar una serie de caracteres podemos utilizar la rutina 21hnuevamente pero ahora colocamos en el registro AH un 9 y en DS:DXcolocamos el inicio de la cadena a desplegar terminada por un signo depe sos ($).

Ejercicio 7.4 Introduzca el siguiente programa en DE BUG a partir de ladirección 0100.

MOV DX,109

MOV AH,9

INT 21

INT 20

DB ‘Ejemplo de cadena impresa$’

Ejercicio 7.5 Introduzca el programa del ejercicio 7.4 pero con laspseudo instrucciones requeridas para el ensamblador MASM. No seolvide de inicializar el segmento DS de donde se toma la dirección de lacadena a desplegar.

Unamos las funciones aprendidas para realizar un programa que hagaeco a la pantalla de lo que se teclea. Sabemos ya que para que la funciónde despliegue sepa donde termina la cadena ésta debe de finalizar con $por lo que en este sencillo programa nosotros debemos de introducirlo:

MOV DX,116

MOV AH,a

INT 21

El Mundo Exterior

7-123

Page 133: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

MOV DL,a

MOV AH,2

MOV DX,118

MOV AH,9

INT 21

INT 20

DB 30

El programa an te rior en MASM:

;Programa que acepta caracters del teclado y hace eco a la pantalla

;No olvide terminar la cadena de caracteres con $

teclado EQU 0Ah ;función del teclado

pantalla EQU 02h ;función de la pantalla

lf_cr EQU 0Ah ;alimentación de línea

muestra EQU 09h ;función de despliegue

dos EQU 21h ;Llamada del SO

fin EQU 20h ;Termina y vuelve al SO

;—————————————————————————————————————————————————

datos SEG MENT

memoria DB 20 ;20 bytes para memoria deteclado

; a partir de esta localidad

datos ENDS

;—————————————————————————————————————————————————

programa SEG MENT

AS SUME CS:programa ;informa a MASM dónde estamos

AS SUME DS:datos ;y dónde está el buffer

ORG 0100h ;fija el origen a dirección 100

inicio:

MOV DX,OFF SET memoria ;dirección de buffer

MOV AH,teclado

INT dos ;interrupciones varias

MOV DL,lf_cr ;agrega alimentación de línea

MOV AH,pantalla

INT dos ;interrupciones varias

MOV DX,OFF SET memoria+2 ;salta primeros 2 bytes debuffer de teclado

MOV AH,muestra ;despliegua en pantalla

INT dos

INT fin ;termina y regresa a SO

;—————————————————————————————————————————————————

programa ENDS

Ensamblador

7-124

Page 134: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

;******************************************************************

END inicio

Aparentemente más complicado pero mucho más fácil de entender ymantener.

7.4 La Impresora

Como para las funciones anteriores, esta vez usamos la interrupción21h, pero enviamos un 5 en el registro AH y en DL el carácter a imprimir.En el siguiente ejemplo mostramos una forma muy primitiva de enviaruna cadena a la impresora.

MOV DL,[122]

MOV AH,05

INT 21

MOV DL,[123]

MOV AH,05

INT 21

MOV DL,[124]

INT 21

MOV DL,[125]

MOV AH,05

INT 21

INT 20

DB ‘si’,0d,0a

Claro que una mejor versión es inmediata usando direccionamientoindirecto:

MOV CX,40

MOV BX,111

MOV DL,[BX]

MOV AH,05

INT 21

INC BX

LOOP 0106

INT 20

DB ‘Un mensaje a imprimir de 40 caracteres’,0d,0a

Que para el MASM queda:

;Programa para impresión de caracteres

imprime EQU 05h ;función de impresora

cuenta EQU 40 ;Lleva la cuenta de la cadenaa imprimir

El Mundo Exterior

7-125

Page 135: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

dos EQU 21h ;Llamada del SO

fin EQU 20h ;Termina y vuelve al SO

;—————————————————————————————————————————————————

datos SEG MENT

cadena DB ‘Mensaje de 40 caracteres’,0Dh,0Ah

datos ENDS

;—————————————————————————————————————————————————

programa SEG MENT

AS SUME CS:programa ;informa a MASM dónde estamos

AS SUME DS:datos ;y dónde están los datos

ORG 0100h ;fija el origen a dirección 100

inicio:

MOV CX,cuenta

MOV BX,OFF SET cadena ;dirección de mensaje

ciclo:

MOV DL,[BX] ;dirección carácter a imprimir

MOV AH,imprime

INT dos ;interrupciones varias

INC BX ;apunta a siguiente carácter

LOOP ciclo ;y vé a imprimirlo

INT fin ;termina y regresa a SO

;—————————————————————————————————————————————————

programa ENDS

;******************************************************************

END inicio

Presentamos a continuación un programa para mandar códigos de con -trol a la impresora:

MOV CX,2

MOV BX,0111

MOV DL,[BX]

MOV AH,05

INT 21

INC BX

LOOP 0106

INT 20

DB 1b,’E’

Ob serve que en la última línea definimos el carácter de con trol paramodo enfatizado de una impresora EPSON o com pat i ble y puede sersustituído por cualquier otro código.

Ensamblador

7-126

Page 136: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

7.5 Los Corrimientos y Operaciones Aritméticas

Comenzamos esta sección con un sencillo programa que convierte unnúmero en binario a dígitos hexadecimales en su equivalente ASCII y lodespliega en la pantalla. Integraremos finalmente el programa en unosólo que convierte de dec i mal a hex a dec i mal:

;Programa para convertir binario a hex a dec i mal (ASCII)

muestra EQU 02h ;función de despliegue

cuenta EQU 4 ;Lleva cuenta de # dígitos

mas cara EQU 0Fh ;Máscara 4 bits extremaderecha

ascii EQU 30h ;Equivalente de hex a dec i mala ASCII

nueve EQU 3Ah ;9 en ASCII

a_f EQU 7h ;Convierte dígito A-F enASCII

dos EQU 21h ;Llamada del SO

fin EQU 20h ;Termina y vuelve al SO

;—————————————————————————————————————————————————

programa SEG MENT ;inicio desegmento

AS SUME CS:programa ;informa a MASM dónde estamos

ORG 0100h ;fija el origen a dirección 100

inicio:

MOV CH,cuenta ;número de dígitos

rota: MOV CL,cuenta ;cuenta a 4 bits

ROL BX,CL ;desplaza dígito a la izq.

MOV AL,BL ;y pasa a reg. AL

AND AL,mas cara ;quita dígitos de la izq.

ADD AL,ascii ;convierte a ASCII

CMP AL,nueve ;¿Es mayor que 9?

JL despliega ;Despliega si ente 0 y 9

ADD AL,a_f ;el dígito está en tre A y F

despliega:

MOV DL,AL ;Coloca ASCII en DL

MOV AH,muestra ;Función de despliegue

INT dos ;Llama a DOS

DEC CH ;¿Terminamos con los 4 dígitos?

JNZ rota ;Si aún no se termina

INT fin ;Regresa a SO

;—————————————————————————————————————————————————

programa ENDS

El Mundo Exterior

7-127

Page 137: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

;******************************************************************

END inicio

Si el programa se ejecuta desde el sistema operativo no se obtendrá nada pues el registro BX (de donde se toman los datos) está vacío. Para ver suutilidad y comprender los nuevos conceptos es necesario ejecutarlodesde DE BUG y llenar el registro BX con el comando r.

Ejercicio 7.6 Ejecute el programa desde DE BUG dando varios valores a BX y observando el resultado.

An tes de explicar el funcionamiento de este programa introduzcamoslos corrimientos, rotaciones y las operaciones aritméticas:

7.5.1 Corrimientos y Rotaciones

Este tipo de instrucciones desplazan los bits de un byte o palabra hacia la izquierda o derecha. Estas son operaciones comunes para encuadrar unbyte con respecto a un valor o para eliminar los bits superfluos, algo sim i -lar a las máscaras en las operaciones lógicas como Y, O, etc.

Se dividen en tres grupos:

· Desplazamientos Aritméticos o corrimientos sin signo

· Desplazamientos Aritméticos o corrimientos con signo.

· Rotaciones

La UAL sólo es capaz de realizar un número básico y limitado deoperaciones:

· Complemento a unos (inversión de bits)

· Complemento a dos (negación)

· Suma

· Desplazamientos

· Rotaciones

· Operaciones Lógicas (Y, O, O Exclusiva)

Recordemos que si recorremos un registro en todos sus bits hacia laizquierda el equivalente es multiplicar por 2:

0000 0001 = 1 dec i mal

Ensamblador

7-128

Page 138: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

0000 0010 = 2 dec i mal (corrimiento de 1 bit)

0000 0100 = 4 dec i mal (corrimiento de 2 bits)

principio que funciona en cualquier base: 1d con un corrimiento de 2posiciones a la izquierda equivale a 100d o multiplicar 2 veces por labase.

De la misma forma un corrimiento hacia la derecha equivale a dividiren tre la base, en este caso 2:

0000 1000 = 8 dec i mal

0000 0100 = 4 dec i mal (corrimiento de 1 bits)

0000 0010 = 2 dec i mal (corrimiento de 2 bits)

pero ocurre un problema importante con los números que tienen signo:

0000 1000 = 8d —-> 1111 1000 (complemento a 2 1111 0111+1)

realizemos -8/2

0111 1100 = 124d en lugar de -4

Note que es importante en este caso inyectar a la izquierda el signo paraobtener el resultado correcto 1111 1100 = -4 para lo cual se usancorrimientos aritméticos con signo.

Todas las operaciones de corrimiento y rotaciones toman la forma

Mnemónico Registro,1

Mnemónico Memoria,1

Mnemónico Registro,CL

Mnemónico Memoria,CL

Donde Registro es un registro de 8 o 16 bits, Memoria es una localidadde memoria o una dirección y 1 es el valor inmediato de uno.

7.5.1.1 Corrimientos Lógicos (Rotaciones)

ROR destino,cuenta, Rota a la derecha byte o palabra pasando por elacarreo.

El Mundo Exterior

7-129

Page 139: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

RCR destino,cuenta, Rota a la derecha a través del acarreo byte opalabra

ROL destino,cuenta, Rota a la izquierda byte o palabra pasando poracarreo

RCL destino,cuenta, Rota a la izquierda a través del acarreo byte opalabra

7.5.1.2 Corrimientos Aritméticos

SHR destino,cuenta, Corrimiento lógico a la derecha de byte o palabrapasando por acarreo

SAR destino,cuenta, Corrimiento aritmético a la derecha de byte opalabra agregando el signo y pasando por acarreo

SHL/SAL destino,cuenta, Corrimiento a la izquierda de byte o palabrapasando por acarreo

Todos los corrimientos quedan ilustrados en la figura 7.1

Ensamblador

7-130

Page 140: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

7.5.2 Operaciones Aritméticas

Las operaciones aritméticas son realizadas sobre los registros y son de8, 16, o 32 bits que nos dan números en tre 0 y 65,535 en aritmética sinsigno.

El circuito es capaz de realizar sumas, restas, multiplicaciones ydivisiones pero estas dos últimas operaciones las realiza en base a sumaspor lo que son lentas, para sacar provecho de estas operaciones esnecesario tener otro circuito dedicado a las operaciones matemáticas quese llama coprocesador pues realiza el proceso en paralelo al procesadorprin ci pal.

7.5.2.1 Suma y Resta (ADD y SUB)

El Mundo Exterior

7-131

Figura 7.1 Corrimientos y rotaciones.

Page 141: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Las sumas y restas toman la forma de

Mnemónico Registro,Inmediato

Mnemónico Memoria,Inmediato

Mnemónico Registro,Memoria

Mnemónico Registro, Registro

Donde Registro es un registro de 8 o 16 bits, Memoria es una localidadde memoria o una dirección e Inmediato es un valor.

Si existe un desbordamiento, el bit del registro de banderas de acarreo es puesto en 1 lógico y las demás banderas (SF, CF, OF, ZF) se afectan deacuerdo al resultado.

Recuerde el caso de los números negativos y de que las operacionespueden ser con signo o sin signo lo que puede dar por resultado sorpresasindeseables. La resta se logra sumando el complemento a dos delsustraendo.

Existen las operaciones complementarias de suma (ADC) y resta (SBB)pero de doble precisión donde se agrega o quita el acarreo al resultado:

suma1 DD ? ;Número de 32 bits

suma2 DD ? ;Número de 32 bits

;Suma los primeros 16 bits

MOV AX,WORD PTR suma1 ;trabaja los primeros 16 bitsbajos

ADD AX,WORD PTR suma2 ;sumando los 16 bits bajos

;trabaja ahora los 16 bits al tos agregando el acarreo si existe

MOV DX,WORD PTR suma1+2 ;16 bits primeros al tos

ADC DX,WORD PTR suma2+2 ;suma siguientes 16 bits al tos

;agregando acarreo

7.5.2.2 Decrementos

Esta instrucción decrementa en 1 un registro o localidad de memoriadando por resultado una operación idéntica a la de la resta pero sin afectar la bandera de acarreo (CF) por lo que se debe poner atención si queremosrealizar un salto condicional que dependa de este indicador.

DEC Registro

DEC Memoria

7.5.2.3 Multiplicación y División

Ensamblador

7-132

Page 142: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

En el caso de la multiplicación (MUL) y división (DIV) tenemos algosim i lar a la suma y resta. Es necesario una operación para considerar elsigno en caso de requerirlo (IMUL, IDIV). Estas operaciones usanregistros específicos como se muestra en la figura 7.2.

En el caso específico de la división, es necesario prevenir, pues unadivisión en tre 0 o una cantidad muy pequeña gen era una interrupcióndefinida de antemano (al cargar el SO) que detiene el proceso gen eral delSO y por ende de la máquina.

La instrucción DIV no permite dividir un byte en tre un byte ni unapalabra en tre otra palabra por lo que hay que proceder como sigue:

;división en tre dos bytes

El Mundo Exterior

7-133

Figura 7.2 Multiplicación y división.

Page 143: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

MOV AL,dividendo ;en AL el dividendo

CBW ;Convierte un byte en palabra (AH=0)

MOV BL,di vi sor ;en BL el di vi sor

DIV BL ;división de una palabra en tre un byte

;división en tre dos palabras

MOV AX,dividendo ;en AX el dividendo

CWD ;Convierte palabra en doble palabra(DX,AX)

MOV BX,di vi sor ;en BX el di vi sor

DIV BX ;división de una doble palabra en treuna palabra

Para este punto debe de quedar claro el funcionamiento del programaintroducido en la sección an te rior e introducimos el siguientecomplemento que conviete de un número dec i mal tomado del teclado aun binario en el registro BX.

;Convierte Dec i mal del teclado a binario, el resultado se queda en BX

decbin SEG MENT

AS SUME CS:decbin

MOV BX,0 ;Limpia registro BX

otro:

MOV AH,1 ;entrada del teclado

INT 21h ;llama a DOS

SUB AL,30h ;ASCII a binario

JL sale ;Salir si el #<0

CMP al,9d ;¿Es > a 9?

JG sale ;Si es así, no es dígito

CBW ;Convierte byte en AL a palabra enAX

;Multiplica número en BX por 10

XCHG AX,BX ;Cambia registros AX y BX

MOV CX,10d ;Coloca 10 en CX

MUL CX ;y multiplica por AX (AX*10)

XCHG AX,BX ;Regresa # a BX

;Suma número en AX por el de BX

ADD BX,AX ;suma dígito a #

JMP otro ; y ve por otro

sale:

INT 20h ;Regresa a SO

decbin ENDS

END

Ejercicio 7.7 Introduzca el programa an te rior en MASM y ejecute desde DE BUG para observar el resultado en el registro BX. Use la instrucción

Ensamblador

7-134

Page 144: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

T (trace) para seguir el flujo del programa paso a paso y anotar el estadode los registros que nos interesan tal como AX, BX y CX. Tendremos unproblema al llegar a la instrucción INT pues nunca regresaremos alprograma orig i nal, por lo que debemos sustituir la instrucción por unanueva que no hace nada: NOP. Esta instrucción ocupa un sólo byte por loque en este caso debemos usar 2 para sustituir a INT que ocupa 2 bytes.

El programa DE BUG utiliza la siguiente simbología para las banderas:

Tab la 7.1 Simbología de DE BUG para las banderas

Bandera En uno lógico En cero lógico

OF, saturación OV NV

DF, dirección DN UP

IF, habilita interrupciones EI DI

SF, signo NG PL

ZF, cero ZR NZ

AF, acarreo auxiliar AC NA

PF, pariedad PE PO

CF, acarreo CY NC

Ejercicio 7.8 Ejecute el programa DECBIN an te rior pero ahorainterrumpimos el flujo del mismo an tes de ejecutar la última instrucciónpara poder analizar el registro BX. Para esto utilizamos el comando deDE BUG g pero seguido de una dirección lo que hace que se introduzcauna pausa en lugares determinados (hasta 10). En nuestro caso el puntoan tes de la interrupción 20h es 11b: g 11b.

7.6 Procedimientos o Subrutinas

En muchos casos se requiere, por orden, dividir el programa ensegmentos lógicos independientes uno de otro pero a la vez que estossegmentos estén disponibles para su uso por otros segmentos delprograma. Se resuelve esto, al igual que en los lenguajes de alto nivel, con los procedimientos o subrutinas que pueden ser llamados desde cualquier parte de un programa.

En el lenguaje ensamblador se de fine el inicio de una sección de unprograma con la pseudo instrucción PROC y su fi nal con la pseudoinstrucción ENDP. Los procedimientos pueden ser cortos o lejanosdependiendo de si se encuentran o no en el mismo segmento y se requierede especificar en la instrucción con qué tipo estamos tratando:

El Mundo Exterior

7-135

Page 145: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

nombre PROC NEAR ;si se trata de uno en el mismosegmento

nombre PROC FAR ;si se trata de uno en otro segmento

El nombre es el identificador del procedimiento con el cual haremosreferencia posteriormente a esta subrutina.

Para llamar a la subrutina o procedimiento se utiliza la instrucciónCALL (llama) seguida de la dirección o identificador. La instrucciónforza a que el procesador guarde la dirección de la siguiente instrucciónque sigue a la de la llamada en un área es pe cial de datos llamada la pilaque analizaremos en el siguiente capítulo a fondo.

Si es una llamada corta o cercana, sólo se guarda el registro IP, si se tratade una llamada lejana, es necesario guardar tanto CS como IP. No esafectada ninguna badera por esta instrucción.

Todo procedimiento debe de terminar con la instrucción RET para queel ensamblador sepa que termina la subrutina y debe regresa al programaque la llamó. Esto implica devolver el valor del apuntador de programaan te rior sacándolo de la pila. Una vez más si es una llamda corta, tomauna palabra de la pila y la restituye en IP, si es una llamada lejana, tomados palabras de la pila, la primera para IP y la segunda para CS.

La instrucción RET puede tener un parámetro auxiliar para ajustar eltamaño de la pila al regresar. Analizaremos esto en detalle en el siguientecapítulo.

Finalmente integramos los dos programas ya vistos en uno gen eral queconvierte un número dec i mal a hex a dec i mal directamente del teclado:

;Convierte Dec i mal a Hex a dec i mal (DECHEX)

;(máximo de 65535d)

dechex SEG MENT

AS SUME CS:dechex

;Parte prin ci pal del programa que une a los otros 2

repite: CALL decbin ;Del teclado (base 10) abinario

CALL crlf ;Agrega nueva línea

CALL binhex ;binario a hex a dec i mal ydespliega

CALL crlf ;Agrega nueva línea

JMP repite ;Vuelve a repetir

;—————————————————————————————————————————————————

Ensamblador

7-136

Page 146: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

;Convierte Dec i mal del teclado a binario, el resultado se queda en BX

decbin PROC NEAR

MOV BX,0 ;Limpia registro BX

otro:

MOV AH,1

INT 21h

SUB AL,30h ;ASCII a binario

JL sale ;Salir si el #<0

CMP al,9d ;¿Es > a 9?

JG sale ;Si es así, no es dígito

CBW ;Convierte byte en AL a palabra enAX

;Multiplica número en BX por 10

XCHG AX,BX ;Cambia registros AX y BX

MOV CX,10d ;Coloca 10 en CX

MUL CX ;y multiplica por AX (AX*10)

XCHG AX,BX ;Regresa # a BX

;Suma número en AX por el de BX

ADD BX,AX ;suma dígito a #

JMP otro ; y vé por otro

sale:

RET

decbin ENDP

;—————————————————————————————————————————————————

;Convierte número binario en BX a hex a dec i mal y despliega

binhex PROC NEAR

MOV CH,4 ;número de dígitos

rota: MOV CL,4 ;cuenta a 4 bits

ROL BX,CL ;desplaza dígito a la izq.

MOV AL,BL ;y pasa a reg. AL

AND AL,0Fh ;quita dígitos de la izq.

ADD AL,30h ;convierte a ASCII

CMP AL,3Ah ;¿Es mayor que 9?

JL despliega ;Despliega si ente 0 y 9

ADD AL,7h ;el dígito está en tre A y F

despliega:

MOV DL,AL ;Coloca ASCII en DL

MOV AH,2h ;Función de despliegue

INT 21h ;Llama a DOS

DEC CH ;¿Terminamos con los 4 dígitos?

JNZ rota ;Si aún no se termina

RET ;Regresa

binhex ENDP

El Mundo Exterior

7-137

Page 147: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

;—————————————————————————————————————————————————

;Despliega una nueva línea

crlf PROC NEAR

MOV DL,0Dh ;CR

MOV AH,2 ;función de despliegue

INT 21h ;llamada a DOS

MOV DL,0Ah ;LF

MOV AH,2 ;función de despliegue

INT 21h ;llamada a DOS

RET ;regresa de crlf

crlf ENDP

;******************************************************************

dechex ENDS

END

Introduzca el programa an te rior en MASM y pruebe con variosnúmeros. Para finalizar interrumpa presionando la tecla de CTRL y C almismo tiempo.

Ejercicio 7.9 Introduzca la pseudo instrucción PAGE como primerainstrucción del programa y ensamble pero ahora usando el comando

MASM dechex, , lpt1:, dechex

Asegúrese de tener la impresora prendida y con papel pues el resultadose pasará directamente a la impresora. Así mismo hemos creado unareferencia cruzada en un archivo de nombre DECHEX.REF que nos in -dica dónde se definieron todas las vari ables (con el signo #) y dónde sonutilizadas todas ellas.

7.7 Resumen

Se analizan en este capítulo distintas formas de aprovecharnos de lasinterrupciones de los diseñadores del SO en nuestro beneficio. Seintroducen conceptos de procedimientos y la forma de accesar dejandopara el siguiente capítulo la forma idónea de pasar parámetros a lassubrutinas.

Ensamblador

7-138

Page 148: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

7.8 Instrucciones Analizadas

INT 20 (AH=9h, AH=0Ah, AH=5h), ROR, RCR, ROL, RCL, SHR,SAR, SHL, SAL, ADD, SUB, ADC, SBB, MUL, DIV, IMUL, IDIV,NOP, RET, CALL y las pseudo instrucciones PROC NEAR, PROC FAR,ENDP, PAGE.

7.9 Problemas

7.1 Analice el programa de conversión de dec i mal a hex a dec i mal en loreferente a las instrucciones de corrimiento.

7.2 Realice un código como subrutina en el que se le pasan comoparámetro la fecha en el registro AX dividida en día, mes, año de lasiguiente forma:

El día de 1 a 31 (5 bits)

El mes de 1 a 12 (4 bits)

El año en 7 bits y al que se le suma 1995 siempre

Al recibir la llamada, la subrutina regresa el día en ASCII en el registroBX, el mes en ASCII en el registro AX y el año en ASCII en CX y DX. Elprograma prin ci pal lo despliega en la pantalla o imprime.

7.10 Bibliografía

Mercier Philippe Assembleur Fac ile. Marabout 1992, Alleur Bélgica.

Mor gan Chris to pher Blue book of As sem bly Lan guages Rou tines for theIBM. Olume Waite, New York 1984.

Lafore Rob ert As sem bly Lan guage Primer for the IBM PC. The WaiteGroup 1992.

IBM Per sonal Com puter Tech ni cal Ref er ence.

El Mundo Exterior

7-139

Page 149: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Capítulo 88.1 La pila

En los primeros diseños de microcomputadoras surgía el problema deque al atender las interrupciones generadas por los distintos dispositivosse requería preservar el contenido de varios registros en algún lugar.Algunos diseñadores tomaron el camino de dejar al programador la tareade reservar un área de memoria para tal fin y de asegurar que los registrosfueran restaurados an tes de volver al programa prin ci pal. Otros seaseguraron de que esto sucediera siempre al incorporar una serie deregistros paralelos donde se guardaba automáticamente el contenido detodos los registros de la UPC.

Pronto se vio que la primera opción, con algunas variantes, era elcamino adecuado y el más conveniente para proporcionar toda laflexibilidad al programador y dejar que él decida cuándo y cómo debenguardarse los datos requeridos. Esto da gran libertad pero a la vezcomplica las cosas al tener que ser extremadamente cuidadoso con elmanejo de esta área reservada de memoria llamada pila.

Para poder implementar el uso de pilas, es requisito in dis pens ableagregar nuevos registros o utilizar los ya existentes de forma quepermitan el con trol de dicha pila. En el circuito de Intel, el manejo depilas se logra a través del registro SS (stack seg ment o segmento de pila)junto con SP (stack pointer o apuntador de fin de pila) y BP (base pointer o apuntador base de pila).

El uso de subprogramas plantea también la necesidad de pasarparámetros a estas subrutinas o procedimientos. Los tres métodospreferidos son:

8-141

Page 150: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

· En los registros. Limitado a unas cuantas variables.

· Por medio de variables. Mejor que el anterior, pero se requiere dela definición estricta de muchas variables o el uso de archivos dealmacenamiento externos creciendo mucho el programa. Usadocuando se requieren un gran número de variables.

· Usando la pila. Es el método preferido y el más utilizado cuandolas variables van de pocas a regular en cantidad.

La pila es usada en las microcomputadoras modernas para guardar elapuntador de memoria al llamar una rutina de interrupción (INT ointerrupción externa) o un procedimiento del usuario (CALL). Sabemosya que se necesitan de por lo menos 16 bits pues se requiere guardar IP encaso de una llamada cercana o CS e IP en el caso de una lejana.

8.1.1 Manejo de la Pila

Para el manejo de pila se usan las instrucciones PUSH que empujavalores de un registro o localidad de memoria a la pila y POP que sacavalores de la pila restituyéndolos en un registro o localidad de memoria.La pila en este circuito es una pila del tipo FIFO (first in first out), es decir,el primero que entra es el primero que sale (PEPS).

Un ejemplo de un programa completo donde se requiere utilizar la pilapara guardar el contador que a su vez es utilizado en otra subrutinailustrará el punto:

;Sonido de Mo tor de Automóvil

ruido SEG MENT

prin ci pal PROC FAR

AS SUME CS:ruido

ORG 100h ;De fine inicio de programa

inicio:

MOV CX,10d ;número de repeticiones

otro: PUSH CX ;guarda la cuenta en la pila

CALL disparo ;Sonido de disparo

CALL silencio ;Y guarda silencio

POP CX ;Recupera el contador de

;disparos de la pila

LOOP otro ;repite hasta terminar

INT 21h ;Regresa a DOS

prin ci pal ENDP ;fin programa prin ci pal

;—————————————————————————————————————————————————

Ensamblador

8-142

Page 151: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

;Subrutina para hacer un sonido breve

disparo PROC NEAR

MOV DX,140h ;valor inicial de la espera

MOV BX,3Fh ;cuenta inicial

IN AL,61h ;lee el puerto de sonido

AND AL,11111100b ;quita bits 0 y 1

sonido: XOR AL,2 ;Cambia bit 1 de AL

OUT 61h,AL ;Salida a puerto de sonido

;———————————————————————————————————————————-

; Gen era número aleatorio

ADD DX,9248h ;Suma de patrón pseudo aleatorio

MOV CL,3 ;Prepara a rotar 3 bits

ROR DX,CL ;Rota 3 bits

MOV CX,DX ;Coloca en CX

espera: LOOP espera ;ciclo de espera

;

DEC BX ;¿fué suficiente?

JNZ sonido ;Salta si aún no se acaba

AND AL,11111100b ;Quita bits 0 y 1

OUT 61h,AL ;Manda al puerto de sonido

RET ;Regresa de la subrutina

disparo ENDP

;—————————————————————————————————————————————————

;Retraso ligero (aumentar o disminuir según modelo)

silencio PROC NEAR

MOV CX,0FFFFh ;cuenta de silencio

repite: LOOP repite

MOV CX,0FFFFh ;cuenta de silencio

repite1: LOOP repite1

RET ;Regresa

silencio ENDP

;******************************************************************

ruido ENDS ;fin de código

END inicio ;fin de ensamble

Para comprender el funcionamiento de la pila, ejemplificaremosanalizando la pila con una llamada a una subrutina donde se pasan losparámetros en la pila.

;pasa a la pila los parámetros

PUSH DS

PUSH DX

CALL rutina

La Pila

8-143

Page 152: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

En este punto recalquemos que la cima de la pila se encuentra en dondeesté la última dirección del último byte empujado a la pila. En elmomento que el procedimiento “rutina” recibe el con trol la pila seencuentra en el siguiente estado:

100

98 valor de DS

96 valor de DX

94 valor de CS

92 SPÄ valor de IP îcima de la pila

El subprograma no podrá leer los datos de DS y DX que nos interesanpues el procesador empuja automáticamente los valores de CS e IP (eneste caso de una llamada lejana) hacia la pila. Es menester entonces, elajustar el apuntador de la pila BP para que apunte al área de interéssiguiendo los siguientes pasos:

· 1. Salvar el valor actual de BP en la pila (PUSH BP).

· 2. Inicializar BP al mismo valor que SP (MOV BP,SP).

100

98 valor de DS îBP+8

96 valor de DX îBP+6

94 valor de CS îBP+4

92 valor de IP îBP+2

90 SPÄ valor de BP îBP

Los parámetros están disponibles ahora con un sim ple ajuste delapuntador.

MOV AX,[BP+6] ;mueve el valor de DX a AX

MOV BX,[BP+8] ;mueve el valor de DS a BX

Cuando el subprograma termine, deberá informar al procesador pormedio de la instrucción RET n que se ajuste la pila de acuerdo a losmovimientos realizados de forma tal que pueda recuperar CS e IP paravolver al punto de ejecución an te rior, siendo n el número de bytes aajustar. Ilustramos este último punto con un ejemplo completo paso apaso.

Contamos con una pila inicial de 50 elementos (100 bytes) definidos enla sección de pila del programa. Las cifras a la izquierda son los

Ensamblador

8-144

Page 153: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

desplazamientos dentro del segmento SS definido también al inicio delprograma así como los valores de SP y BP que coinciden:

SPÄ îcima de la pila

98 BPÄ .....

96 .....

94 .....

92 .....

El programa requiere del uso pos te rior de CX por lo que se empuja a lapila:

PUSH CX

98 BP,SPÄ valor de CX îcima de la pila

96 .....

94 .....

.....

Si empujamos también el valor de DS (PUSH DS) tendremos:

98 BPÄ valor de CX

96 SPÄ valor de DS îcima de la pila

94 .....

92 .....

El programa x llama en este punto al subprograma y pasando losparámetros BX y DX en la pila:

PUSH BX

PUSH DX

CALL y ;llama a subrutina lejana y

98 BPÄ valor de CX

96 valor de DS

94 valor de BX

92 valor de DX

90 CS de x

88 SPÄ IP de x îcima de la pila

La Pila

8-145

Page 154: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

En este punto el programa y tiene el con trol y requiere del registro BP (esla regla gen eral de uso de la pila). No hay forma de sa ber si el programaan te rior usa o no BP por lo que también es regla gen eral guardarlo en lapila y comenzar a usarlo desde ese momento:

PUSH BP ;salva registro BP

MOV BP,SP ;BP recibe el valor de SP

Lo que nos deja con la pila en el siguiente estado:

98 valor de CX

96 valor de DS

94 valor de BX (parámetro 1)

92 valor de DX (parámetro 2)

90 CS de x

88 IP de x

86 BP,SPÄ BP de x

Desde este momento podemos consultar entonces los parámetros de lapila que se requieren y se encuentran en BP+8 (parámetro 1) y BP+6

(parámetro 2) puesto que todos los elementos de la pila requieren de 2bytes.

La subrutina y puede usar la pila para salvaguardar los valores querequiere más tarde para su uso. Si se requiere usar algún registro, primerose empuja a la pila para asegurarse de que el programa que llama nopierda sus registros de trabajo. Supongamos en este momento que sellama a la subrutina z pasándole los parámetros AX y BX:

PUSH AX ;guarda registro de subrutina x

PUSH BX ;guarda registro de subrutina x

MOV AX,1 ;inicializa valor para subrutina z

MOV BX,1 ;inicializa valor para subrutina z

PUSH AX ;guarda registro en la pila

PUSH BX ;guarda registro en la pila

CALL z ;llama subrutina lejana z

Las primeras instrucciones de la subrutina z serán para ajustar la pila yasegurarse el acceso a ella:

PUSH BP ;Guarda registro BP

MOV BP,SP ;inicializa pila para subrutina z

Ensamblador

8-146

Page 155: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Con lo que tenemos en la pila:

98 valor de CX

96 valor de DS

94 valor de BX (parámetro 1)

92 valor de DX (parámetro 2)

90 CS de x

88 IP de x

86 BP de x

84 valor de AX (salvado por y)

82 valor de BX (salvado por y)

80 Parámetro 1 (transmitido por y)

78 Parámetro 2 (transmitido por y)

76 CS de y

74 IP de y

72 BP,SPÄ BP de y (salvado por z)

La subrutina z puede a su vez consultar los parámetros 1 y 2 que mandala subrutina y (BP+6 y BP+8) y al regresar debe sacar el valor de BP de lapila (POP BP) para asegurar el comportamiento de la misma:

98 valor de CX

96 valor de DS

94 valor de BX (parámetro 1)

92 valor de DX (parámetro 2)

90 CS de x

88 IP de x

86 BPÄ BP de x

84 valor de AX (salvado por y)

82 valor de BX (salvado por y)

80 Parámetro 1 (transmitido por y)

78 Parámetro 2 (transmitido por y)

76 CS de y

74 SPÄ IP de y

72 BP de y (salvado por z)

En este momento la subrutina z informa al procesador que ya terminó sutarea (RET) y éste toma los valores de la parte alta de la pila (en SP y SP+2)y reinicializa CS e IP lo que regresa el con trol a la subrutina y. Existe otraforma de la instrucción RET: RET n (ya mencionada) en la que se ajusta lapila por medio del registro SP agregándole un valor n (entero). El valor den es conocido en el momento de la programación pues sabemos elnúmero de parámetros pasados a la subrutina. Podemos entonces deducirel número de parámetros de la pila y colocar el valor correcto de n. En este

La Pila

8-147

Page 156: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

caso el valor es 4 pues se pasaron 2 parámetros y cada uno ocupa 2 bytes(2*2 bytes = 2 parámetros)

RET ;regresa sin ajuste de la pila

98 valor de CX

96 valor de DS

94 valor de BX (parámetro 1)

92 valor de DX (parámetro 2)

90 CS de x

88 IP de x

86 BPÄ BP de x

84 valor de AX (salvado por y)

82 valor de BX (salvado por y)

80 Parámetro 1 (transmitido por y)

78 SPÄ Parámetro 2 (transmitido por y)

76 CS de y

74 IP de y

72 BP de y (salvado por z)

RET 4 ;regresa con ajuste de la pila en 4bytes

98 valor de CX

96 valor de DS

94 valor de BX (parámetro 1)

92 valor de DX (parámetro 2)

90 CS de x

88 IP de x

86 BPÄ BP de x

84 valor de AX (salvado por y)

82 SPÄ valor de BX (salvado por y)

80 Parámetro 1 (transmitido por y)

78 Parámetro 2 (transmitido por y)

76 CS de y

74 IP de y

72 BP de y (salvado por z)

En este punto la subrutina y recupera los valores empujados en la pila enorden inverso del almacenaje an tes de volver a la rutina que llama (x).

Ensamblador

8-148

Page 157: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

POP BX

POP AX

POP BP

y regresa ajustando a su vez la pila en 4 unidades (2 parámetros):

RET 4

98 BPÄ valor de CX

96 SPÄ valor de DS

94 valor de BX (parámetro 1)

92 valor de DX (parámetro 2)

90 CS de x

88 IP de x

86 BP de x

84 valor de AX (salvado por y)

82 valor de BX (salvado por y)

80 Parámetro 1 (transmitido por y)

78 Parámetro 2 (transmitido por y)

76 CS de y

74 IP de y

72 BP de y (salvado por z)

A su vez la rutina x recupera sus valores empujados en la pila:

POP DS

POP CX

y la pila vuelve a su estado inicial (en lo que respecta a los apuntadores):

SPÄ

98 BPÄ valor de CX

96 valor de DS

94 valor de BX (parámetro 1)

92 valor de DX (parámetro 2)

90 CS de x

88 IP de x

86 BP de x

84 valor de AX (salvado por y)

82 valor de BX (salvado por y)

80 Parámetro 1 (transmitido por y)

78 Parámetro 2 (transmitido por y)

76 CS de y

74 IP de y

72 BP de y (salvado por z)

La Pila

8-149

Page 158: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Como conclusión es un buen hábito colocar en la pila los registros odatos que serán utilizados por algún subprograma an tes de llamarlo y unavez que termina la llamada, ajustar la pila y recuperar los valores de lapila:

prueba PROC NEAR

PUSH AX ;tanto AX como

PUSH BX ;BX serán utilizados

.... ;instrucciones del subprograma

POP BX ;recupera los valores

POP AX ;de AX y BX de la pila

RET

prueba ENDP

Se aconseja también especificar al inicio del subprograma por medio decomentarios cuáles son los registros que se pasan como parámetros ycuáles serán eventualmente destruidos:

Lee PROC NEAR

;Leer un carácter del teclado

;regresa el AL el código ASCII

;destruye AL al llamarse

MOV AH,1 ;servicio de lectura de teclado

INT 21h ;lee un carácter

RET

lee ENDP

8.1.2 Guardando las Banderas

Existen dos instrucciones especiales para colocar las banderas en lapila, una la opuesta de la otra: POPF y PUSHF. Estas instrucciones nocontienen ningún operando.

Se puede usar esta instrucción cuando se requiere de realizaroperaciones intermedias an tes de utilizar un salto condicional o cualquier otra operación que utilice las banderas para operar:

PUSHF ;Guarda las banderas

MOV AX,2

ADD AX,3 ;operación que modifica banderas

POPF ;recupera las banderas

Ensamblador

8-150

Page 159: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

8.2 Manejo de Cadenas

En la mayoría de las aplicaciones informáticas, el tratamiento decadenas de caracteres es particularmente importante. Es tan común quelos procesadores modernos integran una serie de instrucciones pararealizar estas operaciones de forma eficiente.

Las operaciones de cadenas pueden ser utilizadas para otrasoperaciones para las cuales no fueron planeadas pero son muy eficientescomo es el caso de mover páginas completas de texto o imágenes a lamemoria de donde el controlador de video toma su información paradesplegar en la pantalla.

En este tipo de operaciones intervienen dos operandos en distintas áreasde memoria:

· 1. Cadena Fuente. Siempre en un segmento apuntado por DS yusando como apuntador a la cadena el registro SI (Source Index).

· 2. Cadena Destino. Siempre en un segmento apuntado por ES yusando como apuntador a la cadena el registro DI (DestinationIndex).

Las operaciones se realizan carácter a carácter y es posible realizarlascon otras operaciones que ya conocemos aunque de forma un poco torpee ineficiente:

Texto1: DB ‘Un texto cualquiera’

Texto2: DB ‘Otro texto’

Texto3: DB 20 DUP(?) ;zona de 20 caracteres

;inicialización

PUSH DS

POP ES ;ESîDS

MOV SI,OFF SET texto1 ;SIîdirección del texto1

MOV DI,OFF SET texto2 ;DIîdirección del texto2

;Estamos listo a comparar las dos cadenas

MOV AL,[SI] ;ALî‘U’ de “Un text...”

MOV AH,[DI] ;AHî‘O’ de “Otro te...”

CMP AH,AL ;Compara las cadenas

;aquí la lógica de las comparaciones

;

La Pila

8-151

Page 160: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

;Transferir de un área a otra:

MOV SI,OFF SET texto2 ;SIîdirección del texto2

MOV DI,OFF SET texto3 ;DIîdirección del texto3

MOV AL,[SI]

MOV [DI],AL

;aquí la lógica que controla los contadores, el inicio, el fin, etc.

8.2.1 La Instrucción REP

El modificador REP (de RE Peat, repite) causa que la instrucciónsiguiente sea repetida hasta que el registro CX sea cero. REP se usa con ungrupo de tres instrucciones: MOVS (Move String, mueve cadena), SCAS

(Scan String, busca cadena) y CMPS (Com pare String, compara cadena).Las banderas afectadas dependen de la operación.

Para que este comando funcione, debemos colocar de antemano elnúmero de repeticiones en el registro CX para lo cual en tre muchas otrasposibilidades, podemos utilizar una pseudo instrucción del ensamblador:

texto DB ‘Una cadena de longitud x’

largo EQU $-texto ;calcula longitud de ‘texto’

MOV CX,largo ;en CX la longitud de la cadena

8.2.2 La Dirección de la Operación (CLD y STD)

El resultado de las operaciones de cadenas es manipular dos de ellas deforma que una resida en el segmento DS:SI y la otra en ES:DI. Existen dosposibilidades para ajustar el contador de forma que comience por elprincipio de la cadena o por el fi nal. La instrucción CLD (Clear Di rec tionFlag, Limpia bandera de dirección) in dica al procesador que los registrosSI y DI serán incrementados después de cada instrucción de manejo decadenas mientras que la instrucción STD (Set Di rec tion Flag, Fijabandera de dirección) in dica que los dos registros serán decrementados.

8.2.3 Mover Cadenas (MOVSB y MOVSW)

La instrucción MOVS se usa después de la instrucción REP y mueve unacadena de una localidad a otra de la memoria. La cadena fuente esapuntada por SI y re side en el segmento DS, mientras que el destino esapuntado por DI y re side en el segmento ex tra (ES).

Ensamblador

8-152

Page 161: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Cada vez que la instrucción MOVS se ejecuta suceden 3 cosas:

· 1. SI es incrementado (o decrementado dependiendo de labandera de dirección) ya sea en uno o dos bytes dependiendo si estransferencia de palabra o byte.

· 2. DI se incrementa (o decrementa dependiendo de la bandera dedirección) ya sea en uno o dos bytes dependiendo si estransferencia de palabra o byte.

· 3. CX es decrementado. Si llega a cero la transferencia termina.

En esta operación no se modifica ninguna bandera.

Mostramos un pedazo de código que mueve 40 letras “x” de su área dememoria fuente a su memoria destino. No es un programa completo peroes ilustrativo.

;***************************************************

datos SEG MENT

fuente DB 40 DUP(‘x’)

datos ENDS

;***************************************************

ex tra SEG MENT

destino DB 40 DUP(?)

ex tra ENDS

;***************************************************

AS SUME DS:datos

AS SUME ES:ex tra

MOV AX,datos ;dirección del segmento fuente

MOV DS,AX ;en registro DS

MOV AX,ex tra ;dirección del segmento destino

MOV ES,AX ;en registro ES

MOV SI,OFF SET fuente ;dirección de la fuente

MOV DI,OFF SET destino ;dirección del destino

CLD ;bandera de dirección hacia adelante

MOV CX,40 ;cuenta en CX

REP MOVS ;Mueve toda la cadena

Como se ve en el ejemplo an te rior hay muchos registros que inicializar,pero una vez que se logra esto, el trabajo es sencillo y lleva 2instrucciones escritas en una sola línea (la última).

Ejercicio 8.1 Com plete el programa an te rior con todas las instrucciones y pseudo instrucciones faltantes y ejecute.

La Pila

8-153

Page 162: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

La instrucción REP MOVS reemplaza al siguiente grupo de instruccionesrepetidas CX veces:

MOV AL,DS:[SI]

MOV ES:[DI],AL

INC SI

INC DI

8.2.4 REPE ó REPZ y REPNE ó REPNZ

Estas instrucciones se utilizan sólo junto con las operaciones decomparación y búsqueda de cadenas (siguientes dos secciones) y señalanla terminación de dichas operaciones cuando el registro CX llega a cero ose localiza la cadena.

REPE (Repite while equal, repite mientras igual) repite la operaciónCMPS o SCAS mientras CX sea distinto de cero o el resultado de unacomparación cause que la bandera de cero sea limpiada (no cero) comoresultado que dos palabras o bytes no sean iguales. Las banderasafectadas dependen de la operación y el resultado de ésta.

REPNE (Repite while not equal, repite mientras no igual) repite laoperación CMPS o SCAS mientras CX sea distinto de cero o el resultado deuna comparación cause que la bandera de cero sea fijada (cero) comoresultado de que dos palabras o bytes sean iguales. Las banderasafectadas dependen de la operación y el resultado de ésta.

8.2.5 Compara Cadenas (CMPSB y CMPSW)

La instrucción CMPS se usa después de la instrucción REPE o REPNE ycompara una cadena de una localidad a otra de la memoria. La cadenafuente es apuntada por SI y re side en el segmento DS, mientras que eldestino es apuntado por DI y re side en el segmento ex tra (ES).

Cada vez que la instrucción CMPS se ejecuta suceden 3 cosas:

· 1. SI es incrementado (o decrementado dependiendo de labandera de dirección) ya sea en uno o dos bytes dependiendo si estransferencia de palabra o byte.

Ensamblador

8-154

Page 163: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

· 2. DI se incrementa (o decrementa dependiendo de la bandera dedirección) ya sea en uno o dos bytes dependiendo si estransferencia de palabra o byte.

· 3. CX es decrementado. Si llega a cero la transferencia termina o:

A. REPE. Si la cadena fuente es distinta de la destino.

B. REPNE. Si la cadena fuente es igual a la destino.

En esta operación se modifican las banderas de acuerdo a lacomparación realizada (AF, CF, OF, PF, SF, ZF).

La instrucción REPE CMPS reemplaza al siguiente grupo deinstrucciones repetidas CX veces:

otro:

MOV AL,DS:[SI]

MOV AH,ES:[DI]

CMP AL,AH

JPZ salta

INC SI

INC DI

JMP otro

salta:

8.2.6 Busca Carácter (SCASB y SCASW)

La instrucción SCAS se usa después de la instrucción REPE o REPNE ycompara una cadena de una localidad al registro AL (en caso de byte o AX

en caso de palabra). La cadena fuente es apuntada por DI y re side en elsegmento ex tra (ES).

Se usa esta instrucción para buscar un carácter dentro de una cadena.Cada vez que la instrucción SCAS se ejecuta suceden 2 cosas:

· 1. DI se incrementa (o decrementa dependiendo de la bandera dedirección) ya sea en uno o dos bytes dependiendo si estransferencia de palabra o byte.

· 2. CX es decrementado. Si llega a cero la transferencia termina o:

– A. REPE. Si la cadena fuente es distinta al contenido deAL (o AX).

La Pila

8-155

Page 164: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

– B. REPNE. Si la cadena fuente es igual al contenido delregistro AL (o AX).

En esta operación se modifican las banderas de acuerdo a lacomparación realizada (AF, CF, OF, PF, SF, ZF).

La instrucción REPE SCAS reemplaza al siguiente grupo de instrucciones repetidas CX veces:

otro:

MOV BL,ES:[DI]

CMP AL,BL

JPZ salta

INC DI

JMP otro

salta:

8.2.7 LODSB y LODSW

Este grupo de instrucciones cargan el contenido de una localidad dememoria por DS:SI al registro AL o AX según el tipo de operación.Después de la operación el registro SI es incrementado o decrementado(de acuerdo a la bandera de dirección) de forma automática en 1 ó 2 bytes.

El uso de los repetidores (REP, REPE, REPNE) no tienen sentido en estecaso.

8.2.8 STOSB y STOSW

Estas instrucciones pasan el contenido del registro AL o AX, según eltipo de operación, a la localidad de memoria apuntada por DS:SI.Después de la operación el registro SI es incrementado o decrementado(de acuerdo a la bandera de dirección) de forma automática en 1 ó 2 bytes.

Con el repetidor REP, nos puede servir para llenar un área de memoriacon un valor conocido. Por ejemplo:

;Inicializa una zona de 10 caracteres con 0

MOV CX,0Ah ;cuenta 10

MOV AL,0 ;valor a traspasar

REP STOSB ;repite 10 veces la operación

Ensamblador

8-156

Page 165: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Mostramos en el siguiente programa el uso de las instrucciones REPE yCMPS para buscar una llave introducida por el usuario dentro de una frasey decidir si ésta o no. Una cosa importante a notar en este programa es eluso de segmentos que se traslapan en el caso del segmento de datos (DS) y el segmento ex tra (ES), lo que hace un poco más sencillo el manejo de laprogramación pues no es necesario acordarse de los segmentos fuentes ydestino sino hacer referencia a una misma área de memoria en este casollamada DATOS.

;BUSCA

;El usuario in tro duce una llave y a continuación

;una frase, el programa de cide si la llave se encuentra en la frase

muestra EQU 9h ;función de despliegue

teclado EQU 0Ah ;función del teclado

dos EQU 21h ;interrupción de DOS

;******************************************************************

pila SEG MENT STACK;de fine la pila

DB 20 DUP(‘pila ‘) ;palabra pila y 4 blancos

pila ENDS

;******************************************************************

datos SEG MENT ;de fine segmento de datos

ora_max DB 127d ;long. máxima de frase

ora_real DB ? ;long. real introducida

oracion DB 127d DUP(?) ;espacio para 127 caracteres

llav_max DB 20d ;long. máxima de llave

llav_real DB ? ;long. real introducida

llave DB 20d DUP(?) ;espacio para 20 caracteres

mens1 DB 0Dh,0Ah,’Llave a buscar: $’

mens2 DB 0Dh,0Ah,’Frase: $’

mens3 DB 0Dh,0Ah,’No se encontro $’

mens4 DB 0Dh,0Ah,’Si se encontro $’

datos ENDS

;******************************************************************

Busca SEG MENT ;segmento del código

prin ci pal PROC FAR ;parte prin ci pal del programa

AS SUME CS:busca,DS:datos,ES:datos

;———————————————————————————————————————————-

Inicio:

;guarda la valores para el regreso

PUSH DS ;segmento de datos viejo

SUB AX,AX ;forma rápida de poner 0 en AX

La Pila

8-157

Page 166: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

PUSH AX ;guarda en pila (DS:0)

;———————————————————————————————————————————-

;DS apunta ahora a nuestro segmento de datos

MOV AX,datos ;dirección del segmento de datos

MOV DS,AX ;hacia el registro DS

;———————————————————————————————————————————-

;ES apunta ahora a nuestro segmento ex tra

MOV AX,datos ;dirección del segmento de datos

MOV ES,AX ;hacia registro ES

la_llave: ;pide llave y coloca en memoria

MOV DX,OFF SET mens1 ;dirección mensaje

MOV AH,muestra ;y prepara a mostrar

INT dos

;———————————————————————————————————————————-

;Toma llave y guarda

MOV DX,OFF SET llave_max ;dirección de llave

MOV AH,teclado ;toma llave de teclado

INT dos

;———————————————————————————————————————————-

frase: ;pide la frase y guárdala

MOV DX,OFF SET mens2 ;dirección mensaje

MOV AH,muestra ;y prepara a mostrar

INT dos

;———————————————————————————————————————————-

;Toma frase y guarda

MOV DX,OFF SET ora_max;dirección frase

MOV AH,teclado ;toma frase de teclado

INT dos

;———————————————————————————————————————————-

;Busca la llave en la frase

;SI apuntador a la llave

;DI apuntador a la frase

;BX apuntador a inicio de frase

;DX long. frase - long. llave + 1

;CX long. de la frase

;

CLD ;búsqueda hacia adelante

MOV AL,ora_real ;long. frase

SUB AL,llav_real ;- long. llave

JL no_esta ;si long. llave>long. frase

Ensamblador

8-158

Page 167: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

CBW ;cambia byte a palabra

MOV DX,AX ;poner en DX

INC DX ; + 1

MOV BX,OFF SET oracion ;BX apunta a inicio frase

;———————————————————————————————————————————-

compara:

MOV DI,BX ;lugar donde comienza comparación

MOV SI,OFF SET llave ;SI inicio de llave

MOV AL,llav_real ;toma long. llave

CBW ;convierte a palabra

MOV CX,AX ;y guarda en CX

REPE CMPSB ;repite hasta CX=0 o no se encuentrecarácter

JZ si_esta ;no encontramos nada

INC BX ;avanza apuntador a sig. carácter defrase

DEC DX ;¿Acabamos?

JZ no_esta ;si, no está

JMP compara ;no, con tinua siguiente

;———————————————————————————————————————————-

si_esta: ;encontramos llave

MOV DX,OFF SET mens4 ;dirección mensaje

MOV AH,muestra ;prepara a mostrar

INT dos

JMP la_llave ;Ve por otra llave y frase

;———————————————————————————————————————————-

no_esta: ;no se encontró llave

MOV DX,OFF SET mens3 ;dirección mensaje

MOV AH,muestra ;prepara a mostrar

INT dos

JMP la_llave ;Ve por otra llave y frase

RET

;———————————————————————————————————————————-

prin ci pal ENDP ;fin de programa prin ci pal

busca ENDS ;fin del segmento

END inicio ;fin del programa

Una vez que la llave y la oración han sido aceptadas, el programaprocede a las comparaciones. Usa el registro BX como apuntador a loscaracteres de la frase. La comparación comienza desde el primer carácter. Asumamos que la llave tiene una longitud de tres caracteres, requerimos

La Pila

8-159

Page 168: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

de comparar la llave con los primeros tres caracteres de la frase de lasiguiente forma:

· 1. El registro SI apunta a las letras de la llave.

· 2. El registro DI apunta a las letras de la frase.

· 3. El registro CX lleva la cuenta del número de letras de la llave.

La instrucción CMPB se repite hasta que CX es cero o la comparaciónfalla. Para no buscar en toda la frase y hacer que el programa sea másrápido, sólo se busca en (longitud de la frase - longitud de la llave + 1)caracteres sin necesidad de llegar al fi nal. Afortunadamente lainterrupción del teclado (0Ah) regresa la longitud de lo que el usuariotecleó en la localidad inmediatamente después a la memoria reservadapara dicha entrada, en este caso, en la localidad llav_real y ora_real.

Es necesario empujar DS a la pila pero también un cero para poderregersar al segmento adecuado de datos y que el programa lo sepa(segemento de datos en DS:0).

8.3 Resumen

Se in tro duce en este capítulo el manejo de la pila, siempre importante enlos diseños actuales de computadoras y programas. Se analizan además,las instrucciones de manejo de cadenas particulares a este circuito y laforma de usarlas en nuestra ventaja en tareas sencillas como la del últimoprograma presentado en el capítulo.

8.4 Problemas

8.1 Convierta el programa BUSCA de forma tal que no se usen lasinstrucciones especiales de manejo de cadenas en la comparación.

8.2 Programe un algoritmo desde DE BUG que llene las localidades dememoria de la 200h a la 2FFh con un 0.

8.3 Averigüe si el circuto MOTOROLA tiene instrucciones similares a laspresentadas en este capítulo para manejo de pila y de cadenas.

Ensamblador

8-160

Page 169: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

8.5 Instrucciones Analizadas

PUSH, POP, RET n, POPF, PUSHF, REP, CLD, STD, MOVS, MOVSB, MOVSW, CMPS, CMPSB, CMPSW, REPE, REPZ, REPNE, REPNZ,SCAS, SCASB, SCASW, LODS, LODSB, LODSW, STOS, STOSB,STOSW

8.6 Bibliografía

Revista PC Mag a zine EU números de 1983.

Mercier Philippe Assembleur Fac ile. Marabout 1992, Alleur Bélgica.

Barden Wil liam Jr. How to Pro gram Mi cro com puters. Sams & Com -pany 1987.

MASM 86 Co lum bia Data Prod ucts, EU 1986.

IBM Per sonal Com puter Tech ni cal Ref er ence.

La Pila

8-161

Page 170: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Capítulo 99.1 El Vídeo

Du rante el desarrollo de las microcomputadoras hubo que tomar variasdecisiones con respecto a los componentes que forman el sistema y a laforma de interactuar en tre ellos. Muchas de estas decisiones, buenas omalas, aún nos siguen persiguiendo con el fantasma de la compatibilidad.

Los caracteres que se despliegan en la pantalla funcionaban en unprincipio como una serie de códigos ASCII que se mandaban al manejador de la pantalla uno a uno y éste se encargaba de todo lo demás. Estofunciona muy bien en los con fines del despliegue de letras, pero una vezque el usuario y los diseñadores exigen más de la pantalla, este esquemaes inadmisible.

El siguiente paso consiste en reservar un área de memoria para cadalocalidad gráfica de la pantalla llamada PIXEL (Pic ture El e ment,Elemento de Pantalla).

Utilicemos de inmediato el programa DE BUG para averiguar a qué nosreferimos:

C>CLS

C>DE BUG

-d b800:0 fa

Notaremos que en la columna de la derecha (caracteres ASCII) estánlocalizadas las letras C>DE BUG, ¡Hemos localizado el área de memoriareservada para la pantalla de video! Esta pantalla va de la direcciónB800:0000 a la B800:0F9F (4000 bytes) y se forma por dos bytes porlocalidad.

9-163

Page 171: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

¿Pero qué significa el 07h que aparece a la izquierda de cada carácter?Hemos también localizado el byte de atributo de cada pixel de la pantalla. Desde DE BUG juguemos con los atributos:

C>DE BUG

-rds

DS 08F1

:b800

-e0

Introduciendo la secuencia 41, F0, 42, 87, 43, F (Recuerde introducirusando la barra espaciadora y terminar usando la tecla de RE TORNO) queda por resultado ABC (códigos 41,42 y 43) pero en distintos atributos en laparte su pe rior del video (códigos F0, 87 y 0F).

El manejo del video se puede hacer también utilizando las rutinas de lainterrupción 10h que el fabricante del BIOS (IBM, Phoe nix, etc.) diseñó:

;Limpia la pantalla: Servicio 06h de la interrupción 10h del BIOS

cls PROC NEAR

PUSH AX

PUSH BX

PUSH CX

PUSH DX

MOV AH,6 ;Función de movimiento de pantalla

MOV AL,0 ;Código para limpiar pantalla

MOV CH,0 ;renglón izq. sup.

MOV CL,0 ;columna izq. sup.

MOV DH,24 ;renglón inf. derecho

MOV DL,79 ;columna inf. derecha

MOV BH,7 ;Byte de atributo del carácter

INT 10 ;llamada al ROM

POP DX

POP CX

POP BX

POP AX

RET

cls ENDP

El siguiente programa usa de la misma forma la interrupción 10h:

;Posiciona cur sor en columna AL, renglón AH

;Servicio 02h de la interrupción 10h

;Parámetros de entrada: AL y AH

;Parámetros de salida : Ninguno

Ensamblador

9-164

Page 172: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

;Registros destruidos : Ninguno

IR_A_XY PROC NEAR

PUSH BX

PUSH DX

MOV DX,AX ;en DH el renglón, en DL la columna

MOV AH,2 ;servicio 2 de la

MOV BH,0 ;página cero de la

INT 10h ;interrupción 10h

POP DX

POP BX

RET

ir_a_XY ENDP

9.2 Ventanas

Las rutinas del ROM de una computadora IBM o com pat i ble permiten elmanejo de ventanas dentro de la pantalla, así como de varias páginas devideo para animaciones rápidas y distintos trucos programáticos.

Esta característica es muy utilizada en los programas modernosintegrados y ambientes en el que el manejo de las ventanas es la base.

Mostraremos a continuación cómo colocar una ventana sencilla en lapantalla de 20 columnas de ancho y 9 renglones de alto colocada en lamitad de la pantalla:

;Ventana: demostración del uso de ventanas

;NO utilice el ENTER para terminar una línea

ventana SEG MENT

AS SUME CS:ventana

;————————————————————————————————————————————

;limpia pantalla

MOV AH,6 ;Función de movimiento de pantalla

MOV AL,0 ;Código para limpiar pantalla

MOV CH,0 ;renglón izq. sup.

MOV CL,0 ;columna izq. sup.

MOV DH,24 ;renglón inf. derecho

MOV DL,79 ;columna inf. derecha

MOV BH,7 ;Byte de atributo del carácter

INT 10h ;llamada al ROM

;————————————————————————————————————————————

El Video

9-165

Page 173: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

, colocar el cur sor en las coordenadas adecuadas a la ventana

coloca: MOV DH,16 ;renglón

MOV DL,30 ;columna

MOV AH,2 ;servicio 2 de la

MOV BH,0 ;página cero de la

INT 10h ;interrupción 10h

MOV CX,20d ;cuenta a 20

;————————————————————————————————————————————

; acepta la entrada del teclado 20 veces

tecla: MOV AH,1 ;función del teclado

INT 21h

CMP AL,3 ;Si CTRL C

JZ salida ;termina

LOOP tecla ;sigue hasta agotar CX

;————————————————————————————————————————————

;mueve pantalla hacia arriba

MOV AH,6 ;función de mover

MOV AL,1 ;Número de líneas

MOV CH,8 ;Renglón sup. izq.

MOV CL,30 ;Columna sup. izq.

MOV DH,16 ;renglón inf. derecho

MOV DL,50 ;Columna inf. derecha

MOV BH,7 ;Atributo nor mal

INT 10h ;llamada a int. video

JMP coloca

salida:

INT 20h

;————————————————————————————————————————————

ventana ENDS

END

Ejercicio 9.1 Convierta el programa an te rior en uno mod u lar usandollamadas a subrutinas (CALL) en lugar de las secuencas de códigoinsertadas para: 1. limpiar pantalla, 2. colocar cur sor y 3. mover renglónhacia arriba (Scroll).

El siguiente código llena la pantalla con cierto carácter predeterminadoy aprovecha que ya sabemos la dirección del área de memoria donde seguardan los datos de la pantalla.

;Llena: llena la pantalla con un carácter

;De fine el segmento de video

Ensamblador

9-166

Page 174: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

video SEG MENT AT 0B800h

DB 800h DUP(?) ;tamaño de la pantalla (2048 bytes)

video ENDS

;**********************************************************

codigo SEG MENT

llena PROC FAR

AS SUME CS:codigo

AS SUME DS:video

PUSH DS ;guarda el segmento viejo

SUB AX,AX ;AX en cero

PUSH AX ;segmento DS:0

;————————————————————————————————————————————

;apunta a segmento de video

MOV AX,video

MOV DS,AX

;————————————————————————————————————————————

;coloca carácter con atributo nor mal

MOV AX,0701h

MOV BX,0 ;inicio de pantalla

MOV CX,0F9Fh ;cuenta

;————————————————————————————————————————————

;llena la pantalla

otro: MOV [BX],AX ;inserta carácter

INC BX ;incrementa contador en

INC BX ;2 bytes

LOOP otro

RET

;————————————————————————————————————————————

llena ENDP

codigo ENDS

END

En el programa an te rior remarquemos que no es posible regresar al SO

usando una interrupción (20h) puesto que el programa modifica elsegmento de datos por lo que primero se debe salvar este segmento y porúltimo regresar con la instrucción RET.

Ejercicio 9.2 Modifique el programa an te rior (llena) para usar lainstrucción MOVS en lugar del lazo utilizado.

El Video

9-167

Page 175: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Ejercicio 9.3 Utilizando el ejemplo del programa LLENA, modifiqueahora el programa VENTANA para agregar un recuadro a la ventana.Utilice las instrucciones de movimientos de cadenas.

9.3 Pantallas de Graficación

Poco a poco ha habido una evolución en los dispositivos que conformanlos sistemas de cómputo, mientras más avanza la tecnología y losproductos se vuelven populares por demanda o por baja de costos losdiseñadores están presionados a mejorar día a día. De la sencilla pantallade despliegue de caracteres en modo monocromático, se pasa a mejoresresoluciones, más detalle (número de pix els), y más colores. De 320 x200 pix els a color se evoluciona pasando por 640 x 200 16 colores hastael estandar ac tual de 1200 x 480 en 16 millones de colores en los cuales seobtiene resolución casi fotográfica.

Todo lo an te rior desemboca en requerimientos más y más grandes dememoria pues el manejo de cada pixel requiere entonces de más bytespara especificar sus atributos y colores de los posibles de seleccionar,siendo común hasta 2M bytes y más en los controladores modernos

Al ejecutarse el sistema operativo, éste “despierta” en modo de texto yes la obligación del programa que utiliza los servicios del sistemaoperativo de cambiar este modo. Una posibilidad es el comando MODE

del SO o cualquier utilería proporcionada por los fabricantes de losdispositivos controladores de video, pero la operación debe realizarsemanualmente. La alternativa es entonces automatizar el proceso dentrodel programa que así lo requiera.

Para lograr esto se requiere de dos pasos:

· 1. Alterar algunos bits de un byte especial que reside en memoriallamado bandera del equipo.

· 2. Informar al BIOS del ROM que se ha modificado dicha bandera.

Al prender el equipo, el SO reconoce por medio de los interruptores de lamáquina, qué tipo de equipo está conectado en ese momento y guarda lainformación en un byte localizado en la dirección absoluta 00410h. Si se

Ensamblador

9-168

Page 176: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

quiere engañar al SO es necesario modificar los bits de esa localidad, ennuestro caso es pe cial nos interesan los bits 4 y 5:

· 00 tarjeta de color 40 x 25 caracteres

· 10 tarjeta de color 80 x 25 caracteres

· 11 tarjeta monocromática 80 x 25 caracteres

La interrupción 10h maneja esto por nosotros con distintas alternativasde las que sólo investigaremos 3:

· 80 x 25 caracteres monocromáticoal llamar con AL=2, AH=0.

· 640 x 200 pixel monocromático llamar con AL=6, AH=0.

· 320 x 200 pixels de color llamar con AL=4, AH=0.

Presentamos un corto programa que realiza esto precisamente:

;MODO: cambia el modo de la pantalla a

;M=monocromático

;A=Alta resolución 640 x 200 monocromático

;C=Baja resolución 320 x 200 color

tecla EQU 1h ;entrada del teclado

muestra EQU 9h ;despliegue en pantalla

dos EQU 21h ;llamada a DOS

;————————————————————————————————————————————

;De fine el segmento de la bandera de video

rom SEG MENT AT 040h

ORG 10h ;dirección del byte

bandera DW ?

rom ENDS

;************************************************

;De fine segmento de código

modo SEG MENT

AS SUME CS:modo

AS SUME DS:modo

ORG 100h

inicio:

MOV DX,OFF SET mens ;dirección del mensaje

MOV AH,muestra ;prepara a desplegar

INT dos

;————————————————————————————————————————————

;escoge la bandera del equipo

El Video

9-169

Page 177: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

AS SUME DS:rom

MOV AX,rom

MOV DS,AX

;————————————————————————————————————————————

;Toma la letra del usuario y escoge la opción

MOV AH,tecla ;entrada del teclado

INT dos ;llama a DOS

CMP AL,’m’ ;monocromático

JE mono

CMP AL,’a’ ;alta resolución

JE alta_res

CMP AL,’c’ ;color

JE color

JMP inicio

;————————————————————————————————————————————

;coloca en monocromático

mono: MOV AX,bandera ;bandera del equipo

AND AX,11001111b ;quita los bits del video

OR AX,00110000b ;y coloca bits de monocromático

MOV bandera,AX ;regersa a su lugar

MOV AL,2 ;80 columnas en Blanco y Ne gro

MOV AH,0 ;función de modifica equipo

INT 10h ;llama a rutina de video

JMP salida ;finaliza

;————————————————————————————————————————————

;coloca en alta resolución

alta_res: MOV AX,bandera ;bandera del equipo

AND AX,11001111b ;quita los bits del video

OR AX,00100000b ;y coloca bits de 640 x 200

MOV bandera,AX ;regersa a su lugar

MOV AL,6 ;640 x 200 en Blanco y Ne gro

MOV AH,0 ;función de modifica equipo

INT 10h ;llama a rutina de video

JMP salida ;finaliza

;————————————————————————————————————————————

;coloca en color 320 x 200

color: MOV AX,bandera ;bandera del equipo

AND AX,11001111b ;quita los bits del video

MOV bandera,AX ;regresa a su lugar

MOV AL,4 ;320 x 200 color

MOV AH,0 ;función de modifica equipo

Ensamblador

9-170

Page 178: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

INT 10h ;llama a rutina de video

;————————————————————————————————————————————

salida: INT 20h ;salir

;————————————————————————————————————————————

mens db 13,10

db ‘Teclee “m” para 80 x 25 monocromático’,13,10

db ‘ “a” para 640 x 200 monocromático’,13,10

db ‘ “c” para 320 x 200 color’,13,10

db ‘Selección: $’

;————————————————————————————————————————————

modo ENDS

END inicio

El programa an te rior debe ser ensamblado en un archivo del tipo COM

(usando EXE2BIN) y sólo puede ser usado en equipos con tarjeta CGA,EGA, VGA, SVGA o UVGA. El pro gram hace uso de la pseudo instrucciónSEG MENT AT que forza al segmento en una dirección explicita conocidade antemano. Otra cosa importante es que como deseamos un programatipo COM, hemos forzado los datos en un sólo segmento y no ensegmentos separados como en ejemplos anteriores, la única excepción aesto es con el uso de la pseudo instrucción SEG MENT AT explicada en elparráfo an te rior.

Establecemos en este momento la siguiente regla:

REGLA. Se puede tener más de un segmento en un archivo COM si este segmento

es definido de antemano con la pseudo instrucción SEG MENT AT.

La forma de accesar la pantalla cambia también pues ahora se requierede 320 x 200 (en baja resolución color) ó 64,000 bytes localidades dememoria para guardar la información de los pix els por lo que se escogióasignar 2 bits de un byte para cada localidad lo que nos da una posibilidadde 4 combinaciones para cada pixel y 4 pixel por byte (16,000localidades) en las siguientes combinaciones:

· 00 negro

· 01 amarillo

· 10 azul

· 11 blanco

El Video

9-171

Page 179: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Experimentaremos un poco con el color y DE BUG una vez que yatenemos el programa MODO ensamblado. Como primer paso necesitamos cambiar el modo de la pantalla a color resolución baja (320 x 200) usando nuestro programa MODO escogiendo la opción C y de ahí entrar a DE BUG

y cambiar el segmento al de la pantalla:

C>DE BUG

-rds

DS 08F1

:b800

En este punto intentemos lo siguiente:

-f0 400 55

Con lo que logramos que aparezcan una docena de rayas amarillas en laparte su pe rior del mon i tor. El color depende del mon i tor que estemosusando y del ajuste del mismo. Lo que hemos logrado con el comando f esllenar las primeras 400h localidades del segmento de memoria con laconstante 55h ó 01010101b, el código am a rillo para cada uno de los 4pixeles de cada byte.

¿Por qué si llenamos las primeras 400h localidades de memoria de video obtenemos entonces áreas en blanco de la pantalla? La memoria de videopara color se di vide en dos par tes:

· De las localidades 0000h a la 1F3Fh (7,999 bytes) para las líneaspares (0,2,4, etc.)

· De las localidades 2000h a la 3F3Fh (7,999 bytes) para las líneasimpares (1,3,5, etc.)

Probemos otros colores:

-f 400 800 aa

-f0 800 c00 ff

Y llenemos ahora las líneas impares:

-f 2000 2400 55

-f 2400 2800 aa

-f 2800 2c00 ff

Ejercicio 9.4 Experimente en este punto con distintos códigos y vea elresultado.

Ensamblador

9-172

Page 180: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Como se puede suponer, es un poco difícil tratar de mantener el con trolde las dos áreas de memoria para gráficar un punto o línea de un lugar aotro. Para evitarnos este problema podemos usar una rutina del ROM quehace todo el trabajo:

– AH = 12h

– DX = número de renglón del punto a desplegar

– CX = número de la columna del punto a desplegar

– AL = color del punto

En el siguiente programa evitaremos el uso de esta interrupción ydiseñaremos el programa de forma tal que deba re solver todo lorelacionado a los colores, bancos y pix els de cada byte. El programa op -era usando las teclas 0,1,2 y 3 para definir el color del pixel y las flechaspara definir la dirección de dibujo del mismo. A su vez, hace uso de lainterrupción 16h del teclado que nos regresa el código de cada teclapresionada. Desgraciadamente las teclas como mayúsculas, bloqueo denúmeros, etc. no tienen código, para eso se requiere del llamado a lainterrupción 16h con AH=2 lo que regresa una bandera con los distintosestados de las teclas presionadas en el registro AX de acuerdo a lasiguiente tab la:

· bit 0 Tecla de mayúsculas derecha presionada

· bit 1 Tecla de mayúsculas izquierda presionada

· bit 2 Tecla de control presionada

· bit 3 Tecla de alterno presionada

· bit 4 Tecla de bloque de desplazamiento activada

· bit 5 Tecla de bloque numérico activada

· bit 6 Tecla de bloqueo de mayúsculas activada

· bit 7 Tecla de insertar activa

;LINEAS Rutina para dibujo de linea en la pantalla utilizando

;las flechas para la direccion

;Se requiere de mon i tor de color y de usar an tes

;el programa MODO de este mismo capítulo (opción c)

arriba EQU 48H ; flecha hacia arriba

El Video

9-173

Page 181: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

abajo EQU 50H ; flecha hacia abajo

derecha EQU 4dH ; -

izquierda EQU 4bH ;

es cape EQU 1bH ; tecla de ESC

;************************************************

video SEG MENT AT 0B800H ; de fine segmento ex tra apuntando apantalla

wd_buff LA BEL WORD

v_buff LA BEL BYTE

video ENDS

;************************************************

linea SEG MENT ; de fine el segmento de codigo

;——————————————————————————————————————————————————

prin ci pal PROC FAR ; parte prin ci pal del programa

AS SUME cs:linea,es:video

inicio: ; direccion inicial de ejecución

; prepara stack para regreso

PUSH ds ; guarda segmento de datos viejos

SUB AX,AX ; cero en AX

PUSH AX ; y guarda en pila(segmento DS:0)

; prepara ES con el segmento de video

MOV AX,video ; direccion del segmento de video

MOV ES,AX ; pasarlo a ES

; limpia pantalla usando el ROM

MOV AH,6 ; usa corrimiento hacia arriba

MOV AL,0 ; código para limpiar pantalla

MOV CX,0 ; punto su pe rior izq.=0,0

MOV DL,79 ; punto inf izq en

MOV DH,24 ; 79,24

INT 10H ; llama a rutina de ROM

; el apuntador a la pantalla está en CX, DX

; renglón de 0 a 200d en DX

; columna de 0 a 320d en CX

;

; posiciona en centro de pantalla para comenzar

MOV DX,100d ; número de renglones/2

MOV CX,160d ; columnas/2

;

; lee el teclado para obtener el dígito que se está presionando

lee_tecla:

MOV AH,0 ; función del teclado sin eco

INT 16H ; llama a dos

CMP AL,es cape ; si es ESC

JZ salida ; termina

Ensamblador

9-174

Page 182: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

CMP AL,33H ; si es mayor que 3 (ASCII)

JG grafica ; no es color

CMP AL,30H ; si es menor que cero (ASCII)

JL grafica ; no es color

; número en tre 0 y 3, es un color, defínelo

AND AL,3 ; quita 5 bits superiores

MOV BL,AL ; guarda en BL

JMP lee_tecla ; toma siguiente caracter

; encuentra hacia a donde ir y grafica siguiente punto

grafica:

MOV AL,AH ; poner código de búsqueda en AL

CMP AL, arriba

JNZ no_arriba ; salta si no es hacia arriba

DEC DX ; si es hacia arriba resta línea

no_arriba:

CMP AL,abajo

JNZ no_abajo ; salta si no es hacia abajo

INC DX ; si hacia abajo, resta línea

no_abajo:

CMP AL,derecha

JNZ no_derecha

INC CX

no_derecha:

CMP AL,izquierda

JNZ prendelo

DEC CX

; llama a subrutina de gráfica que requiere color en AL,

; renglón en DX y columna en CX

prendelo:

MOV AL,BL ;retrasa

CALL graf_punto ; lee puerto B en AL

JMP lee_tecla ; mascarilla los 2 bits más bajos

salida:

RET ; regresa a dos

prin ci pal ENDP ; fi nal de parte prin ci pal de programa

;————————————————————————————————————————————————-

graf_punto PROC NEAR

; subrutina de graficación en pantalla

; resolución me dia, 320 x 200 en color

; entra con :

; coordenada x en CX, coordenada y en DX

; color en AL(0=apagado, 1,2,3=colores)

PUSH BX ; salva BX,columna,renglon y color

PUSH CX

El Video

9-175

Page 183: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

PUSH DX

PUSH AX

; multiplica renglón x # de bytes por renglón

; (80 pero como ya fue mult. por 2 usar 40)

PUSH DX ; salva reng. para par/non

MOV AL,40 ; bytes/reng./2

AND DX,0FEh ; quita bit de non/par

MUL DL ; AX tiene ahora la dir. del reng.

; ver si hay que sumar 2000H para segundo banco de memoria

; si el renglón es impar

POP DX ; trae número orig i nal de reng.

TEST DL,1 ; probar bit 0 para par/non

JZ par ; salta a pares

ADD AX,2000H ; suma para apuntar a 2do banco demem.

par:

MOV BX,AX ; salvar reng. en BX

; sumar dir de columna a renglón

PUSH CX ; salvar columna

SHR CX,1 ; correr a izq. para

SHR CX,1 ;no matar bits de color

ADD BX,CX ; sumar a dir. en BX

; usar los bits de pos. para poner color y mas cara en pos. correcta

POP CX ; recupera columna

AND CX,3 ; guarda bits de pos.

INC CX ; corrimiento gra tis

POP AX ; trae color

MOV DL,0FCh ; DL mas cara 11,11,11,00

corre: ; AL color 00,00,00,cc

ROR AL,1 ; corre color

ROR AL,1 ; 2 bits a la derecha

ROR DL,1 ; corre mascarilla 2 bits

ROR DL,1 ; a la derecha

LOOP corre ; hacerlo el # de veces de pos. de bits

; contenido del byte, mascarilla todo menos color y OR con bits de color

AND [v_buff + BX],DL ; mascarilla

OR [v_buff + BX],AL ;OR con el color

POP DX ; restaura renglón

POP CX ; restaura columna

POP BX ; restaura BX y

RET ; regresa

graf_punto ENDP

;—————————————————————————————————————————————————-

linea ENDS ; fin de segmento

Ensamblador

9-176

Page 184: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

;*****************************************************

;

END inicio ; fin de ensamble

Se in tro duce la pseudo instrucción LA BEL BYTE, LA BEL WORD y LA -

BEL DWORD que de fine o re de fine una localidad como tipo byte, palabrao palabra doble. Recordemos que las pseudo instrucciones DB y DW

reservan y apartan las localidades de memoria necesarias según ladefinición realizada, a diferencia de éstas, LA BEL sólo informa alensamblador qué tipo de localidad es la que sigue o pre cede sin reservarlocalidades de memoria y es sumamemte usada cuando se necesitadefinir una misma área como de dos o más tipos diferentes. Se requiere de este tipo de instrucciones pues el ensamblador es muy rígido con ladefinición de tipos y no es posible cambiar “al vuelo” el tipo de datos.

El dibujar líneas horizontales y verticales es muy sencillo pero en di ag o -nal se vuelve un poco más complejo requiriendo de más pasos paradefinir qué pixeles encender y cuáles no. Presentamos un programa en elque al introducir una secuencia de 5 números (x1, y1, x2, y2, color)realiza la línea utilizando el algoritmo de Bresenham.

Ejercicio 9.5 Investigar en qué consiste el algoritmo de Bresenham paradibujar una línea en tre dos puntos en una pantalla.

El programa que sigue se basa en este algoritmo y en las interrupcionesdel ROM para graficar una línea recta en tre dos puntos. El programa debede ser ejecutado como tipo EXE (no usar EXE2BIN) y se debe cambiar lapantalla a color 320 x 200 an tes de usarse. Una vez en el programa, ésteespera 5 parámetros desde el teclado introducidos con ENTER:

· x1,y1: coordenadas del punto inicial

· x2,y2: coordenadas del punto final

· color: el color para la línea

al introducir el úlitimo dato el programa grafica la línea y espera otros 5datos.

;BRESENHAM: dibujo de una línea recta en tre dos puntos de la pantalla

;use el programa MODO para cambiar a pantalla de color 320 x 200

;Acepta 5 parámetros (x1,y1), (x2,y2) y color (1,2,3,4,0)

datos SEG MENT

delta_x DW ? ;|x2-x1|

delta_y DW ? ;|y2-y1|

El Video

9-177

Page 185: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

mitad_y LA BEL WORD ;|y2-y1|/2

mitad_x DW ? ;|x2-x1|/2

cuenta DW ? ;eje largo

x1 DW ? ;coordenada 1

y1 DW ? ;coordenada 1

x2 DW ? ;coordenada 2

y2 DW ? ;coordenada 2

color DW ? ;color de 0 a 4 ó de 0 a 1

datos ENDS ;fin de datos

;——————————————————————————————————————————————————-

bresen SEG MENT ;segmento de código

prog PROC FAR ;parte prin ci pal del programa

AS SUME CS:bresen,DS:datos

inicio: ;dirección inicial

;guarda la pila para el regreso

PUSH DS

SUB AX,AX

PUSH AX

; limpia pantalla usando el ROM

MOV AH,6 ; usa corrimiento hacia arriba

MOV AL,0 ; código para limpiar pantalla

MOV CX,0 ; punto su pe rior izq.=0,0

MOV DL,79 ; punto inf izq en

MOV DH,24 ; 79,24

INT 10H ; llama a rutina de ROM

n_linea:

CALL decbin ;pide x1

MOV x1,BX

CALL decbin ;pide y1

MOV y1,BX

CALL decbin ;pide x2

MOV x2,BX

CALL decbin ;pide y2

MOV y2,BX

CALL decbin ;pide el color

MOV color,BX

CALL linea ;dibuja la línea

JMP n_linea ;vuelve por otros datos

prog ENDP ;

;——————————————————————————————————————————————————-

linea PROC NEAR ;rutina para dibuhar la línea

;encuentra |y2-y1| resultado en delta_y

MOV AX,y2 ;toma y2

Ensamblador

9-178

Page 186: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

SUB AX,y1 ;resta y1, resultado en AX

;Si delta_y es + SI=1, si - SI=-1

MOV SI,1 ;bandera positiva

JGE guarda_y ;manten si positivo

MOV SI,-1 ;poner bandera en negativo

NEG AX ;saca valor absoluto

guarda_y:

MOV delta_y,AX ;guarda valor de |y2-y1|

;encuentra |x2-x1| resultado en delta_x

MOV AX,x2 ;toma x2

SUB AX,x1 ;resta x1, resultado en AX

;Si delta_x es + DI=1, si - DI=-1

MOV DI,1 ;bandera positiva

JGE guarda_x ;si positivo manten

MOV DI,-1 ;si negativo pon bandera

NEG AX ;y saca valor absoluto

guarda_x:

MOV delta_x,AX ;guarda valor de |x2-x1|

;Encuentra si pendiente > o < que 1

CMP AX,delta_y ;compara las del tas

JL c_pend ;pendiente>1

CALL pend_1 ;pendiente<=1

JMP fin

c_pend:

CALL pend ;pendiente>1

fin: RET

linea ENDP

;——————————————————————————————————————————————————-

pend_1 PROC NEAR ;pendiente < 1

;Calcula |x2-x2|/2

MOV AX,delta_x ;toma |x2-x2|

SHR AX,1 ;di vide en tre 2

MOV mitad_x,AX ;y guarda

;Inicia valores

MOV CX,x1 ;toma x1

MOV DX,y1 ;toma y1

MOV BX,0 ;inicializa BX

MOV AX,delta_x ;fija la cuenta a

MOV cuenta,AX ;|x2-x1|

punto:

CALL graf_punto ;grafica un punto

ADD CX,DI ;inc/dec de X

ADD BX,delta_y ;+|y2-y1| en BX

CMP BX,mitad_x ;compara con |x2-x1|/2

El Video

9-179

Page 187: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

JLE dcuenta ;no modificar inc/dec de Y

SUB BX,delta_x ;BX-|x2-x1|

ADD DX,SI ;incrementa o decrementa Y

dcuenta:

DEC cuenta ;¿Terminamos?

JGE punto ;aún no

RET

pend_1 ENDP

;——————————————————————————————————————————————————-

pend PROC NEAR ;pendiente > 1

MOV AX,delta_y ;toma |y2-y1|

SHR AX,1 ;di vide en tre 2

MOV mitad_y,AX ;y guarda

;Inicia valores

MOV CX,x1 ;toma x1

MOV DX,y1 ;toma y1

MOV BX,0 ;inicializa registro BX

MOV AX,delta_y ;toma |x2-x1|

MOV cuenta,AX ;y guarda en cuenta

punto2:

CALL graf_punto ;grafica punto

ADD DX,SI ;incrementa o decrementa Y

ADD BX,delta_x ;BX+|x2-x1|

CMP BX,mitad_y ;compara con |y2-y1|/2

JLE dcuenta2 ;no incrementar o decrementar X

SUB BX,delta_y ;BX-|y2-y1|

ADD CX,DI ;incrementa o decrementa X

dcuenta2:

DEC cuenta ;¿Se terminó la línea?

JGE punto2 ;aún no

RET

pend ENDP

;——————————————————————————————————————————————————-

graf_punto PROC NEAR

PUSH BX ;guarda registros

PUSH CX

PUSH DX

PUSH AX

PUSH SI

PUSH DI

;Rutina de ROM para graficar punto requiere de:

;DX=renglón, CX=columna, AL=color

MOV AX,color

Ensamblador

9-180

Page 188: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

MOV AH,12d ;función de graficar punto

INT 10h ;Rutina del BIOS

POP DI ;Regresa registros

POP SI

POP AX

POP DX

POP CX

POP BX

RET

graf_punto ENDP

;——————————————————————————————————————————————————-

key_in EQU 1h

doscall EQU 21H

;——————————————————————————————————————————————————-

decbin PROC NEAR ;Ver capítulo 6

;Acepta dec i mal de teclado, regresa

;binario en registro BX

MOV BX,0 ;Limpia registro BX

otro:

MOV AH,key_in ;entrada del teclado

INT doscall ;llama a DOS

SUB AL,30h ;ASCII a binario

JL sale ;Salir si el #<0

CMP al,9d ;¿Es > 9?

JG sale ;Si es así, no es dígito

CBW ;Convierte byte en AL a palabra enAX

;Multiplica número en BX por 10

XCHG AX,BX ;Cambia registros AX y BX

MOV CX,10d ;Coloca 10 en CX

MUL CX ;y multiplica por AX (AX*10)

XCHG AX,BX ;Regresa # a BX

;Suma número en AX por el de BX

ADD BX,AX ;suma dígito a #

JMP otro ; y ve por otro

sale:

RET

decbin ENDP

;——————————————————————————————————————————————————-

bresen ENDS ;fin de segmento prin ci pal

;——————————————————————————————————————————————————-

El Video

9-181

Page 189: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

END inicio ;fin de programa

9.4 Resumen

9.5 Instrucciones Analizadas

SEG MENT AT, LA BEL BYTE, LA BEL WORD

9.6 Problemas

9.1 Modifique el programa BRESENH de forma que salte un renglóndespués de aceptar cada parámetro.

9.2 Modifique el programa BRESENH de forma que acepte alguna tecla que usted defina para terminar la ejecución.

9.3 Modifique el programa BRESENH para que limpie la pantalladespues de la graficación de cada línea.

9.7 Bibliografía

Revista PC Mag a zine EU números de 1993.

Mercier Philippe Assembleur Fac ile. Marabout 1992, Alleur Bélgica.

Barden Wil liam Jr. How to Pro gram Mi cro com puters. Sams & Com -pany 1987.

MASM 86 Co lum bia Data Prod ucts, EU 1986.

IBM Per sonal Com puter Tech ni cal Ref er ence. Apéndice A

Ensamblador

9-182

Page 190: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Capítulo 1010.1 Archivos

Por razones históricas y de compatibilidad con sistemas anteriores y con versiones viejas, el MS-DOS proporciona acceso a lectoras de disco devarias formas:

· Acceso secuencial a registros

· Acceso aleatorio a registros

· Acceso aleatorio a bloques

· Manejadores de archivo (file handles)

En el último esquema se especifica el nombre del archivo y lainterrupción regresa un número de manejador que a partir de esemomento sirve para accesar los datos del archivo.

Analizaremos brevemente en las siguientes secciones cada uno de losmétodos e ilustraremos con breves programas.

10.2 Acceso Secuencial

El primer paso para el acceso a los datos de un archivo es guardar elnombre junto con otra información en un área de memoria preestablecidallamada Bloque de Con trol de Datos (File Con trol Block o FCB). Elsegundo paso consiste en especificar un lugar en memoria donde seguardan los datos de las lecturas y escrituras al disco y esta área se llamaArea de Transferencia de Datos (Data Trans fer Area o DTA). El tercerpaso es abrir el archivo y el cuarto y último sera cerrar el archivo una vezque los datos han sido leídos o escritos a él.

10-183

Page 191: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

La interrupción utilizada para el manejo de archivo es la 21h condistintos servicios solicitados por medio de datos en el registro AH. Elprimer servicio que veremos es el de abrir un archivo y corresponde alservicio 0Fh. Este servicio exige que el archivo ya exista por lo que locreamos primero ya sea desde el sistema operativo copiando desde elteclado (consola) o usando un procesador de palabras.

Función de abrir un archivo, Servicio 0Fh de la interrupción21h

Registros: AH=0Fh

DS=Dirección del Segmento del FCB

DX=Desplazamiento de la dirección del FCB

(El nombre del archivo con su extensión deben estar ya en el FCB)

Regresa:

AL=00 el archivo se encontró y abrió

AL=FF El archivo no existe

FCB # de disco,tamaño de registro,fecha,tamaño archivo,# bolque,etc.

Practiquemos a abrir un archivo desde DE BUG:

Primero creamos el archivo copiándolo desde el teclado:

C>COPY CON prueba.txt

ejemplo de información^Z

1 files(s) cop ied

C>DE BUG

-a100

MOV DX,5C

MOV AX,0F

INT 21

INT 20

Pero aún no hemos especificado el nombre del archivo, sin em bargocolocamos un número (5C) que corresponde al lugar donde estará elnombre del archivo. DE BUG comienza siempre en la dirección 100h delsegmento correspondiente. ¿Qué hay en las localidades del 00h al FFh?Estas localidades forman parte del Prefijo del Segmento del Programa ydentro de éste, el FCB ocupa las localidades del 5Ch al 7Ch (en losaccesos aleatorios es hasta 80h) seguido del DTA de la dirección 80h a laFFh.

Ensamblador

10-184

Page 192: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

El prefijo del segmento del programa de DE BUG consiste, en este caso,mayoritariamente en información que el SO y el programa requieren sa -ber de un archivo en par tic u lar, por ejemplo los 2 primeros bytes a partirde la dirección 0 son la INT 20h, los siguientes 2 el tamaño de la memoriadisponible, los 6 siguientes en la dirección del despachador de DOS, los 4 siguientes en la dirreción donde los programas terminan, los siguientesdos en la dirección de salida para una interrupción por teclado (IP), etc.Esta estructura se muestra en detalle en el apéndice E del libro IBM Per -sonal Com puting Disk Op er ating Sys tem.

El siguiente paso consiste en especificar el nombre del archivo quequeremos abrir. Dejemos que DE BUG nos ayude y usemos el comando N,pero primero llenemos algunas localidades con un valor conocido comopor ejemplo 22.

-f 40 7f 22

-nprueba.txt

y comprobemos con D.

-d0

Veremos que los bytes a partir del 5Ch han sido modificados y contienen ahora el nombre del archivo PRUEBA.TXT que DE BUG colocó ahí.Ejecutemos ahora nuestro programa con G. Si desplegamos de nuevo ladirección 0 (D0) nos encontramos que todo el pan orama del FCB hacambiado y muestra nueva información de acuerdo a la siguiente tab la:

El Acceso a Disco

10-185

Page 193: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Tab la 10.1 El FCBSO=datos llenados por el SO al abrir el archivo

usuario=datos proporcionados por el usuario

0 5C Número de disco SO

1 5D

nombre del archivo usuario

2 5E

3 5F

4 60

5 61

6 62

7 63

8 64

9 65

10 66 extensión archivo usuario

11 67

12 68 bloque ac tual SO

13 69

14 6A tamaño registro SO

15 6B

16 6C tamaño archivo (bajo) SO

17 6D

18 6E tamaño archivo (alto) SO

19 6F

20 70 fecha SO

21 71

22 72

Uso del SO SO

23 73

24 74

25 75

26 76

27 77

28 78

29 79

30 7A

31 7B

32 7C registro ac tual usuario

33 7D # reg. aleatorio (bajo) usuario

34 7E

35 7F # reg. aleatorio (alto) usuario

36 80

Expliquemos brevemente las localidades más relevantes:

– En la dirección 5C encontramos ahora un 02 que corresponde aldisco C, en la 6A encontramos ahora 80h (128d) que es el tamaño

Ensamblador

10-186

Page 194: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

del registro que el sistema operativo toma por omisión pues es eltamaño estandard para archivos secuenciales.

– En las localidades 6C hasta la 6F se encuentra el tamaño delarchivo y en este caso es de 16h (22d) bytes. Recuerde que seespecifica primero byte alto, byte bajo, palabra alta, palabra baja.

– La fecha se encuentra almacenada en las localidades 70h y 71h yen nuestro caso encontramos el número 09h 1Fh nuevamente enel orden invertido (1Fh 09h ó 0001 1111 0000 1001) con lasiguiente convención:

A. Los primeros 5 bits corresponden al día. Por ejemplo 01001ó día 9.

B. Los siguientes 4 bits al mes. Por ejemplo 1000 ó mes 8.

C. Los últimos 7 bits al año que se deben sumar a 1980. Porejemplo 0001111, 15d que corresponde a 1995.

– De las localidades 72h a 7Bh se encuentra la dirección donde estáalmacenado físicamente el archivo, es un poco complicado y nolo tocaremos en este momento.

Una vez que el archivo fue abierto, podemos proceder a leer suinformación. El servicio 14h de la interrupción 21h nos permite leersecuencialmente de un archivo:

Función de lectura secuencial,INT 21h servicio 14h

Registros: AH=14h

DS=Dirección del Segmento del FCB

DX=Desplazamiento de la dirección del FCB

(El nombre del archivo con su extensión, bloque ac tual, registroac tual y el tamaño del registro deben estar ya en el FCB)

Regresa:

AL=00 registro del archivo leido exitosamente

AL=01 fin de archivo,no hay datos en el registro

AL=02 DTA muy pequeño,fin de transferencia

AL=03 fin de archivo

Desde DE BUG metamos ahora el siguiente programa:

El Acceso a Disco

10-187

Page 195: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

MOV DX,5C ;dirección del FCB

MOV AH,0F ;abrir archivo

INT 21 ;llama a DOS

MOV AH,14 ;servicio de lectura

INT 21 ;llama a DOS

INT 20 ;vuelve a DE BUG

An tes de ejecutar el programa llenemos con la instrucción f laslocalidades 80h a FFh con un valor conocido. Estas localidades forman el Area de Transferenmcia de Datos (Data Trans fer Area o DTA) y es ellugar en memoria de donde se toman los datos para escribir en un archivoo se toman los datos del archivo y se colocan en ese sitio. Esto es:

El área de transferencia de datos (DTA) es el lugar pro vi sional enmemoria donde un registro de archivo es almacenado en su caminode o hacia el disco duro o flex i ble.

En la localidad 7Ch debemos colocar de antemano el número de registro a leer pero en este caso el archivo es tan pequeño que con el primerregistro basta. Usando el comado E7C pongamos un cero en esa localidad. Ejecutemos ahora el programa y revisemos con el comando D laslocalidades de la 80h a la FFh; encontramos el texto que contienennuestro archivo muestra. Al terminar el programa, esta localidad seincrementa en 1 pues ahora debe apuntar al siguiente registro por lo queuna segunda ejecución del programa nos daría el siguiente registro, estoes, una lectura secuencial.

Pasemos ahora a un programa más sofisticado de lectura secuencial.Para que este programa funcione, el archivo debe terminar con unsímbolo de fin de archivo (EOF, 1Ah) que la mayoría de los procesadorescolocan de forma automática:

;—————————————————————————————————————————————————

;SECUENCI: Lee un archivo ASCII y preséntalo en la pantalla

;ejecutar junto con el nombre del archivo

;—————————————————————————————————————————————————

dos EQU 21h ;llamada al SO

abre EQU 0Fh ;llamada al SO

lee EQU 14h ;llamada al SO

muestra EQU 2h ;llamada al SO

fcb EQU 5Ch ;llamada al SO

eof EQU 1Ah ;llamada al SO

Ensamblador

10-188

Page 196: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

;—————————————————————————————————————————————————

datos SEG MENT

ORG 7Ch

regnum DB ? ;número de registro

ORG 80h

dato DB 80h DUP(?) ;área DTA

datos ENDS

;—————————————————————————————————————————————————

secuencial SEG MENT ;programa prin ci pal

;—————————————————————————————————————————————————

prog PROC FAR

AS SUME CS:secuencial,DS:datos

inicio:

;Salva segmentos para el regreso

PUSH DS ;salva DS

SUB AX,AX ;0 en AX

PUSH AX ;coloca 0 en la pila

;Abre el archivo y coloca registrro en 0

MOV DX,fcb ;poner dirección de FCB dentro delsegmento

MOV AH,abre ;servicio de apertura

INT dos ;de la interrupción 21h

MOV regnum,0 ;primer registro en 7Ch

;lee registro en forma secuencial

lee_reg:

MOV DX,fcb ;apunta al FCB

MOV AH,lee ;servicio de lectura de

INT dos ;la interrupción 21h

;muestra el registro que se encuentra en DTA

MOV CX,80h ;número de caracteres

MOV BX,0 ;inicializa el apuntador

imprime:

MOV DL,[dato+BX] ;toma carácter

CMP DL,eof ;¿Llegamos al fi nal de archivo?

JE salir ;si, salir

MOV AH,muestra ;no, muestra

INT dos

INC BX ;incrementa el contador

LOOP imprime ;realiza 80h veces

JMP lee_reg ;y ve por otro registro del archivo

salir: RET ;termina y regresa a DOS

prog ENDP

El Acceso a Disco

10-189

Page 197: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

secuencial ENDS

END inicio

El programa requiere del nombre del archivo que queremos leer y ver en la pantalla como parámetro del programa: SECUENCI LEEME.TXT, el SO

se encarga entonces de llenar el FCB con los datos del archivo (en estecaso LEEME.TXT), algo sim i lar al comando N de DE BUG.

Otra cosa a notar es el manejo del registro DS y ES que el sistemaoperativo, por tratarse de un archivo tipo EXE, inicializa con los datos delmismo programa apuntando a los segmentos adecuados.

Existe también un traslape de 1 byte en tre el FCB y el DTA en la dirección80h. En el caso de acceso secuencial no hay problema pues el byte no esusado. Pero en el caso de acceso aleatorio se debe tener cuidado de noperderlo por lo que muchas veces se prefiere “mudar” el área de DTA aotro lado.

En nuestro siguiente programa introducimos las funciones de crear unarchivo y de escribir a él conjuntamente:

;—————————————————————————————————————————————————

;GUARDA: toma datos del teclado y guarda en un archivo

;—————————————————————————————————————————————————

dos EQU 21h ;llamada al SO

crear EQU 16h ;crear archivo

escribe EQU 15h ;despliega carácter

cierra EQU 10h ;cierra archivo

mem_prov EQU 0Ah ;memoria para el teclado

fcb EQU 5Ch ;área de con trol de archivo

cr EQU 0Dh ;ASCII de RE TORNO

lf EQU 0Ah ;ASCII de ALIMENTA LINEA

;——————————————————————————————————————————————————

datos SEG MENT

ORG 7Ch

regnum DB ?

ORG 80h

dato DB 80h DUP(?) ;área DTA

datos ENDS

;—————————————————————————————————————————————————-

guarda SEG MENT

Ensamblador

10-190

Page 198: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

prog PROC FAR

AS SUME CS:guarda,DS:datos

inicio:

;Guarda segmentos para regresar en paz

PUSH DS ;salva DS

SUB AX,AX ;colcoa 0 en AX

PUSH AX ;y empuja a la pila

;crea archivo, coloca contador de registro en 0

MOV DX,fcb ;FCB en DX

MOV AH,crear ;servicio de Crea archivo

INT dos ;de DOS

MOV regnum,0 ;0 en dirección 7Ch (número deregistro)

;limpia memoria llenando con re torno de línea

otra_linea:

MOV BX,0 ;apuntador de caracteres

MOV CX,80h ;cuenta de caracteres

borra:

MOV [BX+dato],cr ;CR en zona de datos

INC BX ;incrementa apuntador

LOOP borra ;repite 80h veces

;Toma línea del teclado

MOV dato-2,78 ;long. máxima de línea

MOV DX,OFF SET dato-2 ;dirección de DTA

MOV AH,mem_prov ;acepta del teclado una línea

INT dos

CMP dato-1,1 ;si no hay caracteres

JLE salir ;salir del programa

;inserta alimentación de línea

MOV BL,dato-1 ;coloca cuenta de caracteresaceptados

MOV BH,0 ;en registro BH

MOV [dato+BX+1],lf ;inserta alimentación de línea

;escribe registro al archivo en modo secuencial

MOV DX,fcb ;FCB en DX

MOV AH,escribe ;escribe en secuencia

INT dos

JMP otra_linea ;y acepta otra línea

;Cierra el archivo y sal a DOS

salir:

MOV DX,fcb ;FCB en DX

MOV AH,cierra ;función de cerra archivo

INT dos

RET

prog ENDP

El Acceso a Disco

10-191

Page 199: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

;——————————————————————————————————————————————————

guarda ENDS

END inicio

Los datos se introducen al programa línea a línea terminando con RE -

TORNO. Cuando introducimos un RE TORNO unicamente el programacierra el archivo y regresa el controla al SO. Se han introducido dosnuevas funciones en el programa como se resumen en las siguientes tab -las:

Ensamblador

10-192

Page 200: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Función de Crear un Archivo,INT 21h servicio 16h

Registros: AH=16h

DS=Dirección del Segmento del FCB

DX=Desplazamiento de la dirección del FCB

(El nombre del archivo con su extensión deben estar en el FCB)

Regresa:

AL=00 archivo creado exitosamente

AL=FF no hay espacio para crear archivo

Se debe tener cuidado con la función pues si el archivo ya existía seborra, dejándolo con longitud 0.

Función de Escritura Secuencial,INT 21h servicio 15h

Registros: AH=15h

DS=Dirección del Segmento del FCB

DX=Desplazamiento de la dirección del FCB

(El nombre del archivo con su extensión, bloque ac tual, registroac tual y el tamaño del registro deben estar en el FCB)

Regresa:

AL=00 registro del archivo escrito exitosamente

AL=01 el disco está lleno

AL=02 DTA muy pequeño, fin de transferencia

En la escritura secuencial, la interrupción se encarga de incrementar elnúmero de registro por nosotros dejándolo apuntando al siguiente. Si elregistro no es lo suficientemente grande como para llenar un área deldisco llamada sec tor, es colocado en una memoria tem po ral por el SO. De ahí es tomada cuando la longitud del sec tor es excedida o hasta que secierra el archivo guardando la información en ese momento presente en el archivo. Un sec tor tiene una longitud de 512 bytes y es la unidad básica de almacenamiento en archivos.

Ejercicio 10.2 Agregue al programa GUARDA una rutina que mande a lapantalla un CR y LF por cada línea introducida.

El Acceso a Disco

10-193

Page 201: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Ejercicio 10.3 Agrege las instrucciones necesarias para que el programaGUARDA nos advierta con un mensaje el nombre del archivo y nos solicite que comencemos a teclear. Agrege otra rutina para dar instruccionesespecíficas para el uso del programa.

Ejercicio 10.4 Si el usuario no proporcionó un nombre de archivo alprograma GUARDA, que el programa despliegue un mensaje de er ror ysalga de inmediato.

En los ejercicios anteriores use definiciones de mensajes en el área dedatos de forma similara a:

mensaj1 DB ‘Comience a introducir datos:$’

para posteriormente llamar:

MOV DX,OFF SET mensaj1

CALL despliega

10.3 Acceso Aleatorio

Una segunda forma de leer los registros de un archivo es de formaaleatoria, esto es, sin ningún orden en específico. Una razón por la que los accesos aleatorios son más fáciles de manejar es debido a que en losaccesos secuenciales se requieren de tres bytes:

· El primero en la dirección 7Ch para especificar el número deregistro a leer o escribir.

· El segundo y tervero en las direcciones 68h y 69h para especificarel número de bloque.

Cuando 127d registros han sido escritos al archivo, el bloque debeentonces incrementarse y el contador de registros colocarse en 0. Aunque es posible en un programa de ensamblador, cuesta también bastantetrabajo.

En una lectura/escritura aleatoria, se controla sólo el número de registroformado por 4 bytes que nos da un to tal muy grande de registros dentro de un archivo. El manejo de una palabra doble es directo con las instruccions

Ensamblador

10-194

Page 202: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

de ensamblador y el con trol se torna entonces sumamente sencillo ydirecto.

La función de lectura de un registro aleatorio es muy sim i lar a la de unosecuencial con la diferencia de que el contador no es incrementado deforma automática. El programa debe encargarse de insertar el númeroadecuado de registro en la zona del FCB del archivo an tes de cada lecturao escritura.

Función de Lectura Aleatoria,INT 21h servicio 21h

Registros: AH=21h

DS=Dirección del Segmento del FCB

DX=Desplazamiento de la dirección del FCB

(El nombre del archivo con su extensión, el tamaño del registro y el número de registro deben estar en el FCB)

Regresa:

AL=00 registro del archivo leido exitosamente

AL=01 fin de archivo,no hay datos en el registro

AL=02 DTA muy pequeño,fin de transferencia

AL=03 fin de archivo

El programa que presentamos a continuación lee un sólo registro decualquier parte de un archivo. El nombre del archivo se in tro duce comoparte del comando para ejecutar el programa y el número de registrocomo primer dato del programa.

;—————————————————————————————————————————————————

;LEEALEA: Lee registro en forma aleatoria de un archivo

;—————————————————————————————————————————————————

dos EQU 21h ;llamada al SO

abre EQU 0Fh ;abre un archivo

leer EQU 21h ;leer de un archivo aleatorio

muestra EQU 2h ;despliega carácter

tecla EQU 1h ;lee un carácter del teclado

fcb EQU 5Ch ;área de con trol de archivo

eof EQU 1Ah ;ASCII de fin de archivo

;——————————————————————————————————————————————————

datos SEG MENT

El Acceso a Disco

10-195

Page 203: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

ORG 7Dh ;registro aleatorio

aleatorio1 DW ? ;registro parte baja

aleatorio2 DW ? ;registro parte alta

ORG 80h

dato DB 80h DUP(?) ;área de transferencia de datos

datos ENDS

;—————————————————————————————————————————————————-

leealea SEG MENT

prog PROC FAR

AS SUME CS:leealea,DS:datos

inicio:

;Guarda segmentos para regresar en paz

PUSH DS ;salva DS

SUB AX,AX ;colcoa 0 en AX

PUSH AX ;y empuja a la pila

;abre el archivo

MOV DX,fcb ;FCB en DX

MOV AH,abre ;servicio de Abre archivo

INT dos ;de DOS

;Toma # registro del teclado y coloca en FCB

MOV ah,tecla ;función del teclado

INT dos

SUB AL,30h ;convierte de ASCII a binario

CBW ;convierte a palabra

MOV aleatorio1,AX ;coloca en FCB

MOV aleatorio2,0 ;y 0 en parte alta

;Lee registro del archivo

MOV DX,fcb ;en DX el FCB

MOV AH,leer ;lee de forma aleatoria

INT dos

;Muestra el registro del área de transferencia (DTA)

MOV CX,80h ;# de caracteres en CX (contador)

MOV BX,0 ;Inicializa apuntador

a_pantalla:

MOV DL,[dato+BX] ;toma carácter

CMP DL,eof ;¿Se llegó al fi nal?

JE salir ;si, salir

MOV AH,a_pantalla ;no, despliega en pantalla

INT DOS

INC BX ;ajusta el apuntador

LOOP muestra ;lazo de 80h veces

salir: RET ;regresa a DOS

prog ENDP

Ensamblador

10-196

Page 204: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

;——————————————————————————————————————————————————

leealea ENDS

END inicio

Para conservar el programa sencillo sólo se aceptan números del 0 al 9que se convierten de ASCII a binario restando 30h y la región del DTA sedeja en su lugar (dirección del 7Dh al 80h) aunque existen posiblesconflictos en la localidad 7Dh que resolvemos moviendo un cero despues de llenar la DTA y an tes de leer un registro.

El escribir a un registro secuencial sigue la misma mecánica que lalectura por lo que no nos entretendremos con ello. La únicarecomendación es no tratar de leer un registro que no existe y escribir sólo sobre registros que ya existen.

10.4 Manejadores de Archivos

A partir de la versión 2.0 de MS-DOS se prefiere que el manejo dearchivos, sus FCB y DTA sean realizados por el mismo sistemaoperativo. Al usar estos servicios de las interrupciones proporcionadaspor los diseñadores del SO, nos encontramos con tres diferenciasprincipales:

· 1. No hay FCB. Los parámetros varios del FCB han sido“absorbidos” por el SO y ya no son visibles al usuario, por lo queya no es necesario preocuparse de ellos. El nombre del archivo sereemplaza por nombre + extensión + camino completo seguido de un byte en cero y se le denomina ASCIIZ por el cero adicional.

· 2. No hay Registros. Al igual que el FCB, los registrosdesaparecen y son sustituidos por el número de bytes quequeremos leer/escribir/accesar de un archivo.

· 3. Manejo por medio de manijas. Las manijas son números decontrol de 16 bits que nos permite manejar el archivo por unareferencia simbólica en lugar de por nombre.

Otra mejora sustancial en el método de acceso a archivos es el manejouniforme de errores, siempre que una función genere un er ror, la banderade acarreo se fija (podemos probar la condición con un salto condicional

El Acceso a Disco

10-197

Page 205: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

JC) y el registro AX contiene el número de er ror de acuerdo a la siguientetab la:

Dec i mal Hex a dec i mal Er ror

1 01 Número de Función Inválida

2 02 Archivo no encontrado

3 03 Camino no encontrado

4 04 Demasiados archivos abiertos

5 05 Acceso denegado (atributo o código de acceso equivocados)

6 06 Manija inválida

7 07 Bloques de con trol de memoria destruídos

8 08 Memoria insuficiente

9 09 Bloque de dirección de memoria inválido

10 0A Ambiente inválido

11 0B Formato inválido

12 0C Código de acceso inválido

13 0D Datos inválidos

14 0E no se usa

15 0F Disco inválido

16 10 Intento de re mover el directorio ac tual

17 11 No es el mismo dispositivo

18 12 No hay más archivos

Al abrirse el archivo se le asigna un código de acceso que determina si elarchivo es de sólo lectura (código 0), de sólo escritura (código 1) o delectura y escritura (código 2). De la misma manera se le asigna unatributo en un byte:

· bit 0. Sólo lectura.

· bit 1. Archivo oculto.

· bit 2. Archivo de sistema.

· bit 3. No es archivo sino etiqueta de volumen.

Ensamblador

10-198

Page 206: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

· bit 4. No es archivo sino subdirectorio.

· bit 5. Indica que es un archivo.

El atributo de un archivo se puede cambiar usando el servicio 43h de lafunción 21h y se usa el registro CX para fijar el atributo.

Presentamos a continuación las distintas funciones para leer, escribir,crear, abrir, cerrar, etc. un archivo con manijas y un programa que integraalgunas de estas funciones como ejemplo:

Función de Abrir Archivo,INT 21h servicio 3Dh

Registros: AH=3Dh

DS=Dirección del Segmento de cadena ASCII+0

DX=Desplazamiento de la dirección de cadena ASCII+0

AL=Código de Acceso(0=lectura,1=escritura,2=lectura/escritura)

Regresa:

Bandera de acarreo(CF)

0 si no hay er ror, 1 si hay er ror

AX manejador de archivo o código de er ror

AL=02 DTA muy pequeño,fin de transferencia

(los errores posibles son 2,,4,,5 y 12)

El Acceso a Disco

10-199

Page 207: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Función Lee de Dispositivo o Archivo,INT 21hservicio 3Fh

Registros: AH=3Fh

BX=Manejador de archivo

CX=Número de bytes a leer

DS=Dirección del Segmento de la memoria de datos

DX=Desplazamiento dentro de la memoria de datos

Regresa:

Banderade

acarreo(CF)

0 si no hay er ror

AX # de bytes leidos, 0 si fin de archivo o código de er ror(posiblemente 5 ó 6)

Función Crear un Archivo,INT 21h servicio 3Ch

Registros: AH=3Ch

DS=Dirección del Segmento de la cadena ASCII+0

DX=Desplazamiento dentro del segmento de la cadenaASCII+0

CX=atributo del archivo

Regresa:

Banderade

acarreo(CF)

0 si no hay er ror

AX manejador de archivo si no hay er ror o código de er ror(posiblemente 3,4 ó 6)

Ensamblador

10-200

Page 208: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Función Escribe a Dispositivo o Archivo,INT 21hservicio 40h

Registros: AH=40h

BX=Manejador de archivo

CX=Número de bytes a escribir

DS=Dirección del Segmento de la memoria de datos

DX=Desplazamiento dentro de la memoria de datos

Regresa:

Banderade

acarreo(CF)

0 si no hay er ror

AX # de bytes escritos o código de er ror (posiblemente 5 ó 6)

Función Cierra Archivo,INT 21h servicio 3Eh

Registros: AH=3Eh

BX=Manejador de archivo

Regresa:

Banderade

acarreo(CF)

0 si no hay er ror

AX código de er ror si es que lo hay (posiblemente 6)

El Acceso a Disco

10-201

Page 209: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Función Posiciona Apuntador deLectura/Escritura,INT 21h servicio 42h

Registros: AH=42h

AL=00 Mover desde el inicio los bytes que señale CX:DX

AL=01 Mover apuntador desde la localidad ac tual+bytesseñalados por CX:DX

AL=02 Mover apuntador a fin de archivo+bytes señalados por CX:DX, si 0 regresa tamaño del archivo

BX=Manejador de archivo

CX=Número de bytes de desplazamiento dentro delarchivo (parte alta)

DX=Número de bytes de desplazamiento dentro delarchivo (parte baja)

Regresa:

Banderade

acarreo(CF)

0 si no hay er ror

DX apuntador a la nueva posición (parte alta)

AX apuntador a la nueva posición (parte baja) o código de er -ror (posiblemente 1 ó 6)

;—————————————————————————————————————————————————

;CREAARCH: Crea un archivo con manijas y escribe en él

;—————————————————————————————————————————————————

llama_dos EQU 21h ;servicios varios de DOS

datos SEG MENT ;De fine segmento de datos

nombre DB 50 ;nombre de archivo

DB ? ;bytes leidos

DB 50 DUP(?) ;mem. prov. del nombre

registro DB 80 ;long. del registro

DB ? ;bytes leidos

DB 80 DUP(80) ;mem. prov. delregistro

manija DW ? ;almacenamiento de manija

;zona de mensajes del programa

mensj1 DB 0Dh,0Ah,’Nombre del archivo con todo ycamino:’,0Dh,0Ah,’$’

mensj2 DB 0Dh,0Ah,0Dh,0Ah,’Datos: (termine conENTER)’,0Dh,0Ah,’$’

Ensamblador

10-202

Page 210: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

mensje DB ‘Er ror $’

crlf DB 0Dh,0Ah,’$’ ;nueva línea

datos ENDS ;fin del segmento de datos

;—————————————————————————————————————————————————

creaarch SEG MENT ;segmento de código

;—————————————————————————————————————————————————

principio PROC FAR ;proceso prin ci pal

AS SUME CS:creaarch,DS:datos

inicio:

;Guarda segmentos para regresar en paz

PUSH DS ;salva DS

SUB AX,AX ;coloca 0 en AX

PUSH AX ;y empuja a la pila

MOV AX,datos ;apunta a nuestros datos

MOV DS,AX ;y coloca en segmento

MOV DX,OFF SET mensj1 ;primer mensaje

MOV AH,09h ;función de despliegue

INT llama_dos

MOV DX,OFF SET nombre ;dirección nombre

MOV AH,0Ah ;toma del teclado

INT llama_dos

MOV DX,OFF SET crlf ;agraga nueva línea

MOV AH,09h ;función de despliegue

INT llama_dos

MOV BL,nombre+1 ;toma # bytes leidos

MOV BH,0 ;ajusta al palabra

MOV [nombre+BX+2],0 ;y agrega un cero (ASCIIZ)

;Crea el archivo con los datos proporcionados

MOV DX,OFF SET nombre+2 ;dirección del nombre

MOV CX,0 ;atributo de archivo nor mal

MOV AH,3Ch ;función crear archivo

INT llama_dos

MOV manija,AX ;toma la manija de AX

JC er ror ;si hay un er ror, salir

;toma el contenido del archivo del teclado

MOV DX,OFF SET mensj2 ;primero un mensaje

MOV AH,09h ;función de despliegue

INT llama_dos

otra_linea:

MOV DX,OFF SET registro ;dirección del registro

MOV AH,0Ah ;función de lectura del teclado

INT llama_dos

CMP registro+1,1 ;ver si hay caracteres

El Acceso a Disco

10-203

Page 211: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

JLE salir ;y si no salir

;Inserta salto de línea al registro

MOV BL,registro+1 ;coloca cuenta

MOV BH,0 ;y ajusta BX

MOV [registro+BX+2],0Dh ;agrega salto de línea

MOV [registro+BX+3],0Ah ;y nueva línea

ADD registro+1,2 ;ajusta al nuevo fi nal

MOV DX,OFF SET crlf ;encargarse de la pantalla

MOV AH,09h ;función de despliegue

INT llama_dos

;Escribe al archivo el registro

MOV BX,manija ;coloca manija en BX

MOV DX,OFF SET registro+2 ;dirección de mem. prov.

MOV CL,registro+1 ;# de bytes a escribir

MOV CH,0 ;y ajusta CX

MOV AH,40h ;función de escritura a archivo

INT llama_dos

JC er ror ;si hay un er ror salir

CMP AL,registro+1 ;Compara bytes escritos con los quesolicitamos escribir

JNE er ror ;si no son iguales hay un er ror

JMP otra_linea ;vuelve por más registros

salir: ;Cierre el archivo y termina

MOV BX,manija ;toma la manija

MOV AH,3Eh ;función de cierre de archivo

INT llama_dos

JC er ror ;si hay un er ror, despliega

RET ;termina normalmente

er ror: ;maneja los errores

MOV DX,OFF SET mensje ;el mensaje de er ror

MOV AH,09h ;función de despliegue

INT llama_dos

MOV BX,manija ;toma el # de er ror

CALL binhex ;convierte a hex a dec i mal y despliega

JMP salir ;termina cerrando

principio ENDP

;—————————————————————————————————————————————————

;Subrutina para convertir de binario a hex a dec i mal y desplegar en pantalla

;# a convertir en BX

binhex PROC NEAR

MOV CH,4 ;número de dígitos

rota: MOV CL,4 ;cuenta a 4 bits

ROL BX,CL ;desplaza dígito a la izq.

MOV AL,BL ;y pasa a reg. AL

Ensamblador

10-204

Page 212: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

AND AL,0Fh ;quita dígitos de la izq.

ADD AL,30h ;convierte a ASCII

CMP AL,3Ah ;¿Es mayor que 9?

JL despliega ;Despliega si ente 0 y 9

ADD AL,7h ;el dígito está en tre A y F

despliega:

MOV DL,AL ;Coloca ASCII en DL

MOV AH,2h ;Función de despliegue

INT llama_dos ;Llama a DOS

DEC CH ;¿Terminamos con los 4 dígitos?

JNZ rota ;Si aún no se termina

RET ;Regresa

binhex ENDP

;—————————————————————————————————————————————————

creaarch ENDS

;—————————————————————————————————————————————————

END inicio

Aunque en el manejo de archivos con manija no se requiere de registrossino de bytes, algunas veces es conveniente dividir la longitud to tal de unarchivo en registros de longitud fija que nos faciliten la tarea de encontrarinformación en cierto punto.

Como funciones auxiliares de la interrupción 21h no analizadasincluimos las siguientes

· Servicio 39h. Crear un directorio

· Servicio 56h. Renombre un archivo

· Servicio 41h. Borra un archivo

· Servicio 3Ah. Remueve un directorio

· Servicio 3Bh. Cambia a otro directorio

· Servicio 17h. Renombra directorio

Todas ellas documentadas en el apéndice D del man ual IBM Per sonalCom puter Disk Op er ating Sys tem

El Acceso a Disco

10-205

Page 213: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

10. Resumen

10. Problemas

10. Bibliografía

Revista PC Mag a zine EU números de 1980-93.

Barden Wil liam Jr. How to Pro gram Mi cro com puters. Sams & Com -pany 1987.

MASM 86 Co lum bia Data Prod ucts, EU 1986.

IBM Per sonal Com puter Tech ni cal Ref er ence. Apéndice D

Mor gan L. Chris to pher Blue book of As sem bly Rou tines for the IBM PCThe Waite Group USA 1987

Ensamblador

10-206

Page 214: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Capítulo 1111.1 Interfase a otros Lenguajes

Como ya hemos visto a lo largo del libro, el ensamblador es ideal paraproblemas en los que se requiere de rapidez o de el acceso a todos loscomponentes del sistema sin restricciones. Pero por otro lado esa es sudebilidad pues cuesta mucho trabajo y tiempo hacer programas enensamblador. En el otro extremo del espectro se encuentran los lenguajesde alto nivel como PASCAL o C donde es fácil realizar los programaspero muchas veces no obtienen la rapidez necesaria o el acceso a losdispositivos requerido.

La interfase se realiza con mucho mayor facilidad en los lenguajescompilados que en los interpretes pues el ligador se encarga de reunir losdistintos archivos OBJ en un sólo ejecutable uniendo las librerías ydemás elementos necesarios para el funcionamiento del programa.

El reunir dos objetos de distintos lenguajes tiene problemas específicosque analizaremos por separado en las siguientes secciones.

11.1.1 La Asignación de Memoria

Usualmente cuando se utiliza un ejecutable realizado en lenguaje dealto nivel no existe el problema de donde poner en memoria el programa.El interprete o el compilador se encarga de asignar las localidades. Lascosas cambian cuando se unen con uno de ensamblador pues es necesariotomar en cuenta más módulos independientes.

En el caso de un lenguaje compilado, el ligador desentraña laslocalidades requeridas y el problema se simplifica. En el caso de un

11-207

Page 215: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

interprete se requieren de ciertos trucos para encontrar como localizar elprograma en memoria sin conflictos.

11.1.2 Transfiriendo el Control a Ensamblador

Una vez localizado en memoria o ligado en nuestro programa ejecutable surge el problema de transferir el con trol a nuestro programa enensamblador para que realice su función y regrese su resultado alprograma de lenguaje de alto nivel. El traspaso se realiza generalmentecon una llamada lejana (FAR CALL) por lo que nuestros procedimientosen ensamblador deben de ser definidos como lejanos (PROC FAR). Otradiferencia importante es que no se requiere de guardar el segmento dedatos en la pila pues es ahora el lenguaje de alto nivel el que se encarga deestos menesteres.

11.1.3 Pasando Argumentos

En la gran mayoría de los casos se requieren de parámetros para que elprograma de ensamblador haga su trabajo y a la vez regrese resultados alprograma que lo llama. La información se pasa usualmente en forma deapuntadores (direcciones a las vari ables) que deben de ser resueltos en elprograma de ensamblador.

Se debe estar de antemano de acuerdo en los argumentos que se pasanen tre los programas y se debe también establecer un protocolo estrictoque se debe de seguir al pie de la letra para la interfase. En los interpretesdebe de conocerse a fondo el área de la pila donde el interprete almacenasu vari ables de forma de poder pasar estas direcciones como argumentos.En el caso de los compiladores el paso es sencillo pues además de colocarlas direcciones de las vari ables en la pila, coloca el valor de estas vari -ables también en la pila simplificando nuestra la bor en ensamblador.

En resumen si se planea un programa con muchas referencias aensamblador es casi in dis pens able usar un lenguaje compilado que nosfacilite la tarea de interfase y transmisión de argumentos en tre uno y otrolenguaje.

11.1.4 Pascal y Ensamblador

El sistema de interfase de todos los lenguajes de alto nivel compilados aensamblador siguen más o menos los mismos lineamientos que consistenen los siguientes pasos:

Ensamblador

11-208

Page 216: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

11.1.4.1 Definir la función.

El ligador no puede unir módulos in com pat ibles y que se declaren deforma incorrecta. Las funciones y datos en ensamblador deben dedefinirse como públicas con la directiva PUB LIC. El modelo dePASCAL debe de definirse como grande (.MODEL LARGE)

11.1.4.2 Entrar a la función.

Se debe de comenzar la función con dos instrucciones:

PUSH BP

MOV BP,SP

En esta secuencia se establece BP como el apuntador a la pilasemipermanente para facilitar la referencia a los argumentos. Inicializarde esta forma el apuntador asegura que BP permanezca constante du rante el proceso y se pueda hacer referencia a cada parámetro como undesplazamiento fijo de BP.

11.1.4.3 Apartar espacio para los datos lo cales(opcional)

Las funciones en ensamblador pueden usar la misma técnica que las dealto nivel para apartar espacio en la pila para sus datos provisionales. Aldecrementar SP en una cantidad par, aseguramos un espacio en la pila:

PUSH BP

MOV BP,SP

SUB SP,4 ;reserva 4 bytes (2 palabras) en la pila

.

.

.

MOV WORD PTR [BP-2],0 ;primera palabra a 0

MOV WORD PTR [BP-4],0 ;segunda palabra a 0

No se debe olvidar de incrementar SP an tes de salir de la función pararestaurar los apuntadores.

11.1.4.4 Conservar los valores de los registros

Se deben de conservar los valores de los registros SI, DI, SS y DS asícomo BP (ya guardado):

Interfase a otros Lenguajes

11-209

Page 217: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

PUSH BP

MOV BP,SP

SUB SP,4 ;reserva 4 bytes (2 palabras) en la pila

PUSH SI

PUSH DI

PUSH SS

PUSH DS

.

.

.

No se debe de olvidar de sacar los valores de la pila an tes de regresar dela función.

11.1.4.5 Acceder parámetros

Considere la pila una vez realizado los pasos anteriores (x es elprograma de alto nivel):

d Parámetro Dirección alta

d-2 Parámetro

d-4 ...

d-6 ...

d-8 CS de x

d-10 IP de x

d-12 BPÄ BP de x (salvado por y)

d-14 espacio para datoslo cales

(reservado por y)

d-16 espacio para datoslo cales

(reservado por y)

d-18 SI de x (salvado por y)

d-20 DI de x (salvado por y)

d-22 SS de x (salvado por y)

d-24 SPÄ DS de x (salvado por y)

El número de los parámetros es predefinido y podemos asignarlo de lasiguiente manera:

para1 EQU [BP+6] ;primer parámetro

para2 EQU [BP+8] ;segundo parámetro

para3 EQU [BP+10] ;tercer parámetro

11.1.4.6 Regresar valores (opcional)

El valor que se regresa se almacena en un registro y en gen eral obedece a la siguiente convención:

Ensamblador

11-210

Page 218: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

· Si es de 1 byte en AL

· Si es de 2 bytes en AX

· Si es de 4 bytes en DX y AX

11.1.4.7 Salir de la función

Al terminar nuestra función y regresar al programa que llama se debende realizar varios pasos:

· 1. Si se salvaron los registros SS, DS, SI o DI estos deben derestaurarse de la pila en orden inverso en el que fueron guardados

· 2. Si se asigno espacio para variables locales en la pila, elapuntador SP se debe de restaurar con la instrucción MOV SP,BP

· 3. Recuperar BP de la pila

· 4. Salir de la función con RET. Si se regresa a BASIC, FORTRAN o PASCAL agregar n a la instrucción RET para ajustar la pila alnúmero de parámetros. Si se regresa a C, la función se encarga deajustar la pila.

Mostramos el siguiente ejemplo de PASCAL para llamar a unasubrutina en la que se calcula A x 2B

PROGNAM prueba(entrada,salida);

FUNC TION eleva(a,b:IN TE GER):IN TE GER; EX TER NAL;

BE GIN

WRITELN(‘5 x 2^5 es’,eleva(5,5));

END.

Y la rutina en ensamblador es

codigo SEG MENT BYTE PUB LIC ;de fine el segmento como público

AS SUME CS:codigo

eleva PROC FAR

PUSH BP

MOV BP,SP

MOV AX,[BP+8] ;argumento 1 en AX

MOV CX,[BP+6] ;argumento 2 en CX

SHL AX,CL ;AX=AX x 2CX

POP BP

RET 4 ;Ajusta la pila al salir

eleva ENDP

codigo ENDS

Interfase a otros Lenguajes

11-211

Page 219: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

END

11.1.5 C y Ensamblador

Un programa en C puede llamar a uno en ensamblador tal como si setratase de otro modulo o función escrita en C. Para tal propósito se den deseguir los siguientes pasos:

· 1. Declare los procedimientos en C como lejanos (FAR)

· 2. Observe las siguientes convenciones:

– a) Regrese con un simple RET sin tratar de ajustar la pila

– b) Los parámetros se colocan en la pila en el orden inverso en elque aparecen en la lista de la llamada. El primer parámetro seencuentra en la parte baja de memoria.

– c) Los parámetros se pasan por valor a excepción de los arreglosque se pasan por referencia

· Incluya un signo de subrayado en frente de cada variable que se vaa compartir con otros módulos. Recuerde que C solo reconoce losprimeros 8 caracteres y que a menos de que se especifique locontrario, si importan las mayúsculas y minúsculas.

EXTERN INT eleva(int,int);

MAIN()

{

PRINTF(‘5 x 2^5 es %d\n’,eleva(5,5));

}

Y la rutina en ensamblador es

codigo SEG MENT BYTE PUB LIC ;de fine el segmento como público

AS SUME CS:codigo

_eleva PROC FAR

PUSH BP

MOV BP,SP

MOV AX,[BP+6] ;argumento 1 en AX

MOV CX,[BP+8] ;argumento 2 en CX

SHL AX,CL ;AX=AX x 2CX

POP BP

RET ;Salir sin ajustar la pila

_eleva ENDP

codigo ENDS

END

Ensamblador

11-212

Page 220: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

11.2 Programas Residentes

El uso de programas que terminan y quedan residentes en memoria (Ter -mi nate and Stay Res i dent, TSR) es una idea tan vieja como el del uso delsistema operativo. El primer programa que queda residente en memoriaesperando nuestras ordenes es el interprete de comandos del mismosistema operativo. ¿Por qué no ir un poco más allá y ex tender el conceptoa cualquier programa del usuario?

La idea suena atrayente y es un método efectivo de ex tender lasfunciones de un sistema operativo que no es multi-tareas ni re-entrantesin necesidad de modificarlo. El concepto básico detrás de los programasresidentes es el de crear una rutina (usualmente un programa corto deutilería), ejecutarla de forma que intercepte las rutinas de interrupciónque nos interesen y que ahora apunten a nuestro programa y de algunaforma ‘pegarlo’ al SO para que este se entere de que ahora tiene unadirección distinta de terminación y a partir de la cual la memoria prin ci -pal queda li bre para el usuario o los programas de aplicación del usuario.El programa de esta forma residente puede entonces realizar su funciónya sea de forma automática (In ter rupt Ser vice Rutine, ISR) o a peticiónnuestra (TSR).

Existen varios problemas técnicos para poder lograr que un programaresidente ejecute bajo las ordenes del SO pero todos ellos pueden serresueltos de una u otra forma.

Los pasos básicos de todo sistema que debe de quedar residente son:

· Conocer el tamaño del programa que debe de quedar residente.

· Interceptar el vector de servicio que atiende a una interrupción enparticular por medio de la cual nuestro programa ‘despertará’ yrealizará la función para la cual fue diseñado. Las más comunesson las del teclado o las del reloj interno del sistema (tomadas de la Tabla de Vectores de Interrupción).

· Al comenzar nuestro programa guardar todos los registros,banderas y segmentos para poder recuperarlos al salir.

· Al terminar nuestro programa, recuperar de la pila los registros,banderas y segmentos.

· Finalizar el proceso dejando el control a la rutina original deatención a la interrupción.

Interfase a otros Lenguajes

11-213

Page 221: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

En base a los lineamientos anteriores analizaremos algunos casos deprogramas residentes en las siguientes secciones.

Cada día es menos la necesidad de programas residentes con los nuevossistemas operativos que permiten las multi-tareas y que son re-entrantespudiendo dejar en un área de memoria el programa ejecutandose en eltrasfondo y de li bre acceso en cualquier momento. Sin em bargo, elestudio de este caso es interesante y nos permite conocer un poco más deldesarrollo de los sistemas operativos.

Todo programa que queda residente, por su propia naturaleza, vi olaalgunas o todas las reglas de un programa que se comporta‘adecuadamente’ ante un sistema operativo. El programa intercepta loscomandos dirigidos a otras rutinas y las modifica de acuerdo a supropósito por lo que puede causar ciertos conflictos si no es diseñado concuidado. Una regla para no violar los preceptos del sistema operativo yevitarse conflictos posteriores en el caso de cambio de versiones es nousar rutinas de interrupciones no documentadas y siempre usar losrecursos del sistema a través de las rutinas de interrupción que el propiosistema operativo proporciona.

11.2.1 Ensamblador Residente

El SO utiliza una serie de apuntadores, llamados bloques dealmacenamiento, que llevan la pista de la memoria que se asigna o quitade los programas que se ejecutan. Para cada programa que se ejecuta,estos apuntadores indican la dirección del prefijo del segmento delprograma (Pro gram Seg ment Pre fix o PSP) y la longitud del programa ensegmentos. De la misma forma, una bandera in dica si se uso la memoriaapuntada por el segmento de almacenamiento asignado al programa.

El proceso se torna entonces sencillo, se requiere de averiguar lalongitud del programa en párrafos, guardarla en el registro DX y llamar ala función 31h de la interrupción 21h del SO (manten proceso) o a lainterrupción 27h (termina pero queda residente).

Estas funciones se aseguran de que el programa quede residenteconservando el bloque asignado de almacenamiento, el PSP delprograma y el código del programa en memoria.

Ensamblador

11-214

Page 222: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Presentamos los siguientes programa en ensamblador que explota estastécnicas, es menester estudiarlo con cuidado para entender elfuncionamiento de una rutina que termina y queda residente.

; utileria para redireccionar impresora a pantalla

;***************************************************

dos_printer_io EQU 17h

dos_video_io EQU 10h

dos_func tion EQU 21h

dos_ter mi nate_res i dent EQU 27h

get_vec tor EQU 35h

set_vec tor EQU 25h

cseg SEG MENT

AS SUME CS:cseg,DS:cseg

ORG 100h

start:

JMP ini tial ize ;inicializa codigo

video_io DD ; guarda vec tor de video

printer_in ter cep tor PROC FAR

AS SUME CS:cseg, DS:cseg

STI ; pon interrupciones

OR AH,AH ; es una llamada a impresora?

JNZ pi2 ;no, regresa

MOV AH,14h ; atiENDe a pantalla

PUSHF ;empuja banderas para

AS SUME DS:NOTH ING ;simu larinterrupcion a pantalla

CALL video_io

pi2:

MOV AH,128 ;poner sta tus de imp. endesocupada

IRET ;salta servicio a impresora

printer_in ter cep tor ENDP

ini tial ize:

MOV BX,CS

MOV DS,BX

MOV AL,dos_video_io ;toma interrup de video

MOV AH,get_vec tor

INT dos_func tion

MOV video_io,BX ; y guardalo para uso pos te rior

MOV video_io[2],ES

Interfase a otros Lenguajes

11-215

Page 223: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

MOV BX,CS ;reemplaza vec tor deimpresora viejo

MOV DS,BX ;con el que apunta a estarutina

MOV DX,OFF SET printer_in ter cep tor

MOV AL,dos_printer_io

MOV AH,set_vec tor

INT dos_func tion

MOV BX,CS

MOV DS,BX

MOV DX,OFF SET ini tial ize

INT dos_ter mi nate_res i dent ;termina quedando residente

CSEG ENDS

END START

; es necesario que este instalado el ANSI.SYS

; en CONFIG.SYS con DE VICE=ANSI.SYS

TI TLE Anti CTRL-PRINTSCREEN

code_seg SEG MENT PARA PUB LIC ‘code’

AS SUME CS:code_seg, DS:code_seg, ES:code_seg,SS:code_seg

ORG 100h

start: JMP screen

;limpia pantalla,

;definir prtscr como “A” y ^P como “NO”

mes sage DB 27,’[2J’

DB 27,’[0;114;65p’

DB 27,’[16;66p’

DB ‘$’

screen PROC NEAR

MOV DX,OFF SET mes sage

MOV AH,09h

INT 21h

INT 27h

screen ENDP

code_seg ENDS

END start

Los programas del tipo TSR son una respuesta a la estructura de tareaúnica del sistema operativo para intentar que mas de un programafuncione a la vez.

En los programas anteriores debemos de diferenciar en tre losprogramas del tipo residentes (TSR) y los del tipo ISR (In ter rupt Ser vice

Ensamblador

11-216

Page 224: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Rutine). Estos últimos no interactuan con el usuario, su la bor essilenciosa pero de todas maneras útil y muchas veces necesaria.

Dentro de la categoría de programas del tipo TSR encontramos acalculadoras, agen das, alarmas, macro conversores, etc. En gen eral todoaquel programa que se ac tive por alguna combinacion de teclas paraejecutarse.

Dentro del t ipo ISR encontramos relojes, programas deredireccionamieto, memorias cache, co las de impresion (Spooler), vi rus,etc.

Recordemos que aunque los programas TSR e ISR redireccionan lasinterrupciones a sus propias rutinas, en gen eral, no sustituyen estasrutinas de interrupción por lo que al finalizar su tarea pasan el con trol aestas y envian la información sin cambio a su sucesor.

En el caso de que la rutina si reemplace a la de interrupción es necesarioutilizar como fi nal de la rutina la instrucción IRET en lugar de RET queseñala el fin de una rutina de interrupción.

11.3 Resumen

11.4 Problemas

11.5 Bibliografía

Revista PC Mag a zine EU números de 1980-93.

MASM 86 Co lum bia Data Prod ucts, EU 1986.

IBM Per sonal Com puter Tech ni cal Ref er ence. Apéndice D

Mor gan L. Chris to pher Blue book of As sem bly Rou tines for the IBM PCThe Waite Group USA 1987

Tischer Turbo Pascal In ter nals Aba cus USA 1990

Interfase a otros Lenguajes

11-217

Page 225: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Apéndice A.A.1 Las Instrucciones del 80x86

Tab la A.1 Registros

Registros gen er a les

AX acumulador

BX base

CX cuenta

DX datos

Grupo de apuntadores e índices

SP apuntador del stack

BP apuntador base

SI apuntador fuente

DI apuntador datos

IP apuntador de instrucción

F banderas del sistema

Registros segmentos

CS segmento de código

DS segmento datos

ES segmento ex tra

SS segmento pilas

A-219

Page 226: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Tab la A.2 Registros y su uso

REGISTRO OPERACION

AX Multiplica o di vide palabras

AL Multiplica o di vide bytes

AH Multiplica o di vide bytes

BX Tra duce

CX Operaciones con cadenas o contador enlazos

CL Rota o corre vari able

DX Multiplica o di vide palabras

SP Operaciones con la pila

SI Operaciones con cadenas

DI Operaciones con cadenas

IP No es accesible más que con saltos

Ensamblador

A-220

Page 227: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Tab la A.3 Banderas Principales

Bandera Función

OF saturación

DF dirección (operación con cadenas)

IF habilita interrupciones

TF trampa (ejecución paso a paso)

SF signo (resultado negativo)

ZF cero

AF acarreo auxiliar

PF pariedad (par)

CF acarreo

IOPL nivel de privilegio para E/S (2 bits)

NT tarea anidada

RF con tinua operación

VM modo vir tual

Apéndice A. Las Instrucciones

A-221

Page 228: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Ensamblador

A-222

Figura A.1 Segmentos y su uso.

Page 229: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Tab la A.4 Uso del Desplazamiento

Tipo de referencia Segmento base por omisión Segmento base alterno Desplazamiento

Traer instrucción CS Ninguno IP

Operación con pila SS Ninguno SP

Vari ables (excepto los quesiguen)

DS CS ES SS dirección efectiva

Fuente cadena DS CS ES SS SI

Destino cadena ES Ninguno DI

BP usado como registro base SS CS ES SS dirección efectiva

Tab la A.5 Formas de Direccionamiento

Forma Localización de los datos

Inmediato En la misma instrucción

Registro En el registro

Directo En la localidad de memoria apuntada por el desplazamientocontenido en la instrucción

Indirecto de Registro En la localidad de memoria apuntada por el desplazamientocontenido en el registro

Indexado o base En la localidad de memoria apuntada por la suma del índice oregistro base y el desplazamiento contenido en la instrucción

De base e índice condesplazamiento

La dirección de memoria se forma por la suma del contenido delregistro base el contenido del registro índice y undesplazamiento

Apéndice A. Las Instrucciones

A-223

Page 230: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Tab la A.6 Ventajas de la Memoria Segmentada

Lin eal Segmentada

Se debe proporcionar toda la dirección Se proporcionan las direcciones en dos o más par tes

Se limita el desarrollo fu turo de memorias más amplias

No hay relocalización dinámica de programas Sí hay relocalización dinámica de programas lo que permitemultitareas

No hay programación mod u lar

No hay manejo de memoria por lo que la protección de ésta no esfácil

Ensamblador

A-224

Figura A.2 Formas de direccionamiento.

Page 231: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Tab la A.7 Formas de Direccionamiento y Localización de los Datos

MODO LOCALIZACION EJEMPLO

Inmediato En la instrucción ADD CH,5F

Registro En el registro ADD BX,DX

Directo En la localidad de memoria apuntada por eldesplazamiento contenido en la instrucción

ADD vari able,BX

Registro En la localidad de memoria apuntada por eldesplazamiento contenido en el registro

ADD CX,[BX]

Indice o base En la localidad de memoria apuntada por lasuma del contenido del registro índice o basey el desplazamiento contenido en lainstrucción

ADD [SI+6],AL

Base e índice con desplazamiento La dirección de memoria es la suma delcontenido del registro base, más el contenidodel registro índice y un desplazamiento

ADD [BX+DI+5],DX

Dividimos las instrucciones en los siguientes grupos genéricos:

1.- Movimientos de registros y datos

2.- Multiplicación y división entre números decimales

3.- Suma, resta

4.- Corrimientos

5.- Operaciones con cadenas

6.- Traducción de bytes por tablas

7.- Interrupciones programables

8.- Lazos de programas

9.- Coordinar multiproceso y coproceso

10.- Prueba no destructiva de bits

Apéndice A. Las Instrucciones

A-225

Page 232: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Tab la A.8 Instrucciones de Transferencia

Mnemónico Descripción de su operación

MOV destino,fuente Mueve byte o palabra

PUSH fuente Empuja palabra a la pila

POP destino Saca palabra de la pila

PUSHF empuja banderas a pila

POPF saca banderas de la pila

XCHG op1,op2 intercambia el operador 1 con el operador 2

LAHF carga registro AH con las banderas

SAHF guarda en las banderas lo que hay en el registro AH

IN acc,puerto Carga en el acumulador con un byte o palabra del puerto

OUT puerto,acc Traspasa del contenido del acumulador hacia el puerto

LEA destino,fuente Carga dirección efectiva

LDS destino,fuente Carga apuntador en destino y registro DS

LES destino,fuente Carga apuntador en destino y registro ES

XLAT tra duce byte

Ensamblador

A-226

Page 233: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Apéndice A. Las Instrucciones

A-227

Figura A.3 Multiplicación y división.

Page 234: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Ensamblador

A-228

Figura A.4 Corrimientos y rotaciones.

Page 235: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Apéndice A. Las Instrucciones

A-229

Figura A.5 Diagrama interno de una 80486.

Page 236: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Tab la A.9 Instrucciones Aritméticas

Mnemónico Descripción de la Operación

ADD destino,fuente Suma byte o palabra

ADC destino,fuente Suma byte o palabra con acarreo

SUB destino,fuente Resta byte o palabra

SBB destino,fuente Resta byte o palabra con préstamo

INC destino Incrementa byte o palabra en 1

DEC destino Decrementa byte o palabra en 1

NEG destino Niega byte o palabra (complemento a 2)

CMP destino,fuente Compara byte o palabra

MUL fuente Multiplica byte o palabra sin signo

IMUL fuente Multiplica enteros (byte o palabra)

DIV fuente Di vide byte o palabra sin signo

IDIV fuente Di vide enteros (byte o palabra)

CBW cambia byte a palabra

CWD Cambia palabra a doble palabra

DAA Ajuste dec i mal para la suma

DAS Ajuste dec i mal para la resta

AAA Ajuste de ASCII para la suma

AAS Ajuste de ASCII para la resta

AAM Ajuste de ASCII para la multiplicación

AAD Ajuste de ASCII para la división

Ensamblador

A-230

Page 237: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Tab la A.10 Operaciones Lógicas

Mnemónico Descripción de la Operación

NOT destino Niega byte o palabra (complemento a 1)

AND destino,fuente Operación Y con byte o palabra

OR destino,fuente Operación O con byte o palabra

XOR destino,fuente Operación O EXCLUSIVA con byte o palabra

TEST destino,fuente Prueba byte o palabra

SHR destino,cuenta Corrimiento lógico a la derecha de byte o palabra

SAR destino,cuenta Corrimiento aritmético a la derecha de byte o palabra

SHL/SAL destino,cuenta Corrimiento a la izquierda de byte o palabra

ROR destino,cuenta Rota a la derecha byte o palabra

RCR destino,cuenta Rota a través del acarreo byte o palabra

ROL destino,cuenta Rota a la izquierda byte o palabra

RCL destino,cuenta Rota a la izquierda a través del acarreo byte o palabra

Tab la A.11 Instrucciones de Transferencia

Mnemónico Descripción de la Operación

JMP destino Salta a una localidad de memoria indicada en destino

Jcond destino Vea tab la A.12

LOOP destino Lazo

LOOPE/LOOPZ destino Lazo mientras Sea igual/Sea cero

LOOPNE/LOOPNZ destino Lazo mientras No sea igual/No sea cero

JCXZ destino Salta si CX=0

CALL destino Llama a una subrutina

RET (opciónalmente un valor) Regresa de una subrutina

INT tipo Interrupción

INTO Interrupción en caso de saturación

IRET Regresa de una interrupción

Tab la A.12 Saltos Condicionales

Apéndice A. Las Instrucciones

A-231

Page 238: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Con signo

JG/JNLE destino Mayor/no menor no igual

JGE/JNL destino Mayor o igual/No menor

JL/JNGE destino Menor/No mayor no igual

JLE/JNG destino Menor o igual/No mayor

JO destino Saturación

JS destino Signo

JNO destino No saturación

JNS destino No signo

Sin signo

JA/JNBE destino Arriba/No abajo o igual

JAE/JNB destino Arriba o igual/No abajo

JB/JNAE destino Abajo/No arriba o igual

JBE/JNA destino Abajo o igual/No arriba

No importa el signo

JC destino Acarreo

JE/JZ destino Igual/Cero

JP/JPE destino Pariedad/Pariedad par

JNC destino No acarreo

JNE/JNZ destino No igual/No cero

JNP/JPO destino No pariedad/Pariedad non

Tab la A.13 Instrucciones para Manipular Cadenas

Mnemónico Descripción de la Operación

MOVSB/MOVSW Mueve cadena de byte o palabra

CMPSB/CMPSW Compara cadena de byte o palabra

SCASB/SCASW Busca cadena de byte o palabra

LODSB/LODSW Carga cadena de byte o palabra

STOSB/STOSW Guarda una cadena de byte o palabra

Las instrucciones anteriores se utilizan con los siguientes prefijos:

REP Repite

REPE/REPZ Repite mientras sea Igual/Cero

REPNE/REPNZ Repite mientras no sea Igual/Cero

Ensamblador

A-232

Page 239: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Tab la A.14 Registros Dedicados para Operaciones con Cadenas (Tab la A.13)

Registro Operación

SI Indice (desplazamiento) de cadena fuente

DI Indice (desplazamiento) de cadena destino

ES segmento de la cadena destino

CX contador de repetición

AL/AX valor de búsqueda, destino para LODS, fuente para STOS

DF0=autoincrementa DI y SI, 1=autodecrementa DI y SI

ZF In dica fin de búsqueda/comparación

Tab la A.15 Instrucciones de Con trol de Proceso

Instrucción Acción

STC Fija bandera de acarreo

CLC Limpia bandera de acarreo

CMC Limpia bandera de complemento

STD Fija bandera de dirección

CLD Limpia bandera de dirección

STI Habilita interrupciones

CLI Deshabilita interrupciones

HLT Detener procesamiento hasta que se inicialice el circuito ohaya una interrupción externa

WAIT Espera a que test (pata externa física del circuito) esté en 1

ESC Escapa a procesador externo (coproceso)

LOCK Bloquea el bus du rante la siguiente instrucción

NOP No hacer nada (para rellenar tiempos)

Apéndice A. Las Instrucciones

A-233

Page 240: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

A.2 Errores Comunes al Ensamblar un Programa

1.- Lógica invertida Ej. JC (Salta si está el acarreo) cuando se deseasaltar cuando acarreo=0.

2.- Uso equivocado de direccionamiento Ej. MOV AX,var cuandoqueremos MOV AX,off set var.

3.- Empujar y no sacar de la pila.

4.- Usar un registro para valor tem po ral y llamar una subrutina que lousa.

5.- Olvidar poner en CX el número de repeticiones cuando se entra a unlazo.

6.- Creer que una instrucción afecta a una bandera.

7.- Olvidar inicializar un registro.

8.- Olvidar el orden destino fuente.

9.- Contar mal los ciclos Ej. del area 100 a 103 debe haber 4 ciclos, no 3.

10.- Incrementar contadores de lazos en lugares equivocados, o noincrementarlos.

11.- Olvidar salvar registros y banderas en programas de manejo deinterrupciones, lo que da por resultado bloqueos aleatorios.

12.- No poner espacio de pila suficiente en un programa, pues en elcurso de este pueden ocurrir interrupciones y saturar la pila.

Ensamblador

A-234

Page 241: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Apendice BInterrupciones

S e r v i c i o(AH=)

Interrupción Descripción Parámetros Regresa

02h 21h Despliega carácter en pantalla DL=carácter (ASCII) -

- 20h Regresa a programa su per vi sor - -

01h 21h Lee un carácter del teclado - AL=carácter leido del teclado

09h 21h Muestra una cadena en pantalla DS:DX=dirección de la cadenaterminada con $

-

0Ah 21h Lee cadena del teclado DS:DX=dirección de memoriapro vi sional para contener lacadena

1er byte memoriaprov.=máximo # de carácters aser leidos

2do byte memoria prov.=#carácteres leídos

05h 21h Imprime carácter DL=carácter a imprimir -

0Bh 21h Verifica entrada estandard - AL=FF hay un carácteresperando

AL=00 no hay carácteresperando

00h 10h Tipo de despl iegue(color,mono,etc.)

01h 10h Tipo de cur sor

02h 10h Posición del cur sor

03h 10h Lee posición del cur sor

04h 10h Lee posición de la pluma de luz

05h 10h Selecciona página de video activa

B-235

Page 242: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

06h 10h Desplaza pantalla hacia arriba

07h 10h Desplaza pantalla hacia abajo

08h 10h Lee atributo/carácter de pantalla

09h 10h Escribe atr ibuto /carácter apantalla

0Ah 10h Escribe carácter a pantalla

0Bh 10h Escoge paleta de color

0Ch 10h Dibuja un punto a pantalla

0Dh 10h Lee punto de pantalla

0Fh 10h Regresa estado de video

10h 10h Generador de carácteres

- 11h Información del equipo - bit 0 coprocesador

bit 4,5 tipo de video

bit 7,6 # lectoras de disco

bit 9,10,11 #puertos RS-232

bit 13 joy stick

bit 14,15 #puertos paralelos

- 12h Tamaño de la memoria - AX=# bytes

2Ah 21h Pide fecha del sistema - CX=año (1980 a 2099)

DH=mes (1 al 12)

DL=día (1 al 31)

2Bh 21h Fija fecha del sistema mismos que para la 2Ah -

2Ch 21h Pide hora del sistema - CH=hora, CL=minuto

DH=segundos, DL=1/100segundos

2Dh 21h Fija hora del sistema mismos que para la 2Ch -

30h 21h Pide versión de DOS - AX=versión

38h 21h Información del país DX=Dirección de buffer de 34bytes

País en buffer

0Fh 21h Abrir archivo con manija DS=Dirección del Segmento delFCB

AL=00, el archivo se encontró yabrió

DX=Desplazamiento de ladirección del FCB

AL=FF, El archivo no existe

Ensamblador

B-236

Page 243: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

FCB, # de disco,tamaño deregistro,fecha,tamaño archivo,#bolque,etc.

(El nombre del archivo con su extensión deben de estar ya en el FCB)

4Eh 21h Busca primer archivo CS:DI=archivo a buscar DTA 0B0h

4Fh 21h Busca siguiente archivo CS:DI=archivo a buscar DTA 0B0h si AL=18 no seencontro

57h 21h Fija/toma datos de fecha y hora de archivo

Apéndice B. Las Interrupciones

B-237

Page 244: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

Índice

!

804861-27

A

acceso aleatorio1-23, 10-194

acceso directo a memoria5-88

acceso secuencial1-23

acceso secuncial10-183

acumulador1-9

ADC7-132

ADD7-131

AND6-114

ASCII3-67

ASCIIZ10-197

asignación de memoria11-207

AS SUME4-82

B

BCD3-63

BIOS2-34

bit1-2, 3-64

Bresenham9-177

buffer5-88

bus1-4

Introducción

239

Page 245: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

byte1-3, 3-65

BYTE PTR5-102

C

C y ensamblador11-212

CALL7-136

carácteres de con trol3-68

CLD8-152

CMP6-110

CMPS8-152

código fuente2-35

código Grey3-67

código objeto2-35

códigos3-67

COM4-83

compilador2-45

complemento3-64

complemento a 13-66

complemento a 23-66

complemento a 93-64

conjunto de instrucciones2-38

contador de programa1-10

conversión binario-dec i mal3-58

conversión dec i mal-binario3-59

Ensamblador

240

Page 246: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

corrimientos7-128

CPU1-2 - 1-3, 1-19

D

DB4-83

DD4-83

de bug4-78

DEC7-132

desbordamiento3-65

dirección1-3, 1-25

dirección efectiva2-42

direccionamiento

directo a memoria2-42

Implícito2-41

indirecto2-42

memoria2-41

relativo2-42

directivas de ensamblador2-39

DIV7-133

división en otros sistemas3-60

DMA5-88

DOS7-121

DTA10-183

DUP4-83

Introducción

241

Page 247: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

DW4-83

E

E/S1-2, 5-87

mapa de memoria5-88

E/S por interrupción5-88

E/S programada5-87

END4-82

ENDP7-135

ENDS4-82

ensamblador2-36

entrada/salida5-87

EPROM1-27

EQU4-82

exceso 33-64

EXE4-83

F

FCB10-183

H

hard ware2-33

hex a dec i mal3-61

I

I/O1-2

IBM1-27

Ensamblador

242

Page 248: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

IDIV7-133

IMUL7-133

IN6-117

INC6-108

in put/out put5-87

instrucción1-8

INT5-94, 6-105

interfase a otros lenguajes11-207

intérprete2-45

interrupción

impresora7-125

no mascarillable5-93

pantalla7-123

teclado7-122

ISR11-213, 11-216

J

JMP6-106

juego de instrucciones1-3

L

LA BEL BYTE9-177

LA BEL DWORD9-177

LA BEL WORD9-177

Leibnitz3-56

Introducción

243

Page 249: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

lenguaje de máquina2-36

lenguajes de alto nivel2-44

LOOP6-109

LOOPE6-110

LOOPNE6-110

M

macroinstrucción1-18

macroprograma1-19

manijas10-197

masm4-81

memoria1-2

memoria auxiliar1-22

memoria de alta velocidad1-21

memoria de lectura escritura1-25

memoria de respaldo1-22

memoria de sólo lectura1-25 - 1-26

memoria de sólo lectura programable y borrable1-27

memoria interna1-21

memoria no volátil1-27

memoria prin ci pal1-21

memoria secundaria1-22

memoria volátil1-27

microinstrucción1-18

Ensamblador

244

Page 250: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

microprograma1-18

microprogramación1-18

mnemónico1-12

MOV5-95

MOVS8-152

MOVSB8-152

MOVSW8-152

MUL7-133

multiplexión1-17

multiplicación en otros sistemas3-60

N

NEG6-114

NOP7-135

NOT6-114

O

OR6-114

OUT6-117

P

PAGE7-138

paginación2-42

palabra3-65

palabra de dirección1-25

paridad1-7

Introducción

245

Page 251: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

paridad impar1-7

paridad par1-7

párrafo1-31

Pascal y ensamblador11-208

pila5-91, 8-141

PIXEL9-163

POP8-142

POPF8-150

PROC7-135

procesador de comandos2-34

programas2-33

programas residentes11-213

PROM1-27

PSP11-214

PUSH8-142

PUSHF8-150

R

RAM1-25

RCL7-130

RCR7-130

registro1-9

registro contador de datos1-9

registro de estado1-15

Ensamblador

246

Page 252: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

registro de instrucción1-10

REP8-152

REPE8-154

REPNE8-154

REPNZ8-154

representación con signo3-65

REPZ8-154

resta en otros sistemas3-60

RET7-136

ROL7-130

ROM1-25 - 1-26

ROR7-129

rotaciones7-128

rutina de servicio de interrupción5-91

S

SAL7-130

saltos cercanos6-107

saltos condicionales6-110

saltos cortos6-107

saltos de índice6-107

saltos lejanos6-107

SAR7-130

saturación3-65

Introducción

247

Page 253: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

SBB7-132

SCAS8-152

SEG MENT4-82

SEG MENT AT9-171

SHL7-130

SHR7-130

sistema base dos3-56

sistema binario3-56

sistema dec i mal3-55

sistema notacional3-56

sistema operativo2-33

sistemas numéricos3-53

soft ware2-33

STD8-152

SUB7-131

suma en otros sistemas3-60

T

TEST6-114

tiempo de acceso1-23

TSR11-213

U

UAL1-19

unidad aritmética y lógica1-19

Ensamblador

248

Page 254: Ensamblador - Monografias.com · secuencias en ensamblador, aunque algunos de ... debemos ensuciarnos las manos con ensamblador. ... • Fase 4 Conjuntar todos los elementos anteriores

unidad de con trol1-17, 1-20

unidad de memoria1-20

unidad de procesamiento cen tral1-3, 1-19

UPC1-2 - 1-3, 1-19

V

vec tor de interrupciones5-92

video9-163

W

WORD PTR5-102

X

XOR6-114

Introducción

249