Apuntes de Lenguajes de Interfaz
Apuntes de Lenguajes de Interfaz
Apuntes de Lenguajes de Interfaz
Madero
Capítulo I.
Organización de la
computadora digital.
1
1.1.- Introducción.
Una computadora digital, en su forma más simple, consta de una Unidad Central de
Proceso, una Unidad de Memoria y una Unidad de Entrada/ Salida. Estas unidades están
interconectadas mediante un conjunto de líneas de comunicación que recibe el nombre de
BUS.
2
Figura 1.1. Organización Básica.
Dentro del BUS existen líneas para dirección, datos y señales de control.
Un conjunto de líneas sirve para especificar la dirección de una celda, otro conjunto
sirve para transferir el dato que se desea leer o escribir en esa celda y otras líneas se usan
para indicar el tipo de operación que se desea realizar. Existen, además, otras líneas que se
utilizan para controlar y sincronizar la operación de la memoria con el resto de la
computadora digital.
Para realizar este tipo de operación sobre la memoria, las líneas de dirección deben
tener la dirección de la celda en la cual se desea almacenar el dato o la instrucción, que se
desea guardar y las líneas de transferencia de datos deben tener el dato o instrucción que se
desea guardar y la línea de escritura se activa. Cuando se inicia la operación mediante las
líneas de sincronización, la unidad de memoria almacena el dato o la instrucción en la celda
de memoria especificada.
3
1.2.2.- Unidad Central de Proceso (CPU).
1.2.3.- Registros.
La unidad central de proceso también cuenta con una serie de registros utilizados para
ciertos propósitos. Un registro es una celda similar a una de las celdas de memoria y puede
almacenar un dato o una instrucción, dependiendo del registro de que se trate.
Para que un usuario de una computadora digital pueda ver y analizar los resultados de
un programa, es necesario que se envíen a algún dispositivo periférico como una pantalla
de video o una impresora. Cada dispositivo periférico debe tener asignada una dirección
única para poder identificarlo.
La forma en que estos datos serían enviados al dispositivo es similar a la forma en que
se guardarían en la unidad de memoria.
Dentro del bus existen líneas que indican si la operación de lectura o escritura debe
ser realizar por la unidad de memoria o por la unidad de entrada/ salida.
Aunque hay diferentes diseños de bus, las líneas de cualquier bus pueden clasificarse
en tres grupos de función (fig. 1.2): datos, dirección y líneas de control. Además existen
líneas de distribución de potencia que suministran energía a los módulos conectados.
4
Figura 1.2. Buses principales de una computadora.
Las líneas de datos proporcionan un camino para mover los datos entre los módulos
del sistema. Estas líneas se llaman en conjunto, el “BUS DE DATOS”. El bus de datos
consta de por ejemplo 8, 16, o 32 líneas separadas, a este número de líneas se hacen
referencia como la “anchura del bus de datos”.
5
Como cada línea puede llevar sólo un bit a la vez, el número de líneas determina el
número de bits que pueden transferir a un tiempo. La anchura del bus de datos es un factor
clave para determinar la ejecución general del sistema.
Las líneas de dirección se utilizan para designar el origen o el destino de los datos en
el bus de datos. Por ejemplo, si la CPU desea leer una palabra de datos (8,16,32 bits) de la
memoria, coloca la dirección de la palabra deseada en la línea de dirección. Es claro que la
anchura del bus de direcciones determina la máxima capacidad posible de memoria del
sistema, aplicado la siguiente ecuación:
Donde:
N= Número de líneas del bus de dirección.
Además, por general las líneas de dirección son empleadas también para direccionar
los puertos de E/S.
Las líneas de control se utilizan para controlar el acceso y el uso de los datos y las
líneas de dirección. Puesto que los datos y las líneas de dirección se comparten por todos
los componentes, debe existir un medio para controlar su uso. Las señales de control
transmiten tanto el comando como la información de temporización entre módulos del
sistema. Las señales de temporización indican la validez de los datos y de la información de
dirección. Las señales de comando especifican las operaciones a efectuarse. Es común que
las líneas de control incluyan:
Escritura a E/S: Causa que los datos que están en el bus salgan hacia el puerto de
E/S direccionando.
Lectura de E/S: Causa que se coloquen en el bus los datos del puerto de E/S
direccionar.
6
Solicitud de interrupción: Indica que una interrupción esta pendiente.
El bus se extiende a través de todos los componentes del sistema, cada uno de los cuales
se conecta a algunos o todas las líneas del bus. Un arreglo físico muy común se describe en
la figura 1.3.
BUS
CPU
MEMORIA
E/S
7
Un ejemplo de dedicación funcional es el uso de líneas de dirección y de datos separados
dedicados, lo cual es común para muchos buses. Sin embargo, la información de datos y de
dirección puede transmitirse sobre el mismo conjunto de líneas usando una línea de control de
dirección valida.
A este método de usar las mismas líneas para múltiples propósitos se le conoce
como multiplexeo en tiempo.
La ventaja del multiplexeo en tiempo es el uso de muy pocas líneas, lo cual ahorra
espacio y, casi siempre, costo. La desventaja es que se necesita circuitería más compleja
dentro de cada módulo. También hay una disminución potencial en el desempeño ya que
ciertos sucesos que comparten las mismas líneas no pueden tener lugar en paralelo.
Dedicación física se refiere al uso de múltiples buses, cada uno de los cuáles
conecta solo un subconjunto de módulos. Un ejemplo característico es el uso de un bus de
E – S para interconectar todos los módulos de E – S; este bus se conecta al bus principal
por medio de algún tipo de módulo adaptador de E – S. La ventaja potencial de la
dedicación física es un rendimiento alto, debido a que hay menos contención de bus. Una
desventaja, sin embargo, es el incremento en el tamaño y costo del sistema.
Tabla 1.1. Elementos de diseño de buses.
Método de arbitraje.
8
designar a un dispositivo como maestro (o amo), ya sea la CPU o un módulo de E – S.
Entonces, el maestro puede iniciar una transferencia de datos (lectura o escritura, por
ejemplo) con algún otro dispositivo, el cuál actúa como esclavo para este intercambio en
particular.
Temporización.
La anchura del bus de datos tiene un impacto en el desempeño del sistema: entre
más amplio sea, mayor será el número de bits que se transfieran a la vez. La anchura del
bus de dirección tiene un impacto en la capacidad del sistema: entre más amplio sea, más
grande será el rango de localidades que puedan ser referenciadas.
Todos los buses soportan transferencias tanto de escritura (maestro a esclavo) como
de lectura (esclavo a maestro). En el caso de un bus multiplexado de dirección – datos,
primero se utiliza el bus para especificar la dirección y después para la transferencia de
datos. Para una operación de lectura, hay por lo general una espera mientras el esclavo está
buscando los datos para colocarlos en el bus. Para una lectura o escritura, también puede
haber un retraso si es necesario pasar por el arbitraje a fin de ganar el control del bus para el
resto de la operación (por ejemplo, apoderarse del bus para solicitar una lectura o una
escritura, después apoderarse él otra vez para llevar a cabo una lectura o escritura).
9
una operación de escritura, el maestro pone los datos en el bus de datos tan pronto como la
dirección se ha estabilizado y el esclavo ha tenido la oportunidad de reconocer su dirección.
Para una operación de lectura, el esclavo pone los datos sobre el bus de datos tan pronto
como ha reconocido su dirección y ha buscado los datos.
1.4 La memoria.
Ubicación Desempeño.
CPU Tiempo de acceso.
Interna (principal) Tiempo de ciclo.
Externa (secundaria) Razón de transferencia.
10
Unidad de Transferencia Características físicas.
Palabra Volátil / No volátil
Bloque Borrable / No borrable
Iniciemos con el aspecto más visible de la memoria: su localización. Hay tanto
memoria interna como externa para la computadora. La memoria interna se considera
equivalente con frecuencia a la memoria principal. La memoria externa consiste en
dispositivos periféricos de almacenamiento, tales como disco y cinta, que son accesibles a
la CPU vía controladores de E – S.
Una de las distinciones más agudas entre tipos de memoria es el método de acceso a
las unidades de datos. Pueden distinguirse tres tipos:
11
registro arbitrario es altamente variable. Las unidades de cinta son de acceso
secuencial.
TN = TA + (N/R)
Donde:
12
Una variedad de tipos físicos de memoria se ha empleado. Los dos más comunes en
la actualidad, son la memoria de semiconductor, que utiliza la tecnología LSI o VLSI, y la
memoria de superficie magnética, que se utiliza para el disco y la cinta.
Varias características físicas de almacenamiento de datos son importantes. En una
memoria volátil, la información decae en forma natural o se pierde cuando la potencia
eléctrica se apaga. En una memoria no volátil, la información una vez registrada permanece
sin deterioro hasta que se cambia de manera deliberada. No se necesita potencia eléctrica
para retener la información. Las memorias de superficie magnética son no volátiles. La
memoria de semiconductor puede ser volátil o no volátil. La memoria no borrable no puede
ser alterada, excepto mediante la destrucción de la unidad de almacenamiento. La memoria
de semiconductor de este tipo se conoce como memoria de solo lectura (ROM, read – only
– memory). Por necesidad, una memoria práctica no borrable también debe ser no volátil.
Todos los tipos de memoria que se estudiarán son de acceso aleatorio. Es decir, las
palabras individuales de la memoria se accesan en forma directa por medio de la lógica de
direccionamiento interalambrada.
La tabla 1.3 lista los principales tipos de memoria de semiconductor. Él más común se
conoce como memoria de acceso aleatoria (RAM, Random Access Memory), Esto es, claro
está, un error en el uso del término, pues todos los tipos enlistados son de acceso aleatorio.
Una característica que distingue a la RAM es que permite tanto leer desde la memoria
como escribir con facilidad y rapidez información nueva en la memoria. Tanto la lectura como
la escritura se logran mediante el uso de señales eléctricas.
La otra característica distintiva de la RAM es que es volátil. Una RAM debe contar
con un suministro de energía constante. Si el suministro de energía se interrumpe, los datos
se pierden. Por ello, la RAM solo se puede usar como medio de almacenamiento temporal.
13
La tecnología de la RAM se ha dividido en dos: estática y dinámica. Una RAM
dinámica se compone de celdas que almacenan datos bajo la forma de cargas en
capacitores. La presencia o ausencia de carga en un capacitor se interpreta como un 1 o un
0 binario. Como los capacitores tienen una tendencia natural a descargarse, las RAM
dinámicas necesitan refrescado de cargas periódico para actualizar el almacenamiento de
datos.
La RAM estática y dinámica son volátiles. Una celda de memoria dinámica es más
simple y por ello más pequeña que una celda de memoria estática. Por eso, una RAM
dinámica es más densa (celdas más pequeñas = más celdas por unidad de área) y menos
costosa que la RAM estática correspondiente. Por otra parte, la RAM dinámica requiere el
apoyo de circuitos de refrescado. Por último, las RAM estáticas, en general, son en cierta
forma más veloces que las dinámicas.
Existen varios tipos de chips de RAM dinámica. El tipo más antiguo que continua
en uso es la DRAM FPM. (Modo de página rápida, Fast Page Mode) internamente, la
organización es una matriz de bits; el hardware presenta una dirección de renglón y luego
recorre las direcciones de columna.
La DRAM FPM esta siendo reemplazada gradualmente por la DRAM EDO (salida
de datos extendida, Extended Data Output), que permite iniciar una segunda referencia a la
memoria antes de que la anterior se haya completado.
Este sencillo uso de conductos nos hace que una sola referencia a la memoria sea
más rápida, pero si mejora el ancho de banda de la memoria, que produce las palabras por
segundo.
Tanto los chips FPM como los EDO son asíncronos, lo que significa que las líneas
de dirección y de datos no están controladas por un mismo reloj. En contraste, la SDRAM
(DRAM sincrónica) es un híbrido de RAM estática y dinámica y es controlado por un solo
reloj sincrónico.
14
Tabla 1.3. Tipos de Memorias de Semiconductor.
Las ROM son mucho más económicas que las RAM, cuando se producen en
grandes cantidades, pues así el costo de elaborar una máscara se diluye. Sin embargo, estas
memorias son inflexibles, por que no pueden modificarse después de su fabricación, no hay
espacio para errores, si un bit es incorrecto, todo el lote de la ROM se debe desechar.
Una alternativa menos cara es usar la PROM ( ROM Programable). Una PROM es
parecida a una ROM, excepto que puede programarse (una vez) en el campo, lo que elimina
el retraso por surtido.
15
Muchas PROM contienen una matriz de diminutos fusibles. Un fusible específico puede
quemarse seleccionando su renglón y columna y aplicando después un voltaje alto a una
terminal especial del chip.
Al igual que la ROM, la PROM no es volátil y solo se puede escribir en ella una vez. En
la PROM el proceso de escritura se ejecuta de manera eléctrica y lo puede llevar a cabo un
consumidor o un distribuidor después de la fabricación del chip original. Se requiere equipo
especial en el proceso de escritura o de “programación”. Las PROM proporcionan flexibilidad
así como ventajas. La ROM es conveniente para altos volúmenes de producción.
16
posible borrar bloques de memoria en vez de un chip completo. Sin embargo, la memoria flash
no proporciona borrado a nivel de byte. Como la EPROM, la memoria flash sólo usa un
transistor por bit y por ello logra la densidad alta (en comparación con la EEPROM) de la
EPROM.
Organización.
Presentan dos estados estables (o semi – estables), que pueden emplearse para
representar el 1 y el 0 binarios.
Puede escribirse en ellas (al menos una vez) para fijar su contenido.
17
Figura 1.4. Funcionamiento de una celda de memoria.
Capítulo II.
El P 8086/8088.
18
2.1 Historia de los microprocesadores Intel.
Al 4004 lo sucedieron el 8008 en 1972 y en 1974 el 8080, cada vez logrando mayor
capacidad. En 1978, Intel comenzó a comercializar el procesador 8086, un ambicioso chip
de 16 bits potencialmente capaz de ser el corazón de computadoras de propósito múltiple.
El 8086 se comercializó en versiones desde 5 y hasta 10MHz.
IBM adoptó al hermano menor del 8086 (el 8088, un procesador con un bus de
datos interno de 16 bits, pero con el bus externo de 8 bits, lo que permitía aprovechar
diseños y circuitos para sistemas de 8 bits) para basarse en él y lanzar la línea de
computadoras más exitosa de la historia: el IBM PC (1981) y el IBM PC/XT (eXtended
Technology) (1983).
El éxito de esta serie fue tal que a partir de ese momento, todos los CPU’s de Intel
mantuvieron una estricta política de compatibilidad hacia atrás - Todo CPU fabricado por
Intel desde ese momento y hasta el 2001 es capaz de ejecutar código compilado para
cualquiera de sus predecesores.
Al 8086 lo sucedió el 80286 en 1982 (en el cual se basó la IBM PC/AT, 1985). Este
chip, de 24/16 bits, implementó el modo protegido de ejecución, sentando las bases para la
19
aparición de los verdaderos sistemas multitarea de escritorio. El 80286 apareció a 6MHz, y
a lo largo de los años llegó hasta los 12MHz. Hubo varios sistemas operativos que
aprovecharon su modo protegido para ofrecer multitarea real, tales como las primeras
versiones de OS/2, o Xenix.
Poco después hizo su aparición el Pentium Pro, una versión orientada a servidores
que incluía la caché de segundo nivel en el mismo encapsulado que el procesador.
Desgraciadamente su elevado precio supuso un freno a su expansión.
20
Paralelamente al Pentium II dos familias de CPU’s fueron anunciadas: El Celeron,
que es similar a los Pentium pero con menos memoria caché y, por consiguiente, menor
precio y velocidad, y el Xeon, orientado a servidores, con más memoria caché - y claro
está, mucho mayor costo.
En 2001, tras una muy larga etapa de desarrollo fue anunciado el Itanium. Este es el
primer CPU desde 1978 que produce Intel que no es compatible con la arquitectura x86 -
esta nueva arquitectura de 64 bits es denominada IA64. Esta nueva arquitectura no ha
tenido el efecto que se vaticinaba en un principio, en parte por la carencia de software listo
para ser utilizado y en parte porque la velocidad es ligeramente menor a la de la
arquitectura i386. Hoy en día, la competencia se pone más difícil aún para Intel, pues AMD
-compañía rival de Intel- anunció la arquitectura x86-64, que es una extensión a la i386
(compatible con todo el software ya existente) permitiéndole ejecutar código de 64 bits.
21
2.3.- Operación general.
Las funciones internas del microprocesador 8086 estas divididas lógicamente en dos
unidades de procesamiento. La primera es la Unidad de Interfase del Bus (BIU) y la segunda es
la Unidad de Ejecución (EU) como se muestra en la figura 2.1.
La unidad de Interfase del Bus provee las funciones relacionadas con la búsqueda
de instrucciones y de cola, búsqueda de operandos, almacenamiento y reubicación de
direcciones. Esta unidad también provee las señales básicas para el bus de control.
La unidad de interfase del bus intenta traer una palabra en el ciclo de búsqueda de
la memoria, esto reduce gradualmente el tiempo muerto en el bus de memoria. La cola de
instrucciones actúa como buffer de instrucciones según como lo requiera.
22
Figura 2.1. Diagrama de bloques del microprocesador 8086.
23
que requieren solamente 10 mA de corriente de alimentación y operan bajo condiciones
extremas de temperatura de – 40º C hasta 107º C.
Es imposible conectar algo a las terminales del microprocesador sin saber cuál es la
corriente de entrada requerida en una terminal de entrada y cuál es la capacidad de corriente
de salida en una terminal de salida. Este conocimiento permite al diseñador seleccionar los
componentes de interfase adecuados para el microprocesador sin miedo de dañar algo.
24
Figura 2.2. Distribución de terminales de los microprocesadores (a) 8086, (b)
8088.
Pero hay una pequeña diferencia en una de las señales de control. El 8086 tiene una
terminal mientras que el 8088 tiene una terminal .
Otra diferencia en sus terminales aparece en la terminal 34 de ambos circuitos
integrados, en el 8088 es la terminal , mientras que en el 8086 es / S7.
25
La memoria además está dividida lógicamente en segmentos llamados: segmento de
código, segmento de datos, segmento extra-datos y segmentos de stack; estos segmentos
son de hasta 64 Kb cada uno.
El inicio de cada uno de estos segmentos es, por lo común, un límite de párrafo
(cualquier localidad de memoria divisible entre (16)10 o (10)16). La distribución lógica de la
memoria se presenta en la figura 2.3.
26
En la figura 2.4 se muestra la organización física de la memoria de los
microprocesadores 8086, 8088, 80286, 80386 y 80486.
Los requerimientos para soporte mínimo y máximo de los sistemas 8086. Son tan
diferentes que no pueden trabajar eficientemente con únicamente 40 terminales definidas.
En consecuencia, el 8086 es equipado con una terminal de opción , la cual define
la configuración del sistema. La definición de un cierto subconjunto de terminales depende
de la condición de la terminal de opción.
27
información codificado con S0, S1, y S2 para generar un tiempo en el bus de señales de
control compatibles con la arquitectura del multibus.
Cuando la terminal es conectada a VCC, el 8086 genera señales de
control de bus por sí mismo, usando las terminales 24 a la 31.
Tabla 2.1. Tabla que muestra los segmentos de memoria y los registros de
segmento.
Dependiendo del modelo, el procesador puede acceder uno o más bytes de memoria
a la vez.
Considere él número decimal 1,025. La representación hexadecimal de esta cifra,
0401H, requiere de 2 bytes (o una palabra) de memoria. Consta de un byte de orden alto
(más significativo), 04, y un byte de orden bajo (menos significativo), 01. El sistema
almacena en memoria estos bytes en secuencia inversa de bytes: el byte de orden bajo en la
dirección baja de memoria y el byte de orden alto en la dirección alta de memoria. Por
28
ejemplo, el procesador transferiría 0401H de un registro a las localidades de memoria 5612
y 5613 como:
Aunque esta característica es enteramente automática, tiene que estar alerta cuando
programe y depure programas en lenguaje ensamblador.
Segmento de código.
29
Segmento de datos
En términos sencillos, la pila contiene los datos y direcciones que necesita guardar
temporalmente o para uso de las “llamadas” a subrutinas. El registro de segmento de la
Pila (SS) direcciona el segmento de la pila.
Así, el primer byte del segmento de código tiene un desplazamiento 00, el segundo
byte tiene un desplazamiento 01, etc., hasta el desplazamiento 65,535. Para referir cualquier
dirección de memoria en un segmento, el procesador combina la dirección del segmento en
un registro de segmento con un valor de desplazamiento.
30
2.11.- Registros.
31
el registro apuntador de instrucción (IP), indica la dirección de una instrucción que es
buscada para su ejecución.
32
En el ejemplo siguiente, el registro SS contiene la dirección de segmento 27B3[0]H
y el SP, el desplazamiento 312H. Para encontrar la palabra actual que esta siendo procesada
en la pila, la computadora combina las direcciones en el SS y el SP.
Los registros de propósito general AX, BX, CX y DX son los caballos de batalla del
sistema, son únicos en el sentido de que se pueden direccionar como una palabra o como
una parte de un byte.
33
Registro SI. - El registro índice fuente de 16 bits es requerido para algunas
operaciones con cadenas de caracteres. En este contexto, el SI está asociado con el registro
DS.
De los 16 bits del registro de banderas del microprocesador 8086/8088, nueve son
comunes a toda la familia de estos procesadores, y sirven para indicar el estado actual de la
computadora y el resultado del procesamiento. Muchas instrucciones que piden
comparaciones y aritmética cambian el estado de las banderas, algunas de cuyas
instrucciones pueden realizar pruebas para determinar la acción subsecuente.
A continuación, aparece una lista con cada bit de bandera, con una breve
descripción de su función:
34
C (cargo o acarreo). - Indica un “acarreo” después de una suma o un “préstamo”
después de una resta.
P(paridad). - Es un cero para una paridad impar y un uno para paridad par. La
paridad es un conteo de “unos” expresado como un número par o impar. Por ejemplo, si un
número contiene 3 bits con uno binario, tiene paridad impar. Si un número contiene cero
bits con valor uno, se considera que tiene paridad par.
S(signo). - Indica el signo aritmético del resultado después de una suma o una resta. Si
S=1, el resultado es negativo. Si S=0, el resultado es positivo. Se debe tener en cuenta que el
valor del bit más significativo del resultado se coloca en el bit de signo para cualquier
instrucción que afecte a las banderas.
OF (sobre flujo). - Es una condición que ocurre cuando se suman o restan números
con signo. Un sobreflujo indica que el resultado ha excedido de la capacidad de la máquina.
Para operaciones sin signo, no se toma en cuenta ésta bandera.
35
El DOS soporta a dos tipos de programas ejecutables: .COM y .EXE. Un
programa .COM consta de un segmento de memoria (64Kb) que contiene código, datos, y
la pila. Si se necesita un pequeño programa de utilería o un programa residente en memoria
(un programa que es instalado permanentemente y esta disponible mientras otros programas
estén ejecutándose), se escribe un programa .COM. Un programa .EXE consta de
segmentos de código, datos y de la pila separados y es el método usado por la mayoría de
los programas serios.
El DOS define de manera automática la pila para un programa .COM, mientras que
para un programa .EXE se debe definir en forma explícita la pila. Cada elemento de dato en
la pila es una palabra (2 bytes). El registro SS como es inicializado por el DOS, contiene la
dirección del inicio de la pila.
….........
SS SP
Dirección del segmento de la Tope de la pila
pila
36
1.- Al comienzo, la pila está vacía se ve así:
….........
SS SP=28
Dirección del segmento de la Tope de la pila
pila
2.- PUSH AX. - Disminuye el SP en 2 (a 26H) y almacena el contenido del AX, 015AH, en
la pila. Observe que la operación invierte la secuencia de bytes almacenados, de modo
que 015A se almacena como 5A01:
….........
5A01
SS SP=26
Dirección del segmento de la Tope de la pila
pila
3.- PUSH BX.- Disminuye el SP en 2 (a 24H) y almacena el contenido del BX, 03D2H en
la pila:
….........
D203 5A01
37
SS SP=24
Dirección del segmento de la Tope de la pila
pila
4.- POP BX.- Regresa la palabra que se encuentra en la pila, en donde apunta el SP, y la
envía al registro BX e incrementa el SP en 2 (a 26H). El BX ahora contiene 03D2H, con los
bytes correctamente invertidos.
….........
D203 5A01
SS SP=26
Dirección del segmento de la Tope de la pila
pila
5.- POP AX. - Regresa la palabra que se encuentra en la pila, en donde apunta el SP, y la
envía al registro AX e incrementa el SP en (a 28H). El AX ahora contiene 0154H, con los
bytes correctamente invertidos:
….........
D203 5A01
SS SP=28
Dirección del segmento de la Tope de la pila
pila
Note que las instrucciones POP son codificadas en secuencia inversa a las
instrucciones PUSH. Así, en el ejemplo se guardaron AX y BX, pero se sacaron el BX y
AX, en ese orden. Además, los valores sacados de la pila aún están allí, aunque el SP ya no
apunta a ellos.
Siempre debe asegurarse que el programa coordine los valores que guarda en la pila
con los valores que saca de ella. Como éste es un requisito directo, un error puede causar
que un programa no funcione. También, para un programa .EXE se tiene que definir una
pila que sea suficientemente grande para contener todos los valores que podrían ser
guardados en ella.
38
2.14.- Modos de direccionamiento de datos.
MOV AX, BX
El sentido del flujo es, al principio, una confusión porque se supone que las cosas se
mueven naturalmente de izquierda a derecha, mientras que, en este caso, se mueven de
derecha a izquierda. En una instrucción, siempre hay una coma (,) que separa el destino de
la fuente.
39
Es importante que para las instrucciones se utilicen registros que sean de tamaño
uniforme. Nunca mezcle un registro de 8 bits con uno de 16 bits porque no lo permite el
conjunto de instrucciones del 8086.
DX
CX 1234
BX (73CD) 1234
AX
40
El término inmediato significa que los datos siguen inmediatamente al código
hexadecimal de operación en la memoria. El direccionamiento inmediato actúa en un byte o
palabra de datos.
BX A895 PROGRAMA
En la tabla 2.3 se presenta varias instrucciones MOV con diferentes datos inmediatos.
41
Lenguaje Ensamblador Operación
MOV BL, 44 Mueve 44 decimal (2CH) al BL
MOV AX, 44H Mueve 0044 hexadecimal a AX
MOV SI, 0 Mueve 0000H hacia SI
MOV CH, 100 Mueve 100 (64H) hacia CH
MOV AL, ´A´ Mueve ASCII (41H) hacia AL
MOV AX, ´AB´ Mueve BA ASCII (4241H) hacia AX
MOV CL, 11001110B Mueve 11001110 Binario hacia CL
Direccionamiento directo que solo se aplica a una instrucción MOV entre una
localidad de memoria y AL ó AX, y Direccionamiento por desplazamiento para casi
cualquier instrucción en el conjunto de instrucciones del 8086. En cualquier caso, para
42
formar la dirección se suma el desplazamiento a la dirección del segmento de datos
implícito o en un segmento alterno.
a). - Direccionamiento directo. Solo se permite con una instrucción MOV que
transfiere datos entre una localidad en la memoria situada dentro del segmento de datos y
un registro AL (8 bits) o AX (16 bits).
La instrucción MOV AL, DATO tal como se emplea en la mayor parte de los
ensambladores, transfiere una copia del byte almacenado en la localidad DATO de la
memoria y lo pone en el registro AL. En la figura 2.11 se ilustra algunos ejemplos de
direccionamiento directo.
Figura 2.11. (a) Ejecución de MOV AL, DATO y (b) ejecución de MOV AX,DATO.
43
En la tabla 2.3 aparecen instrucciones con direccionamiento directo.
44
MOV AX,[200]
MOV [200],AH
45
En la figura se aprecia que se mueve el contenido de 2000H hacia AL y el 2001H
hacia AH.
Registros Memoria
AX 6A 42 6A 02001H
BX 20 00 42 02000H
46
La instrucción MOV BYTE PTR [DI],10H muestra con claridad que la localidad
direccionada por DI es una localidad de tamaño byte en la memoria.
5.- Direccionamiento Base más Índice.
Por ejemplo, la instrucción MOV [BX + DI], CL, copia el contenido de tamaño byte
del registro CL y lo pasa a la localidad de memoria direccionada por BX + DI en el
segmento de datos.
En la figura 2.14 se muestra como la instrucción MOV DX, [BX + DI] direcciona a
los datos cuando el μP funciona en modo real. En este ejemplo, BX = 1000H, DI = 0010H
y DS = 0100H, por lo que la dirección de memoria que forman es 02010H. Esta
instrucción transfiere una copia de la palabra contenida en las localidades 02010H (DL) y
02011H (DH) al registro DX. En la tabla 2.6 aparecen algunas instrucciones utilizadas para
el direccionamiento base más índice.
47
Tabla 2.6. Ejemplos de modos de direccionamiento Base + Índice.
48
Registros Memoria
AX A0 76 A0 03101H
BX 03 00 76 03100H
49
7.- Direccionamiento Relativo Base más Índice.
Registros Memoria
AX A0 76 A0 10131H
BX 00 20 76 10130H
SI 00 10
50
Lenguaje Ensamblador. Operación.
Se carga DX con el contenido de la localidad
MOV DX, [BX + DI + 20H]
direccionada por BX + DI + 20H.
Se carga AX con el contenido de la localidad
MOV AX, ARCHIVO [BX + DI]
direccionada por ARCHIVO + BX + DI
Se carga el contenido de CL en la localidad
MOV LISTA [BP + DI], CL
direccionada por LISTA + BP + DI.
Se carga el contenido de DH en la localidad
MOV LISTA [BP + SI + 4], DH de memoria direccionada por LISTA + BP +
SI + 4.
51
2.16.- El conjunto de instrucciones.
Transferencia de datos.
Instrucción Función
Mete datos al acumulador desde un dispositivo de
IN
Entrada.
LAHF Cargas banderas en AH
LEA Carga la dirección efectiva.
MOV Mueve byte o palabra.
OUT Saca datos del acumulador a un dispositivo de Salida.
POP Recupera una palabra de la pila.
POPF Recupera las banderas de la pila.
PUSH Salvan las palabras en la pila.
PUSHF Salva banderas en la pila.
SAHF Carga AH en las banderas.
XCHG Intercambia bytes o palabras.
52
Aritmética.
La familia 8086 puede sumar, restar, multiplicar y dividir datos como bytes o
palabras. El sistema suma y resta con el empleo de datos con signo o sin signo y datos BCD
o ASCII. Multiplica y divide números ASCII y números con signo y sin signo. En la tabla
2.10 se encuentran algunas de las instrucciones aritméticas utilizadas en la familia de
procesadores 8086.
Instrucción Función
AAA Ajuste ASCII para la suma.
AAD Ajuste ASCII para la división.
AAM Ajuste ASCII para la multiplicación.
AAS Ajuste ASCII para resta.
ADD Suma datos entre registros o la memoria y otros registros.
ADC Suma datos con la bandera de acarreo.
CBW Convierte byte a palabra.
CMP Compara los datos.
DAA Ajuste decimal de AL después de una suma BCD.
DAS Ajuste decimal de AL después de una resta BCD.
DEC Decrementar.
DIV División sin signo.
IDIV División con signo.
IMUL Multiplicación con signo.
INC Incrementar.
MUL Multiplicación sin signo.
NEG Cambia el signo (lo vuelve negativo)
SBB Resta con préstamo.
SUB Resta datos entre los registros y la memoria u otro registro.
Manipulación de bits.
Las instrucciones para la manipulación de bits binarios se utilizan para controlar los
datos hasta el nivel de bits en la familia de microprocesadores 8086. Estas instrucciones
incluyen operaciones lógicas, corrimientos y rotaciones. En la tabla 2.11 aparece una breve
descripción de algunas instrucciones y su código simbólico de funcionamiento.
53
Instrucciones para cadenas.
Las instrucciones para cadenas o arreglos se emplean para manipular cadenas de datos
en la memoria. Cada cadena consta, ya sea, de bytes o de palabras y tiene hasta 64 K bytes
de longitud. En las instrucciones para la cadena se emplean los registros SI y DI para
direccionar los datos y el registro CX para contar el número de bytes o de palabras en que
se trabajó. Las instrucciones para las cadenas ocurren una vez salvo que tengan uno de los
prefijos REP, REPE/REPZ o REPN/REPNZ. Si una instrucción para cadena tiene uno de
esos prefijos, se repite el número de veces contenido en el registro de conteo CX. En la
tabla 2.12 se presentan algunas operaciones para cadena disponibles en la familia de
microprocesadores 8086.
Instrucción. Función.
AND Y (AND) lógica.
NOT Invertir (complemento a 1).
OR O lógica.
SAR Corrimiento aritmético a la derecha.
SHL/SAL Corrimiento a la izquierda.
SHR Corrimiento lógico a la derecha.
RCL Rotación a la izquierda con acarreo.
ROL Rotación a la izquierda.
RCR Rotación a la derecha con acarreo.
ROR Rotación a la derecha.
TEST Operación con el AND lógico, pero solo afectando banderas.
XOR O exclusivo.
Instrucción. Función.
CMPS Comparación entre memoria y memoria.
LODS Carga al acumulador.
MOVS Mover de memoria a memoria.
SCAS Comparación entre la memoria y el acumulador.
STOS Almacenar en el acumulador.
54
Transferencia de programa.
Instrucción. Función.
CALL Llama a un procedimiento (subrutina)
INT Interrumpir.
INT3 Interrupción tipo 3.
INTO Interrumpir por sobre flujo.
IRET Retornar de una interrupción.
JA Brinca si en mayor.
JAE Brinca si es mayor o igual que.
JB Brinca si es menor.
JBE Brinca si es menor o igual.
JC Brinca si hay acarreo.
JE/JZ Brinca si es igual o saltar si es cero.
JG Brinca si es mayor que.
JGE Brinca si es mayor o igual.
JL Brinca si es menor que.
JLE Brinca si es menor o igual.
JMP Brinca a otra parte del programa.
JNC Brinca si no hay acarreo.
JNE/JNZ Brinca si no es igual o si no es cero.
JNO Brinca si no hay desbordamiento.
JNP Brinca si no hay paridad (impar).
JNS Brinca si no es signo positivo.
JO Brinca si hay desbordamiento.
JP Brinca si hay paridad (par).
JS Brinca si tiene signo (negativo).
LOOP Repite ciclo CX veces
JCXZ Brinca si CX es cero.
RET Retorna de un procedimiento (subrutina).
55
Control de procesador.
Instrucción. Función.
CLC Borrar bandera de acarreo.
CLD Habilitar incremento automático.
CLI Deshabilitar terminal INTR.
CMC Complementa bandera de acarreo.
LOCK Controla terminal LOCK en el 8086/8088.
NOP No operación.
STC Activa bandera de acarreo.
STD Selecciona modo de decremento automático.
STI Habilitar interrupciones.
WAIT Espera a que la terminal TEST = 0.
56
Instituto Tecnológico de Ciudad Madero
Capítulo III.
Operadores y Directivas
En
Lenguaje Ensamblador.
57
3.1.- Ensambladores y compiladores.
58
Ya que un comentario aparece solo en un listado de un programa fuente en
ensamblador y no genera código de máquina, puede incluir cualquier cantidad de
comentarios sin afectar el tamaño o la ejecución del programa ensamblado
3.4.- Identificadores.
59
Dígitos: Desde el 0 hasta el 9 (no puede ser el primer carácter).
3.5.- Instrucciones.
1. Instrucciones, tal como MOV y ADD, que el ensamblador traduce a código objeto.
2. Directivas, que indican el ensamblador que realice una acción específica, como definir
un elemento de dato.
60
Un identificador (si existe), una operación y un operando (si existe) están separados
por al menos un espacio en blanco o un carácter de tabulador. Existe un máximo de 132
caracteres en una línea (512 desde MASM 6.0), aunque la mayoría de los programadores
prefiere permanecer en los 80 caracteres ya que es el número máximo que cabe en la
pantalla. A continuación se presentan dos ejemplos de enunciados:
Identificador.
Operación.
La operación que debe ser codificada, es con mayor frecuencia usada para la
definición de áreas de datos y codificación de instrucciones. Para un elemento de datos, una
operación tal como DB o DW define un campo, de área de trabajo o constante. Para una
instrucción, una operación como MOV o ADD indica una acción a realizar.
Operando.
El operando (si existe) proporciona información para la operación que actúa sobre el.
Para un elemento de datos, el operando identifica su valor inicial. Por ejemplo, en la
definición siguiente de un elemento de datos llamado CONTADOR, la operación DB
significa "definir byte", y el operando inicializa su contenido con un valor cero:
61
Para una instrucción un operando indica en donde realizar la acción. Un operando
de una instrucción puede tener una, dos o tal vez ninguna entrada. Aquí están tres ejemplos:
3.6.- Directivas.
El ejemplo siguiente proporciona 60 líneas por página y 132 caracteres por línea:
El número de líneas por página puede variar desde 10 hasta 255, mientras que el
número de caracteres por línea desde 60 hasta 132. La omisión de un enunciado PAGE
causa que el ensamblador tome PAGE 50, 80.
También puede forzar un salto de página en una línea específica en el listado del
programa, como al final de un segmento. En la línea requerida, solo codifique PAGE sin
operandos.
62
TITLE.- Se puede emplear la directiva TITLE para hacer que un título para que un
programa se imprima en la línea dos de cada pagina en el listado del programa.
Puede codificar TITLE de una vez, al inicio del programa. Su formato general es:
TITLE texto
63
Puede utilizar PUBLIC y COMMON en donde tenga el propósito de combinar de
forma separada programas ensamblados cuando los enlaza. En otros casos, donde un
programa no es combinado con otros, puede omitir la opción o codificar NONE.
Tipo clase.- La entrada clase, encerrada entre apóstrofos, se utiliza para agrupar
segmentos cuando se enlazan. Se utilizan la clase 'code' para el segmento de códigos
(recomendado por Microsoft), 'data' para el segmento de datos y 'stack' para el segmento
de la pila.
El nombre del procedimiento debe estar presente, ser único y seguir las reglas para la
formación de nombres del lenguaje. El operando FAR en este caso esta relacionado con la
ejecución del programa. Cuando solicita la ejecución de un programa, el cargador de
programas del DOS utiliza el nombre del procedimiento como el punto de entrada para la
primera instrucción a ejecutar.
64
El segmento de código puede contener cualquier número de procedimientos usados
como subrutinas cada uno de los cuales va con su característico conjunto de enunciados
PROC y ENDP. Cada PROC adicional por lo común se codifica con (o por omisión) el
operando NEAR.
Operación Operando
SS: nompila significa que el ensamblador asocia el nombre del segmento de la pila
con el registro SS, y de manera similar, con los otros operandos mostrados. Los operandos
pueden aparecer en cualquier orden. ASSUME también puede contener una entrada para el
ES, tal como ES:nomsegdatos; si el programa no utiliza el registro ES, se puede omitir su
referencia o codificar ES: NOTHING.
Directiva END.
Operación Operando
END [nomproc]
65
3.7.- Definición de Datos.
[nombre] Dn Expresión
Nombre.- Un programa que hace una referencia a un elemento de dato lo hace por medio
de un nombre. Por otro lado, el nombre de un elemento es opcional.
Directivas.- Las directivas que definen elementos de datos son DB (byte) y DW (palabra).
Cada uno indica de manera explícita la longitud del elemento definido.
Puede usar con libertad este valor inicializado en su programa y aun puede cambiar el
contenido de FLD2.
Una expresión puede contener varios valores constantes separados por comas y
limitados solo por la longitud de la línea, como sigue:
66
El ensamblador define estas constantes en bytes contiguos. Una referencia a FLD3
es a la primera constante de un byte (FLD3 + 0), y una referencia a FLD3 + 1 es a la
segunda constante, 12. Por ejemplo la instrucción
El tercer ejemplo genera cuatro copias del dígito 8 (8888) y duplica el valor tres
veces, produciendo un total doce 8.
Cadenas de caracteres.
Las cadenas de caracteres son usadas para datos descriptivos como nombres de
personas y títulos de páginas. La cadena esta definida dentro de apóstrofos, como 'PC', o
dentro de comillas, como "PC". El ensamblador traduce las cadenas de caracteres en código
objeto en formato ASCII normal.
DB 'cadena de caracteres'
67
Las directivas convencionales usadas para definir datos, junto con los nombres
introducidos por MASM 6.0 son:
68
La directiva EQU no define elementos de datos. En lugar de eso, define un valor que
el ensamblador puede usar para sustituir en otras instrucciones. Considere el enunciado
EUQ siguiente, codificado en el segmento de datos:
TIMES EQU 10
El nombre en este caso TIMES, puede ser cualquier nombre aceptable por el
ensamblador. Ahora, siempre que una instrucción o en otra directiva aparezca la palabra
TIMES, el ensamblador la sustituye por el valor 10. Por ejemplo, el ensamblador convierte
la directiva.
Su valor equivalente
Una instrucción también puede tener un operador con EQU, como en el siguiente :
COUNTR EQU 05
.
.
.
MOV CX,COUNTR
La ventaja de EQU es que muchos enunciados pueden utilizar valores definidos por
COUNTR. Si el valor ha sido cambiado, solo necesita cambiar el enunciado EQU. No
necesita decirse que puede usar un valor igualado (con EQU) solo en donde una sustitución
tenga sentido para el ensamblador. También se puede igualar (con EQU) nombres
simbólicos como el siguiente código:
TOTALPAY DW 0
.
.
.
TP EQU TOTALPAY
MPY EQU MUL
69
El segmento EQU permite a un programa usar la palabra MPY en lugar de la
instrucción simbólica MUL.
La figura 3.2. proporciona una estructura de un programa .EXE que muestra los
segmentos de la pila, de los datos y del código.
LÍNEA EXPLICACIÓN
1 La directiva PAGE para este listado establece 60 líneas y 132 columnas por
página.
2 La directiva TITLE identifica el nombre del programa PO4ASM1.
3 Las líneas 3,7,11 son comentarios que califican la declaración de los
segmentos definidos.
4-6 Estos enunciados definen el segmento de pila, STACKSG(pero no su
contenido).
8-10 Estos enunciados definen el segmento de datos, DATASG(pero no su
contenido).
12-21 Estos enunciados definen el segmento de código, CODESG.
13-20 Estos enunciados definen el segmento del código del único procedimiento,
llamado BEGIN. Este procedimiento ilustra los requisitos comunes de
inicialización y de salida para dar programa. EXE. Los dos requisitos para
inicializar son (1) avisar al ensamblador que segmentos asocia con los registros
de segmentos y (2) cargar el DS con la dirección de segmentos de datos.
14 La directiva ASSUME avisa al ensamblador que asocie ciertos segmentos con
ciertos registros de segmentos. Al asociar segmentos con registros de
segmentos, el ensamblador puede determinar en le pila, para los elementos en
el segmento de datos y para las instrucciones en el segmento de código.
15-16 Dos Instrucciones inicializan la dirección al segmento de datos en el registro
DS:
MOV DS, AX; Almacena la dirección en DS.
El primer MOV carga la dirección del segmento de datos en el registro AX y el
segundo MOV copia la dirección del AX al DS. Se requieren dos MOV ya que
ninguna instrucción puede mover datos de forma directa de la memoria a un
registro de segmento.
18-19 Estas dos instrucciones hacen la petición de terminación del programa y
regresan al DOS.
22 El enunciado END indica al ensamblador que este es el final del programa y el
operando BEGIN proporciona el punto de entrada para la ejecución
subsecuente del programa.
1 PAGE 60,132
2 TITLE PO4ASM1 Estructura de un programa. EXE
70
3 ;---------------------------------------------------------------------------------------------
4 STACKSG SEGMENT PARA STACK ‘stack’
5 .
.
.
6 STACKSG ENDS
7 ;---------------------------------------------------------------------------------------------
8 DATASG SEGMENT PARA ‘data’
9 .
.
.
10 DATASG ENDS
11 ;----------------------------------------------------------------------------------------------
12 CODESG SEGMENT PARA "code"
13 BEGIN PROC FAR
14 ASSUME SS:STACKSG, DS:DATASG, CS:CODESG
15 MOV AX,DATASG
16 MOV DS, AX
17 .
.
.
18 MOV AX, 4C00H
19 INT 21H
20 BEGIN ENDP
21 CODESG ENDS
22 END BEGIN
71
Instituto Tecnológico de Ciudad Madero
Capítulo III.
Manejo Básico de
Pantalla y Teclado.
72
Hasta este punto nuestros programas han definido datos ya sea en el área de datos o
como datos inmediatos en un operando de instrucción. Sin embargo, la mayoría de los
programas necesitan entradas desde un teclado, ratón o módem y proporcionan salidas en
un formato útil en la pantalla, impresora o disco.
Los dos tipos de interrupciones que se tratarán son las funciones de la INT 10H del
BIOS para manejar la pantalla y las funciones de la INT 21H del DOS para mostrar salidas
en pantalla y aceptar entradas desde el teclado. Estas funciones (o servicios) solicitan una
acción; para identificar el tipo de operación que la interrupción va a realizar, inserte un
número de función en el registro AH.
4.2.- La pantalla.
4.3. Funciones más comunes del BIOS (INT 10H) para el manejo de la pantalla.
73
4.3.1.- Colocación del cursor.
AH ; Función 06H.
AL ; 00H para la pantalla completa.
BH ; Número del atributo.
CX ; Renglón: columna iniciales.
DX ; Renglón: columna finales.
En el ejemplo siguiente el atributo 71H establece toda la pantalla con fondo blanco
(7) con primer plano azul (1).
74
MOV AH, 06H ; Función 06H
MOV AL, 00H ; Pantalla completa.
MOV BH, 71H ; Numero de atributo (fondo blanco, letras azules)
MOV CH, 00H ; Renglón inicial.
MOV CL, 00H ; Columna inicial.
MOV DH, 18H ; Renglón final.
MOV DL, 4FH ; Columna final.
MOV AX,0600H
MOV BH,71H
MOV CX,0000H
MOV DX,184FH
INT 10H
4.4. Funciones más comunes del DOS (INT 21H) para captura de caracteres del
teclado y despliegue en pantalla.
Coloque la función 09H en el registro AH, utilice LEA para cargar la dirección de la
cadena de despliegue en el DX, y emita una instrucción INT 21H. La operación despliega
los caracteres de izquierda a derecha y reconoce el final de los datos al encontrar el
delimitador de signo de pesos ($). El código en los lenguajes ensamblador es:
MOV AH,09H ; Petición para desplegar
LEA DX,CADENA ; Carga la dirección de la indicación.
INT 21H ; Llama al DOS
75
La operación INT no cambia el contenido de los registros. Una cadena desplegada
que exceda la columna de la extrema derecha de la pantalla continúa de forma automática
en el siguiente renglón, recorriendo la pantalla tanto como sea necesario. Si al final de la
cadena se omite el signo de pesos la operación despliega caracteres de la memoria hasta
que encuentre un signo así, si existe alguno.
Una manera de hacer más eficaz el uso de despliegues es utilizar los caracteres de
control: Retorno de carro, Avance de línea y el Tabulador. Puede codificarlos como valores
ASCII o números hexadecimales, así:
El uso de EQU para redefinir los caracteres de control puede hacer que un programa
sea mas legible:
76
Mensaje DB TAB, 'UAMSZ Ingeniería', CR, LF, '$'
Puede encontrar que la función 02H de la INT 21H, sea útil para despliegue de un
solo caracter. Cargue en el registro DL el caracter que será desplegado en la posición actual
del cursor, y solicite la INT 21H. Los caracteres de Tabulador, Retorno de carro y Avance
de
línea actúan normalmente, y la operación avanza de manera automática el cursor.
A
El código en lenguaje ensamblador es:
El ejemplo siguiente muestra como utilizar este servicio para desplegar una cadena
de caracteres. La cadena a desplegar esta definida en CONAME. El programa carga la
dirección de CONAME en el registro DI y su longitud en el CX. El código es como sigue:
4.4.4.- Función 01H de la INT 21H: Entrada del teclado con eco en pantalla.
77
Esta operación acepta un carácter desde un buffer del teclado o, si no está presente
alguno, espera una entrada del teclado. La expresión con eco en pantalla, significa que
cuando se emplea otra función para desplegar el carácter capturado en la pantalla, éste
aparece repetido). La operación regresa uno de dos códigos de estado.
4.4.5.- Función 07Hde la INT 21H: Entrada del teclado sin eco.
Esta operación funciona igual que la 01H, excepto que el carácter ingresado no se
repite en la pantalla. Podría utilizar la operación para introducir una contraseña (o
password) que sea invisible o en donde no se quiere que la pantalla sea perturbada..
78
Instituto Tecnológico de Ciudad Madero
Capítulo V.
PROGRAMAS
ENSAMBLADORES.
En este capítulo podemos observar las reglas para ensamblar, enlazar, generar
archivos de referencias cruzadas y convertir programas .EXE a .COM. la versión de
79
ensamblador de Microsoft es MASM, la de Borland es TASM y la de SRL es OPTASM,
todas ellas son similares. Desde la versión 6.0 de Microsoft utiliza el comando ML, que
realiza un ensamblador y enlace en un comando.
Se puede utilizar una línea de comando para solicitar un ensamblador, aunque MASM
también proporciona indicaciones (prompts).
El formato general para usar una línea de comando para ensamblador es:
El siguiente comando abreviado permite, por omisión, los valores para los archivos
objeto. De listado y referencias cruzadas, todos con el mismo nombre:
80
MASM D: nomarchivo, D:,, D:
También se pueden teclear los nombres del ensamblador sin línea de comando,
aunque TASM y MASM (hasta la versión 5.1) responden de manera diferente. TASM
muestra el formato general para la línea de comando y una explicación de las opciones,
mientras que MASM muestra una lista de indicaciones a las cuales hay que responder:
Source filename identifica el archivo fuente. Teclee la unidad o ruta (si no es por
omisión) y el nombre del archivo fuente, sin la extensión ASM.
Objet filename pregunta por el archivo objeto. La indicación supone el mismo nombre
de archivo, aunque se podría cambiar. Para obtener un archivo objeto en la unidad D,
teclee D: y presione Enter.
Cross-reference provee de un listado de referencias cruzadas, aunque la petición supone
que no se quiere. Para obtener una en la unidad D, teclee D: y presione Enter.
Para las ultimas tres peticiones, solo presione Enter si quiere aceptar los valores por
omisión.
Ensamblando un programa.
Opciones de Ensamblador.
Las opciones de ensamblador para MASM, TASM y OPTAS incluyen las siguientes:
81
/MX Hace a los nombres públicos y externos sensibles a mayúsculas y minúsculas
/N Suprime la generación de la tabla de símbolos.
/R Proporciona soporte para procesador matemático.
/S Deja los segmentos fuente en la secuencia original.
/T (Breve) muestra diagnósticos al final del ensamblador solo si se encuentra un error.
/V (En extenso) al final del ensamblador, muestra el numero de líneas y símbolos
procesados. (no para OPTASM).
/Wn Establece el nivel de mensajes de advertencia: 0= muestra solo errores críticos; 1=
muestra errores críticos y advertencias graves (por omisión); 2= muestra errores
críticos, advertencias graves y advertencias de consulta.
/Z Muestra líneas fuente en la pantalla para errores.
/ZD Incluye información de números de líneas en archivo objeto para Code View,
TurboDebugger o SYMDEB.
/ZI Incluye información acerca de números de línea e información simbólica en el
archivo objeto para Code View, TurboDebugger o SYMDEB.
Turbo assembler le permite ensamblar varios archivos, cada uno con sus propias
opciones, en una línea de comando. También puede usar los comodines del DOS (* y ?).
para ensamblar todos los programas fuente en el directorio actual, teclee TASM*. Para
ensamblar todos los archivos fuente PROG1.ASM., PROG2.ASM, etc., teclee TASM
prog?. Puede teclear grupos (o conjuntos) de nombres de archivos, con cada grupo separado
por punto y coma. El siguiente comando ensambla PROGRA y PROGB con la opción /C y
PROGC con la opción /A:
82
ML [opciones] nomarchs [[opciones] nomarchs]...[/opciones enlace]
Tablas.
83