3. 1.- Fundamentos
1.1.- Introducción
1.2.- El Microprocesador
1.3 .-Interrupciones
1.4.- Estructura de un programa en
Lenguaje Ensamblador
1.5.- Procedimiento de ensamble, enlace
y ejecución
1.6.- Entorno de programación
4. 2.- Elementos del lenguaje
2.1.- Instrucciones lineales.
2.2.- Saltos.
2.3.- Tipos de ciclos.
2.4.- Operadores lógicos.
2.5.- Desplazamiento.
2.6.- Procesos de control.
6. 4.- Programación Híbrida
4.1.- Directivas para compilación híbrida
4.2.- Funciones en Lenguaje Ensamblador
4.3.- Bloques en Lenguaje Ensamblador
4.4.- Operadores
4.5.- Integrar módulos de Ensamblador en
Lenguajes de Alto Nivel
7. 1.1.- Introducción
1.1.1.- Uso y aplicaciones del Lenguaje
Ensamblador.
1.1.2.- Escalabilidad de los procesadores
1.1.3.- Tipos de Lenguajes Ensambladores
1.1.4.- Clasificación de memorias
1.1.5.- Unidades de entrada/ salida
8. Un Lenguaje Ensamblador es aquel en el que
cada enunciado produce exactamente una
instrucción de máquina.
Existe una correspondencia uno a uno entre
las instrucciones de máquina y los enunciados
del programa en ensamblador.
10. Si cada línea del programa en Lenguaje
Ensamblador contiene exactamente un
enunciado y cada palabra de máquina
contiene exactamente una instrucción de
máquina, entonces un programa en
ensamblador de n-líneas producirá, a su
vez, un programa en lenguaje de máquina
de n-palabras.
11. Programa en
Lenguaje de Compilar
Alto Nivel o
Medio
Instrucciones
Programa Programa en
Programa en
Objeto Lenguaje de
Lenguaje Ensamblar Enlazar Maquina
Ensamblador
Binario
Multiplatafor- Ejecutable
Mnemónicos
ma Exadecimal
Leer
Decodificar
Microprograma
Unidad de Ejecutar
Control
Microinstruccio
nes
Electrónica
12. La principal razón por la que se utiliza el
lenguaje ensamblador, es porque resulta muy
complejo programar directamente en
lenguaje de máquina, los sistemas que se
utilizan para resolver las necesidades compu-
tacionales de las empresas.
Es más fácil utilizar nombres y direcciones
simbólicas que manejar únicamente valores
binarios, octales o hexadecimales.
13. Cuando se usa Ensamblador se puede acceder
directamente a todos los recursos de un proce-
sador, mientras que con un lenguaje de nivel
medio o alto no es posible hacerlo, ya que el
Ensamblador está diseñado para hacer uso del
conjunto de instrucciones completo de un
procesador específico.
14. La programación en Ensamblador es mucho
más difícil que en lenguaje de alto nivel.
Escribir un programa en Ensamblador es más
tardado que escribirlo en alto nivel.
Depurar un programa en Ensamblador es
más complejo.
Es más difícil mantener un programa en En-
samblador que en alto nivel.
15. Programando correctamente un sistema, se
puede producir código más pequeño en len-
guaje Ensamblador que en lenguaje de alto
nivel.
Esto es importante porque en todas las aplica-
ciones la rapidez de respuesta y el tamaño son
factores principales.
16. Como ejemplos se puede mencionar al código
de una tarjeta inteligente, el código de un telé-
fono celular, los controladores de dispositivos
en un sistema operativo, las rutinas de BIOS y
muchos otros.
Algunos procedimientos requieren acceso total
al hardware, cosa imposible en lenguajes de
alto nivel.
17. Por ejemplo, los manejadores de interrupcio-
nes y trampas de bajo nivel de un sistema
operativo, además de los controladores de
dispositivos de muchos sistemas incorpora-
dos de tiempo real.
Se estima que llevar a cabo la programación
de un sistema en lenguaje ensamblador es
por lo menos 5 veces más tardada que en un
lenguaje de alto nivel.
18. También se estima que el código resultante de la
programación en ensamblador es por lo menos
la tercera parte del código obtenido en alto nivel
y se ejecuta en la tercera parte del tiempo.
Lo anterior implica que cuando se programa en
alto nivel el código generado depende del
compilador, mientras que cuando se usa ensam-
blador el código depende del programador.
19. En consecuencia el código producido por el
compilador ocupa un espacio mayor en la
memoria y se almacena en archivos más
grandes.
Por el contrario, el código producido por el
lenguaje ensamblador ocupa poco espacio en
memoria y se almacena en archivos pequeños,
por lo que ocupan poco espacio en los medios
de almacenamiento, como disco duro u otros.
21. Con frecuencia la arquitectura de una aplica-
ción se evalúa en términos de su rendimiento;
la capacidad que tiene para terminar un núme-
ro de operaciones lógicas en un período
específico de tiempo.
La meta es lograr una arquitectura que garan-
tice que el rendimiento alcanzará un nivel sufi-
cientemente alto que permita darle un tiempo
de respuesta adecuado a la demanda del usua-
rio.
22. Una arquitectura escalable es aquella que tiene
la capacidad de incrementar el rendimiento sin
que tenga que rediseñarse por obligación y sim-
plemente se aprovecha de manera adecuada el
hardware adicional.
23. La definición de escalabilidad más apropiada
en los términos que usaremos es:
Un sistema se dice escalable si es capaz, de
incrementar sus recursos y rendimiento a las
necesidades solicitadas de manera efectiva o,
en el caso de scale down, reducir costos.
24. Aunque la mayoría de las veces se habla de
escalar hacia arriba, es decir, hacer el sistema
más grande, no siempre es necesario.
Muchas veces interesa hacer el sistema más
pequeño logrando reutilizar los componentes
excluidos.
25. Para que un sistema sea escalable implica:
Funcionalidad y rendimiento.
Si un sistema escala, mejora su rendimiento, de
manera que de forma ideal, al aumentar en N el
número de elementos de proceso del sistema
éste debe aumentar en N el rendimiento.
26. Escalabilidad en costos.
De lo anterior se deduce que idealmente el
costo de la escalabilidad de 1 a N en un siste-
ma lleve un costo de N por el costo de un pro-
cesador.
La escalabilidad perfecta es lineal, si una po-
tencia 10 veces superior nos cuesta 15 veces
más, el sistema no está escalando bien.
27. Compatibilidad de componentes.
De manera que la inclusión o exclusión de
componentes en el sistema no suponga, por
obligación, la inutilización, infrautilización o
costo adicional en los componentes.
28. Con todo esto queda patente que tener un alto
factor de escalabilidad es un requisito in-
teresante para cualquier sistema.
29. Procesadores Intel de la década de los años 70
4004 8008 8080 8086 8088
Fecha de 15/11/71 1/4/72 1/4/74 8/6/78 1/6/79
introducción
Velocidad de 108 KHz 108 KHz 2 MHz 5 MHz 5 MHz
Reloj
Ancho de 4 Bits 8 Bits 8 Bits 16 Bits 8 Bits
Bus
Número de 2 300 3 500 6 000 29 000 29 000
Transistores (10) (10) (6) (3) (3)
(µm)
Memoria 640 16 64 1 1
Direccionable bytes Kbytes Kbytes Mbyte Mbyte
Memoria -------- ----------- ---------- ---------- ----------
Virtual
30. Procesadores Intel de la década de los años 80´s
80286 80386DX 80386SX 80486DX
Fecha de 1/2/82 17/10/85 16/6/88 10/4/89
introducción
Velocidad de 6 MHz 16 MHz 16 MHz 25 MHz
Reloj
Ancho de Bus 16 Bits 32 Bits 16 Bits 32 Bits
Número de 134 000 275 000 275 000 1.2 M
Transistores (1.5) (1) (1) (0.8)
(µm)
Memoria 16 4 4 4
Direccionable Mbytes Gbytes Gbyte Gbyte
Memoria Virtual 1 Gbyte 64 Tbytes 64 Tbytes 64 Tbytes
31. Procesadores Intel de la década de los años 90´s
80486SX PENTIUM PENTIUM PENTIUM II
PRO
Fecha de 22/4/91 22/03/93 1/11/95 07/05/97
introducción
Velocidad de 16 MHz 60 MHz 150 MHz 200 MHz
Reloj
Ancho de Bus 32 Bits 32 Bits 32 Bits 32 Bits
Número de 1.185 M 3.1 M 5.5 M 7.5 M
Transistores
(µm) (1) (0.8) (0.6) (0.8)
Memoria 4 4 4 4
Direccionable Mbytes Gbytes Gbyte Gbyte
Memoria Virtual 64 Gbyte 64 Tbytes 64 Tbytes 64 Tbytes
32. PROCESADORES INTEL ACTUALES
PENTIUM III PENTIUM IV PENTIUM M PENTIUM D
Fecha de 1999 2000 2002 2006
introducción
Velocidad de 500 MHz 1.5 GHz 1.6 GHz 2.8 GHz
Reloj
Chipset 810, 815 915, 925 855, 915 945, 955
Número de 8.2 M 42 M 77 M 230 M
Transistores
(µm) (0.8) (0.13) (0.13) (0.09)
Pipeline 20 13
Etapas Etapas
Memoria Caché 512 Kb L2 2 Kb L2 1 Mb L2 2x1 Mb L2
33. Escalabilidad en el AMD Athlon 64
El núcleo del K8 ha sido concebido desde
un principio para su perfecta implementa-
ción en sistemas multiprocesador, tarea
que se ve ampliamente beneficiada con la
implementación de la tecnología Hyper
Transport.
34. Un equipo basado en 8 procesadores
Opteron puede tener 64 bancos de me-
moria directamente conectados (128
GB de RAM) y 4 enlaces Hyper Trans-
port.
35. Sockets
Uno de los aspectos más controvertidos en
todo a lo que la nueva generación AMD64
respecta es el tema de los sockets, debido a
que desde un principio AMD optó por la
convivencia de los sockets 754, 939 y 940.
Empezamos con este último, el 940, que fue
el primero en aparecer y está dirigido a
servidores y estaciones de trabajo:
36. Como su nombre indica, un socket940 tiene
940 pines.
En él se pueden instalar microprocesadores
Opteron, dedicados a servidores y estacio-
nes de trabajo (workstation) de sistemas
multiprocesador.
37. También se pueden instalar los Athlon64 FX,
la versión más potente del Athlon64, si bien
la tendencia es que en poco tiempo sólo se
dedique esta plataforma para el Opteron.
Prueba de ello es que el nuevo Athlon64 FX
55 ha salido únicamente para socket 939.
38. El siguiente socket en aparecer es el socket
754, de 754 pines, destinado a la familia A64
de gama baja, es decir, aquéllos Athlon64
que no tienen habilitado el doble canal de
memoria y funcionan con memoria DDR sin
registrar.
39. Hasta hace poco tiempo estos microprocesado-
res eran la única opción que un usuario medio
podía adquirir, dado el elevadísimo precio de la
siguiente familia de microprocesadores Athlon
64: los Athlon64 FX, cuyo precio es muy
superior (prácticamente el triple) y desde el
principio han estado enfocados a las plata-
formas socket 939 y 940, sin demasiadas ofer-
tas en cuanto a placas base.
40. El hecho de que desde un principio estuviese
determinado que esta plataforma iba a ser en
poco tiempo sustituida por la 939, a la par de
las limitaciones que por naturaleza tiene (sin
soporte para doble canal de memoria), unido
a la no necesidad imperativa del cambio a los
64bits, ha hecho que la presencia de Athlon
64 en los hogares sea más bien simbólica.
41. La situación ha venido a ser un tanto com-
parable a aquél Intel Pentium 4 en socket
423, con la diferencia de que entonces no
se sabía con tanta certeza la poca duración
que iba a tener en el mercado.
42. El último en discordia es el socket 939. Es
exactamente igual que el 940 a excepción
de que tiene un pin menos, debido a que
los microprocesadores que sean inser-
tados en él no requieren memoria ECC
(Error-Correcting Code memory) dado que
el controlador de memoria está integrado
en el propio microprocesador, de manera
que es el microprocesador quien requiere
un pin menos para trabajar con memoria
sin registrar.
43. la plataforma 939 tiene un futuro más que
prometedor, y es que un usuario teóricamen-
te podría comprar hoy un Athlon 64 939 y
cambiarlo dentro de un año y medio por un
nuevo microprocesador mucho más potente
y económico, sin necesidad de tener que sus-
tituir más hardware que el propio micropro-
cesador
49. Se pueden distinguir tres tipos de
ensambladores:
– Ensambladores básicos.
– Ensambladores modulares
– Ensambladores modulares 32-bits o de
alto nivel.
50. Ensambladores básicos
Son de muy bajo nivel, y su tarea consiste
básicamente en ofrecer nombres simbólicos a
las distintas instrucciones, parámetros y cosas
como los modos de direccionamiento.
Estos ensambladores reconocen una serie de
directivas (o meta instrucciones) que indican
ciertos parámetros de funcionamiento del
ensamblador.
51. Ensambladores modulares,
o macro ensambladores.
Son descendientes de los ensambladores bási-
cos, fueron muy populares en las décadas de los
50 y los 60, antes de la generalización de los
lenguajes de alto nivel.
Hacen todo lo que puede hacer un ensamblador
y proporcionan una serie de directivas para defi-
nir e invocar macroinstrucciones (o simplemen-
te, macros).
52. Ensambladores modulares 32-bits
o de alto nivel.
Son ensambladores que aparecieron como
respuesta a una nueva arquitectura de pro-
cesadores de 32 bits, muchos de ellos
teniendo compatibilidad hacia atrás para
trabajar con programas con estructuras de
16 bits.
53. Permiten también el uso de macros, y pue-
den utilizar estructuras de programación
más complejas propias de los lenguajes
de alto nivel.
54. • As (Unix)
• Netwide Assembler (NASM)
• Flat Assembler (FASM)
• RosASM
• High Level Assembler Language (HLA)
• GNU Assembler (Gas)
• Microsoft Macro Assembler (MASM)
• Turbo Assembler (TASM)
• GoASM
• A86 y A386 assemblers
• GNU toolchain
• MPLAB
55. El Microsoft Macro Assembler (MASM)
Es un ensamblador para la familia x86 de
microprocesadores.
Fue producido originalmente por Microsoft
para el trabajo de desarrollo en su sistema
operativo MSDOS, y era por cierto tiempo el
más popular ensamblador disponible para ese
sistema operativo.
56. El MASM soportó una amplia variedad de
facilidades para macros y programación es-
tructurada, incluyendo instrucciones de alto
nivel para bucles, llamadas a procedimientos
y alternación (por lo tanto, MASM es un ejem-
plo de un ensamblador de alto nivel).
57. Versiones posteriores agregaron la capaci-
dad de producir programas para los siste-
mas operativos Windows.
MASM es una de las pocas herramientas de
desarrollo de Microsoft para las cuales no
había versiones separadas de 16 bits y 32
bits.
58. El Turbo Assembler (TASM), un paquete
ensamblador principalmente destinado a la
plataforma del IBM PC y sus compatibles.
Fue la oferta de Borland en el mercado de
herramientas de programación en lenguaje
ensamblador para la familia de los micropro-
cesadores x86.
59. Como se pudiera esperar, trabajaban bien con
los compiladores de lenguaje de alto nivel de
Borland para las PCs, como Turbo C y Turbo
Pascal.
Junto con el resto de lenguajes de programa-
ción Turbo, Turbo Assembler ya no se encuen-
tra en el mercado.
60. El paquete Turbo Assembler vino junto con el
enlazador Turbo Linker, y era interoperable
con el depurador Turbo Debugger.
Para la compatibilidad con el ensamblador
Microsoft Macro Assembler (MASM) de
Microsoft, TASM también podía ensamblar
los archivos de código fuente del MASM por
medio de su modo MASM. Al igual que éste, es
un ensamblador de alto nivel
61. El gas, o GNU Assembler, es el ensambla-
dor del proyecto GNU.
Es el back-end por defecto del GNU Compi-
ler Collection y es usado para compilar Linux
y otros sistemas operativos como el sistema
operativo GNU.
62. Es una parte del paquete GNU Binutils, y se
puede acceder a él con el comando as cuando
se escribe desde el shell.
Al igual que el resto de aplicaciones GNU, es
un software libre, y se lanza bajo la licencia
GNU General Public License.
64. Por su tecnología de fabricación
– SRAM (Static Random Access Memory)
– DRAM (Dynamic Random Access Memory)
• SDRAM (Synchronous DRAM)
• DDR SDRAM (Double Data Rate SDRAM)
• RIMM RDRAM (Rambus In line Memory
Module)
• FPM (Fats Page Mode)
• EDO (Extended Data Output)
• BEDO (Burst EDO)
• PB SRAM (Pipeline Burst SRAM)
65. Por su encapsulado:
– SIMM (Single In line Memory Module)
– DIMM (Dual In line Memory Module)
– DIP (Dual In line Pin)
66. Por su uso:
– Memoria Principal
– Memoria Caché (RAM de alto desempeño)
– Tag RAM (RAM de alto desempeño)
– RAM Disk (Disco en RAM)
– Memoria Virtual (RAM en disco)
• Paginada
• Segmentada
• Segmentos paginados
68. La arquitectura de entrada-salida de una com-
putadora es la interfaz con el exterior .
Esta arquitectura se diseña de manera que per-
mita una forma sistemática de controlar las
interacciones con el mundo exterior y propor-
cione al sistema operativo, o programa monitor,
la información que necesita para gestionar
eficazmente la actividad de entrada-salida.
69. Hay tres técnicas de control de entrada/salida
(E/S) principales:
• E/S programada
• E/S con interrupciones
• Acceso Directo a Memoria (DMA)
70. E/S programada, en la que la E/S se produce
bajo el control directo y continuo del progra-
ma que solicita la operación.
E/S mediante interrupciones, en la que el
programa genera una orden de E/S y después
continúa ejecutándose hasta que el hardware
de E/S lo interrumpe para indicar que la ope-
ración ha concluido.
71. Acceso Directo a Memoria (DMA, Direct Me-
mory Access), en el que un procesador de E/S
específico toma el control de la operación de
E/S para transferir un gran bloque de datos.
72. Dos ejemplos importantes de interfaces de E/S
externas son:
El SCSI (Small Computer System Interface) y
el Firewire.
El SCSI es una interfaz paralela para dispositi-
vos externos, mientras que Firewire es una
interfaz serie de alta velocidad.
77. La interfaz Centronics implementada en el
puerto paralelo usa dos conectores, uno
tipo-D de 25 terminales ubicado en la parte
posterior de la PC y otro tipo-Centronics de
36 terminales ubicado en la impresora.
78. El puerto paralelo puede trabajar tanto
como receptor como transmisor en todos
sus bits de datos (D0-D7).
Esto permite su uso con dispositivos dife-
rentes a las impresoras, como lectores de
disco y protectores de programas, entre
otros, que pueden conectarse y trabajar con
el puerto paralelo.
79.
80.
81. Direcciones e Interrupciones de los
Puertos Paralelos Estándar
LPT PUERTOS E/S IRQ
LPT 1 378H, 379H, 37AH IRQ5
LPT 2 278H, 279H, 27AH IRQ7
82.
83.
84.
85. Programación del Puerto Paralelo
Para leer el Puerto Paralelo, primero se debe
inicializar enviando el valor 20H al Registro
de Control (37AH).
MOV AL, 20H
MOV DX, 37AH
OUT DX, AL
86. Programación del Puerto Paralelo
Una vez que está preparado para lectura, el
puerto se lee de la siguiente manera:
MOV DX, 378H
IN AL, DX
87. Programación del Puerto Paralelo
Para escribir en el Puerto Paralelo, primero
se debe inicializar enviando el valor 00H al
Registro de Control (37AH).
MOV AL, 00H
MOV DX, 37AH
OUT DX, AL
88. Programación del Puerto Paralelo
Una vez que el puerto está inicializado, se
escribe en él de la siguiente manera:
MOV DX, 378H
MOV AL, DATO
OUT DX, AL
89. Programación del Puerto Paralelo
Una alternativa para enviar datos utilizando el
puerto paralelo, consiste en usar la Interrup-
ción 21:
MOV DL, carácter ASCII
MOV AH, 05h
INT 21h
90. 1.1.5 Unidades de entrada/ salida
Puertos Serie (estándar)
» COM1
» COM2
91. 1.1.5 Unidades de entrada/ salida
Puertos Serie (alta velocidad)
» USB
» Firewire
92. 1.1.5 Unidades de entrada/ salida
Puertos Serie (Inalámbricos)
– Bluetooth (radiofrecuencia)
– Infrarrojo (luz infrarroja)
93.
94. USB (Universal Serial Bus)
• Para conectar dispositivos Plug and Play.
• Ahorra recursos de puertos e IRQ’s.
• Se pueden conectar hasta 127 dispositivos
a una computadora.
• Tiene velocidades de transferencia de:
• 1.5 Mbit/seg (teclado y mouse)
• 12 Mbit/seg (otros dispositivos)
95.
96.
97. USB (Universal Serial Bus)
El conector serie A se recomienda para Tecla-
dos y Mouses, que normalmente permanecen
conectados.
El conector serie B se recomienda para cáma-
ras, scanners, impresoras, modems, teléfonos,
bocinas, etc., que eventualmente pueden des-
conectarse sin apagar el equipo.
98.
99. IEEE-1394 (i-link o FireWire)
• Standard 1394 del Institute of Electrical and
Electronics Enginneers
• Dispositivos Plug and Play de audio, video y
multimedia.
• Velocidades de transferencia de 100, 200 y
400 Mbits/seg.
• Se pueden conectar hasta 63 dispositivos a
una tarjeta adaptadora
100. Usa un cable simple con 6 conductores, que
incluye dos pares diferenciales de líneas de
reloj y datos, más dos líneas de alimentación.
• Es posible conectar y desconectar disposi-
tivos sin apagar el equipo.
• Originalmente la interfaz fue desarrollada
por Apple y Texas Instruments.
101.
102. Accelerated Graphics Port (AGP)
Una de las últimas adiciones a las computado-
ras personales lo constituye el Puerto Acelera-
do de Gráficos (AGP).
El AGP opera a la frecuencia de reloj del bus
del microprocesador. Está diseñado de tal ma-
nera que la transferencia entre la tarjeta video
y la memoria del sistema se realice a la máxima
velocidad.
103. Accelerated Graphics Port (AGP)
El bus AGP (2X) puede transferir datos a una
velocidad de hasta 528 Mbytes por segundo.
El bus AGP (4X) podrá transferir hasta1 Gbyte
por segundo.
El bus PCI tiene una velocidad de transferencia
máxima de 100 Mbytes por segundo.
106. 1.2.- El microprocesador
Un procesador se puede caracterizar por:
• Su arquitectura
• Su modelo de programación
• Su conjunto de instrucciones
• Sus modos de direccionamiento
• Su Lenguaje Ensamblador
120. Caracterización de un Bus
• Arquitectura: Tradicional o Alto Desempeño
• Tipo: Dedicado o Multiplexado
• Arbitraje: Centralizado o Distribuido
• Temporización: Síncrono o Asíncrono
• Uso: Dirección o Datos
121. Tipo de transferencia:
• Lectura
• Escritura
• Lectura-Escritura
• Escritura-Lectura
• Bloque
122.
123.
124. 1.2.1 Buses
CLK La terminal de reloj proporciona al pro-
cesador la señal básica de temporización.
La señal debe tener un ciclo activo del 33%
para proporcionar la temporización interna
adecuada.
Vcc Proporciona la señal de alimentación de
+5VCD, +/- 10% al procesador.
125. 1.2.1 Buses
NMI.- La Interrupción no-enmascarable, es
parecida a INTR, excepto porque no verifica
el bit de bandera IF, al activar NMI, la entrada
utiliza el vector de interrupción 2.
126. RESET .- La entrada de restauración ocasiona
que el procesador se reinicie si se mantiene
en alto por un mínimo de cuatro períodos de
reloj.
Al activarse el 8086/8088 inician en la memo-
ria FFFF0H e inhabilita interrupciones
futuras restaurando el bit IF.
127. 1.2.1 Buses
INTR.- Solicitud de interrupción, se utiliza
para solicitar una interrupción por hardware.
Si INTR se mantiene en alto cuando IF=1, el
procesador entra en un ciclo de reconocimien-
to de interrupción (INTA’ se activa), después
de ejecutar la instrucción actual.
128. 1.2.1 Buses
• RD’ Señal de lectura, cuando está en cero el
bus de datos está preparado para recibir datos
desde la memoria o desde un puerto de e/s.
• READY Se utiliza para insertar estados de es-
pera en la temporización del procesador.
Si está en cero, el procesador inserta un estado
de espera y permanece inactivo.
130. 1.2.2 Registros
La arquitectura de un procesador
está definida por los elementos que
lo integran, sus características, las
operaciones que se realizan entre
ellos, y cómo se realizan.
131.
132.
133. 1.2.2 Registros
El Modelo de Programación de un procesador
está formado por los registros internos, a los
que se puede acceder utilizando el conjunto
de instrucciones.
134. AH AX AL Accumulator
AH BX BL Base
AH CX CL Counter
AH DX DL
Data
SP
Stack pointer
Base pointer
BP
Source index
SI
Destination
DI
CS
Code Segment
DS Data Segment
SS Stack Segment
ES Extra Segment
IP Pointer Instruction
OF DF IF TF SF ZF AF PF CF
Flags
135. Descripción de los registros
AX (Acumulador).- Se utiliza para almacemien-
to de datos en general y algunas instrucciones
específicas como: multiplicación, división, ope-
raciones de I/O y manejo de cadenas.
BX (Base).- Se utiliza para contener valores de
direcciones cuando se accede a la memoria.
Cuando se utilizan rutinas de interrupción, este
registro debe contener un valor que se usa para
selección de opciones.
136. Descripción de los registros
CX (Contador).- Durante la ejecución de un
ciclo, este registro contiene el valor del índice
de conteo.
DX (Datos).- Utilizado para almacenamiento
general y también en operaciones de multipli-
cación y división.
SP (Apuntador del stack).- Contiene valores de
desplazamiento para el stack.
137. Descripción de los registros
BP (Apuntador base).- Es similar al SP. Algunas
instrucciones hacen uso de él para guardar el
valor de un desplazamiento.
SI (Índice fuente).- Para ciertas instrucciones
contiene la dirección fuente.
DI (Índice destino).- Se complementa con SI,
contiene la dirección destino para algunas
instrucciones.
138. Descripción de los registros
CS (Segmento de código).- Apunta al inicio del
segmento donde se encuentra situado el pro-
grama en ejecución.
DS (Segmento de datos).- Señala el inicio del
segmento de datos.
SS (Segmento del Stack).- Señala el inicio del
segmento del stack.
139. Descripción de los registros
ES (Segmento extra).- Señala el inicio del seg-
mento extra.
IP (Apuntador de instrucciones).- Apunta a la
localidad de memoria donde se encuentra la
próxima instrucción a ser ejecutada.
CF (Acarreo).- Contiene el acarreo resultante
de una operación aritmética.
140. PF (Paridad).- Indica paridad par o impar, re-
sultante de una operación en los 8-bits de da-
tos de menor orden.
AF (Acarreo auxiliar).- Contiene un acarreo
externo del bit 3 en un dato de 8-bits, para
aritmética especializada.
ZF (Cero).- Indica el resultado de una opera-
ción aritmética o de comparación. Si el
resultado es cero ZF = 1.
141. SF (Signo).- Contiene el signo resultante de una
operación aritmética (0-positivo, 1-negativo).
TF (Trampa).- Permite la operación paso a paso
del procesador. Se ejecuta una instrucción y se
detiene para examinar sus efectos sobre los re-
gistros y la memoria.
IF (Interrupción).- Habilita e inhabilita la aten-
ción a interrupciones.
142. DF (Dirección).- Designa la dirección, a la iz-
quierda o a la derecha, para mover o comparar
cadenas de caracteres.
OF (Desbordamiento).- Indice desbordamien-
to del bit más significativo, después de una
operación aritmética.
143. AX AH AL
Acumulator
BX BH BL
Base
CX CH CL Count
DX DH DL Data
REGISTROS
BP
SI
Pointer Base
Index Source
DEL MICRO-
DI Index Destination PROCESADOR
SP Stack Pointer
80286
F Flags
IP Instructor Pointer
MSW Status Machine Register
Segment Selectors
CS Code Segment
DS Data Segment TR
ES Extra Segment LDTR
SS Stack Segment
144. EAX AH AL
EBX BH BL
ECX CH CL
EDX DH DL
ESP
Register Purpose General
SP
EBP BP
ESI SI
EDI DI
CS
DS
ES
SS
Segment Register
FS
GS
EIP IP Pointer Instruction
EFLAGS FLAGS Flags registers
The internal structure of the 80386 microprocessor
ilustrating the general, segment and flags registers.
146. 1.2.3 Modos de Direccionamiento
Los Modos de Direccionamiento son las dife-
rentes maneras en que el CPU puede acceder a
los datos, tomando en consideración que éstos
pueden encontrarse en:
* CPU,
* Memoria,
* Puertos de entrada y salida.
147. Direccionamiento de datos
» Registro
» Inmediato
»Directo
» Indirecto a registro
» Base más índice
» Relativo a registro
» Relativo a base más índice
148. Register addressing.
Se usa para transferir un byte o una palabra des-
de el registro fuente hasta el registro destino.
• Ejemplo: MOV AX,CX
Copiará el contenido del registro CX dentro del
registro AX.
152. Direccionamiento Directo
Direct Addressing.- Transfiere un byte o word
entre la memoria y un registro. Ladirección de
memoria del dato se almacena con la instruc-
ción.
• Ejemplo: MOV AX,DATO
Toma el contenido de 16-bits de la dirección
de memoria DATO y los mueve al registro AX.
153.
154. Indirecto de Registro
Register Indirect.- Transfiere un byte o word
entre un registro y la localidad de memoria
direccionada por otro registro
• Ejemplo: MOV AX,[BX]
Mueve los 16-bits contenidos en la localidad
de memoria direccionada por el registro BX
dentro del registro AX.
155.
156. Direccionamiento Base más Índice
Base-plus-index.- Se usa para transferir un
byte o word entre un registro y la localidad de
memoria indicada por la suma de un registro
base y un registro índice.
• Ejemplo: MOV AX,[BX+SI]
Mueve los 16-bits contenidos en la dirección
apuntada por la suma de BX+SI y los lleva den-
tro del registro AX.
157.
158. Direccionamiento Relativo a Registro
Register Relative.- Transfiere un byte o word
entre un registro y la localidad de memoria
direccionada por un registro y un desplazami-
ento.
• Ejemplo:
MOV AX,[BX+4]
MOV AX,ARRAY[SI]
159.
160. Relativo a la Base más Índice
Base relative-plus-index.- Se usa para transferir
un byte o word entre un registro y la localidad
de memoria direccionada por un registro base
y un registro índice más un desplazamiento.
• Ejemplo:
MOV AX,ARRAY[BX+DI]
MOV AX,[BX+DI+4]
163. 1.3.- Interrupciones
Una computadora no es de utilidad si no cuen-
ta con dispositivos que puedan comunicarse
con el mundo exterior.
Para ello deberá contar con dispositivos para
introducir datos al sistema que puedan ser al-
macenados en la memoria y procesados por el
CPU.
164. Igualmente, se deben recuperar los resultados
del procesamiento a través de dispositivos de
salida.
Desde el punto de vista de la Arquitectura de
Computadoras, los puertos de entrada-salida y
las interrupciones constituyen un sistema de
comunicación con el exterior.
165. Aunque la revisión periódica de los puertos de
entrada-salida es simple, puede resultar
ineficiente.
Las Interrupciones representan una manera
muy eficiente para atender dispositivos asín-
cronos.
El periférico atrae la atención del procesador a
través de una interrupción, éste concluye la
instrucción actual y ejecuta una rutina de inte-
rrupción, para continuar con la tarea anterior
posteriormente.
167. 1.3.1 Interrupciones por hardware
Generalmente se utilizan para atender a dispo-
sitivos periféricos asíncronos que, por su velo-
cidad de operación, no requieren de la atención
periódica del procesador.
Las interrupciones pueden utilizar las líneas
NMI (interrupción no-enmascarable) e INTR
(interrupt request).
168. La interrupción se atiende a través de un vector
de interrupción.
Para administrar las interrupciones se utiliza
un controlador de interrupciones dedicado.
169. La familia de procesadores de Intel cuenta con
dos terminales de entrada para interrupciones
(NMI e INTR) y una terminal de salida (INTA)
que reconoce la interrupción de INTR, dos
banderas de interrupción (IF y TF), además de
una instrucción de retorno de interrupción
(IRET).
174. 1.3.2.- Interrupciones por Software
Para generar interrupciones bajo control del
programa se utilizan las instrucciones INT n,
INTO e IRET.
Para habilitar e inhabilitar las interrupciones
se utilizan STI y CLI, respectivamente.
175. Es común utilizar algunas funciones especia-
lizadas del BIOS y del DOS llamándolas como
interrupciones, esto evita el tener que escribir
una gran cantidad de código, facilitando el uso
de los recursos de la computadora personal.
176. INT 10H. Interrupción de los servicios de video
controla el video en un sistema.
INT 11H. Se utiliza para determinar el tipo de
dispositivos instalados en un sistema.
INT 12H. Determina el tamaño de la memoria
instalada en el sistema.
INT 13H. Controla los discos flexibles y
rígidos de la computadora.
177. INT 14H. Controla los puertos de comunica-
ciones serie (COM1, COM2, ...)
INT 15H. Controla varios dispositivos del
sistema, como cassette, joystick, watchdog y
permite acceder al modo protegido.
INT 16H. Controla el teclado de la computa-
dora.
178. INT 17H. Controla el puerto paralelo de la
impresora (LPT).
INT 33H. Esta función proporciona un control
completo de las acciones del mouse.
INT 21H. Con esta interrupción del DOS pue-
den realizarse una gran cantidad de funciones,
incluyendo manejo de dispositivos como tecla-
do, pantalla, puertos, manejo de archivos, hora
y fecha del sistema, entre otros.
• Esta interrupción utiliza rutinas del BIOS.
179.
180.
181. 1.4 Estructura de un programa en
Lenguaje Ensamblador
1.4.1 Data Segment
1.4.2 Stack Segment
1.4.3 Code Segment
1.4.4 Instrucciones del programa
1.4.5 Directivas
182. Existen normas para escribir un programa en
lenguaje ensamblador.
La primera se refiere a la estructura del
programa, después cada línea sigue un
formato, finalmente se deben respetar las
instrucciones y los modos de direccionami-
ento; la sintaxis y la ortografía son muy
estrictas.
183. La estructura de los programas en Lenguaje
Ensamblador de la familia x86 está basada en
el uso de segmentos de: Código, Datos, Pila y
Extra.
De esta manera la memoria se divide en seg-
mentos de longitud fija, 64K en el modelo
original.
184. Por esta razón, las primeras acciones que se
realizan en un programa escrito en lenguaje
ensamblador consisten en declarar el modelo
de memoria y los segmentos que se van a
utilizar para manipular los datos almacenados
en la memoria.
185.
186.
187.
188.
189. 1.4.1 Data Segment
El Segmento de Datos es un área reservada
para guardar datos, cuya dirección de inicio
está dada por DS.
• El segmento de datos se declara al principio
del programa y sus características están defini-
das en el modelo de memoria utilizado.
• El segmento de datos puede almacenar datos
numéricos y alfanuméricos.
• Los datos se definen dentro del segmento
de datos, puede definirse su tipo y su tamaño.
190. 1.4.2 Stack Segment
• El Segmento de Pila es un área reservada
de la memoria, cuya dirección de inicio está
dada por SS.
• El segmento de Pila se declara al principio del
programa y se puede definir su tamaño o utili-
zar uno por omisión.
191. • El segmento de pila puede almacenar datos,
contenidos de registros y banderas, es un seg-
mento tipo LIFO.
• Para acceder a la pila se utilizan las instruccio-
nes PUSH y POP, la posición superior de la pila
está apuntada por SP.
192. 1.4.3 Code Segment
• El Segmento de Código es un área reservada
de la memoria, cuya dirección de inicio está
dada por CS.
• El segmento de Código se declara al principio
del programa y se puede definir su tamaño o
utilizar uno por omisión.
• El segmento de Código contiene el
código del programa ejecutable.
193. Componentes de un programa
en Lenguaje Ensamblador
Comentarios
Palabras Reservadas
Identificadores
Instrucciones
Directivas
194. Comentarios en Lenguaje Ensamblador
• El uso de comentarios mejora la
claridad de un programa.
• Un comentario empieza con (;) y todos
los caracteres a la derecha no generan
código de máquina.
• Un comentario puede ocupar una línea
completa o aparecer a continuación de
una instrucción o directiva.
195. Ejemplos de Comentarios
• ;Toda la línea es un ejemplo de comentario
• ADD AX,BX ;Comentario en una instrucción
• .DATA ;Comentario en una directiva
196. Palabras Reservadas en
Lenguaje Ensamblador
• Instrucciones: MOV, ADD, etc.
• Directivas: END, SEGMENT, etc.
• Operadores: FAR, SIZE, etc.
• Símbolos predefinidos: @Data, @Model
197. Identificadores
Un identificador es un nombre que se aplica a
elementos en un programa.
Los dos tipos de identificadores son:
nombre, que se refiere a la dirección de un ele-
mento de dato y
etiqueta, que se refiere a la dirección de una
instrucción.
198. Caracteres de un Identificador
• Letras del alfabeto: A-Z
• Dígitos: 0 al 9
• Caracteres especiales: interrogación (?)
subrayado ( _ )
signo de pesos($)
arroba (@)
punto (.)
199. Reglas de los Identificadores
• Un identificador inicia con letra o carácter
especial, menos el punto.
• Se recomienda que los nombres de identifica-
dores sean descriptivos y significativos.
• Todos los identificadores deben definirse en
algún lugar del programa.
202. 1.4.4.- Instrucciones
Son acciones a realizar, identificadas por Ne-
mónicos como MOV y ADD, que el ensambla-
dor traduce a código objeto y que correspon-
den una a una a instrucciones en Lenguaje de
Máquina.
203.
204. 1.4.4.- MOV
• Nemónico: MOV destino, fuente
• Función: Destino = fuente
• Banderas: Ninguna
• Descripción: MOV transfiere un byte o una
palabra desde el operando fuente hasta el ope-
rando destino.
• Ejemplos: * MOV AX,BX
* MOV CL,AL
* MOV BX,300
* MOV BH,25
205. 1.4.4.- ADD
• Nemónico: ADD destino, fuente
• Función: destino=destino+fuente
• Banderas: AF,CF,OF,PF,SF,ZF
• Descripción: La suma de los dos operandos,
los cuales pueden ser bytes o words, remplaza
al operando destino.
• Ejemplos: * ADD DX,CX
* ADD AX,400
* ADD label, BL
206. 1.4.4.- CLC
• Nemónico: CLC (Sin operandos)
• Función: CF = 0
• Banderas: CF
• Descripción: CLC pone en cero a la bandera
de carry (CF) sin afectar otras
banderas.
207. 1.4.4 CMP
• Nemónico: CMP destino, fuente
• Función: destino – fuente
• Banderas: AF,CF,OF,PF,SF,ZF
• Descripción: CMP sustrae la fuente del des-
tino, los cuales pueden ser bytes o words, pero
no devuelve el resultado, ni los operandos cam-
bian. Sólo se actualizan las banderas y pueden
utilizarse con instrucciones subsecuentes de
salto condicional.
210. 1.4.5 Directivas
Son enunciados que permiten controlar la
manera en que un programa se ensambla y
lista.
Actúan sólo durante el ensamblado de un
programa y no generan código ejecutable
de máquina.
211. 1.4.5 Directivas
• PAGE y TITLE
• SEGMENT y ENDS
• PROC y ENDP
• ASSUME
• END
• DB, DW
• EQU
212. Se coloca al inicio del programa, establece el
número máximo de líneas (10-255) para listar
en una página y el número máximo de carac-
teres (60-132) en una línea.
• Formato: PAGE [longitud] [, ancho]
• Ejemplo: PAGE 60,132
• Por omisión se toma: PAGE 50,80
213. 1.4.5 Directivas SEGMENT y ENDS
Un programa ensamblado en formato .EXE
consiste en uno o más segmentos.
Las directivas para definir un segmento
tienen el formato:
NOMBRE OPERANCIÓN OPERANDO COMENTARIO
Nombre SEGMENT [OPCIONES] ;Inicia
Segmento
… … … …
Fin de
Nombre Ends Segmento
214. 1.4.5 Directiva SEGMENT
El operando de una directiva SEGMENT
puede tener tres tipos de opciones:
»Alineación
»Combinar
»Clase
F O R M A T O
Nombre SEGMENT combinar combinar clase
215. 1.4.5 Tipo Alineación
Indica el límite en el que inicia el segmento.
PARA alinea el segmento con el límite de un
párrafo, de manera que la dirección inicial es
divisible entre 16.
Por omisión el ensamblador toma PARA.
216. 1.4.5 Tipo Combinar
Indica si se combina el segmento con otros
segmentos cuando se enlazan después de en-
samblar.
• Los tipos combinar son:
»STACK
» COMMON
»PUBLIC
»AT
217. 1.4.5 Tipo Clase
La entrada clase, encerrada entre apóstrofos,
se utiliza para agrupar segmentos cuando se
enlazan.
Microsoft recomienda utilizar las clases:
‘code’ para el segmento de códigos,
‘data’ para el segmento de datos y
‘stack’ para el segmento de pila.
219. 1.4.5 Directivas PROC y ENDP
El segmento de código contiene el código eje-
cutable de un programa.
También tiene uno o más procedimientos, defi-
nidos con la directiva PROC.
La directiva ENDP indica el fin de un procedi-
miento.
Los procedimientos deben quedar totalmente
contenidos dentro de un segmento.
220. Ejemplo con PROC y ENDP
NOMBRE OPERACIÓN OPERANDO COMENTARIO
Nomsegmto SEGMENT PARA ;procedimiento
Nomproc PROC FAR dentro del seg-
mento de código.
….. …..
….. …..
Nomproc ENDP
nomsegmto ENDS
221. 1.4.5 Directiva ASSUME
Se utiliza para indicar al ensamblador el pro-
pósito de cada segmento en el programa.
• SS para direccionar la pila.
• DS para direccionar el segmento de datos.
• CS para direccionar el segmento de código.
223. 1.4.5.- Directiva END
La directiva END finaliza todo el programa.
En la mayoría de los programas, el operando
contiene el nombre del primero o único PROC
designado como FAR, donde inicia la ejecución
del programa.
224. 1.5 Procedimientos de ensamble,
enlace y ejecución
1.5.1 Captura y edición
1.5.2 Ensamble
1.5.3 Enlace
1.5.4 Ejecución
1.5.5 Depuración
228. 1.5.1 Captura y Edición
Los archivos fuente de código ensamblador
deben estar en formato ASCII estándar.
Para esto puede usarse cualquier editor que
permita crear archivos sin formato adicional,
como Edito Wordpad.
229. 1.5.1 Captura y Edición
Las declaraciones pueden ser introducidas en
mayúsculas y/o minúsculas.
Una buena práctica de programación es poner
todas las palabras reservadas (directivas e ins-
trucciones) en mayúsculas y todo lo del usua-
rio en minúsculas para fines de facilidad de
lectura del código.
230. Las sentencias pueden comenzar en cualquier
columna, no pueden tener más de 128 caracte-
res, no se permiten líneas múltiples ni códigos
de control, y cada línea debe ser terminada con
una combinación de line-feed y carriage-return.
Los comentarios se declaran con “;” y terminan
al final de la línea.
232. 1.5.2 Procedimiento de Ensamble
El ensamblador (Assembler) convierte un
archivo fuente simbólico en un archivo ob-
jeto hexadecimal.
El archivo fuente debe tener una extensión
ASM para que pueda ser reconocido por el
ensamblador.
233. 1.5.2 Procedimiento de Ensamble
Una de las tareas del ensamblador es calcular
el desplazamiento de cada elemento en el
segmento de datos y de cada instrucción en el
segmento de código.
234. El ensamblador también crea un encabezado
al frente del módulo .OBJ generado, parte del
encabezado tiene información acerca de di-
recciones incompletas.
El módulo .OBJ aún no está en forma ejecu-
table.
236. 1.5.3 Procedimiento de Enlace
El programa enlazador (linker) lee los archivos
objeto (extensión OBJ), creados por el ensam-
blador, los enlaza con el conjunto de instruc-
ciones del procesador, y genera un archivo eje-
cutable de salida (extensión EXE).
237. Una de las tareas del enlazador es combinar
los programas ensamblados en forma sepa-
rada en un solo programa ejecutable.
239. Si un archivo tiene menos de 64K de longitud,
se puede convertir de archivo ejecutable en
archivo de comandos (extensión .COM).
Este archivo se origina en la localidad 100H y
tiene la ventaja de que requiere poco espacio
en disco y en memoria, además de que se eje-
cuta rápidamente.
240. El Sistema Operativo ofrece soporte a dos tipos
de programas ejecutables: .COM y .EXE.
Un programa .COM consta de un solo segmen-
to que contiene código, datos y pila.
Un programa .EXE consta de segmentos de có-
digo, programa y pila separados.
241. Cuando se llama un programa desde el disco
para su ejecución, el cargador del sistema ope-
rativo realiza las siguientes acciones:
Accede al programa .EXE en eldisco.
Construye un prefijo de segmento de programa
(PSP) de 256 bytes (100H) en un límite de pá-
rrafo en la memoria interna disponible.
242. Almacena el programa en memoria inmedia-
tamente después del PSP.
Carga la dirección del PSP en los registros
DS y ES.
Carga la dirección del segmento de código en
el CS y establece el IP al desplazamiento de la
primera instrucción (generalmente cero) en
el segmento de código.
243. Carga la dirección de la pila en el SS y estable-
ce el SP al tamaño de la pila.
Transfiere el control al programa para ejecu-
ción, iniciando con la primera instrucción del
segmento de código.
244. En esta forma, el cargador del DOS inicia-
liza los registros CS:IP y SS:SP
Aunque se debe observar que el cargador
almacena la dirección del PSP tanto en el
registro DS como en el ES, aunque normal-
mente se requiere la dirección del segmen-
to de datos en estos registros.
245. Como consecuencia, los programas tienen
que inicializar el DS con la dirección del
segmento de datos.
248. Una de las teorías en computación dice que el
programa que funciona bien desde la primera
vez seguramente tiene errores.
El número de errores posibles en un programa
es proporcional al número de líneas e inversa-
mente proporcional a la experiencia del pro-
gramador.
249. El dominio de la arquitectura del sistema así
como del ensamblador facilitan la escritura de
programas sin errores.
La práctica de la programación en ensambla-
dor también ayuda a escribir programas libres
de errores.
250. El propio ensamblador ayuda a encontrar
errores ortográficos o de sintaxis durante el
proceso de ensamble.
El enlazador también participa en la localiza-
ción de errores en tiempo de ejecución.
251. Aún con esa ayuda, es posible que en el mo-
mento de ejecutar un programa surjan pro-
blemas de diseño que lleven a resultados
erróneos.
Por todo lo anterior se recomienda desarro-
llar un programa paso a paso evitando “pen-
sar y teclear” inmediatamente.
252. Se recomienda plantear el problema a resolver
y las acciones a realizar.
Elaborar un algoritmo que establezca los pasos
a seguir.
Codificar el programa utilizando correctamen-
te la arquitectura del sistema, el conjunto de
instrucciones, los modos de direccionamiento
y el lenguaje ensamblador.
253. Elaborar un diagrama de flujo que defina
claramente todas las rutas de ejecución del
programa, los procesos, entradas y salidas.
Definir las variables, incluyendo los tipos y
tamaños.
254. Realizar una prueba de escritorio para evaluar
todos los pasos anteriores, antes de capturar el
programa.
Capturar el programa utilizando el programa
codificado ya corregido, si tiene muchas líneas
es conveniente que alguien más lo revise.
255. Si a pesar de todo lo anterior surgen problemas
durante la ejecución, lo cual es altamente pro-
bable, se recomienda utilizar el Turbo Debug-
ger, herramienta de depuración que facilita la
prueba de programas así como la corrección de
errores al permitir la ejecución paso a paso de
los programas.
256. Además de que permite visualizar el estado
de los registros del CPU, las banderas, así
como el contenido de los segmentos en me-
moria.
257. 1.6 Entorno de programación
1.6.1 Wordpad y Edit
1.6.2 Turbo Assembler
1.6.3 Turbo Linker
1.6.4 Turbo Debugger
260. 1.6.1 Wordpad y Edit
Wordpad es un editor de texto de Windows
que facilita la captura y edición de archivos de
texto sin caracteres de control ocultos, por lo
que se puede utilizar para capturar programas
que se utilicen en el entorno del ensamblador.
261. Al guardar los archivos que se utilicen con
TASM o MASM se debe tener cuidado en
salvarlos como archivos de texto con formato
para MS-DOS, de otra manera el ensamblador
enviará mensajes de error al encontrar carac-
teres desconocidos.
262. También es posible utilizar Notepad, sin em-
bargo sólo es útil para capturar programas de
tamaño reducido por lo que no se recomienda
para programas extensos.
263. Edit es un editor de texto del MS-DOS que
resulta muy adecuado para trabajar con pro-
gramas en ensamblador, debido a que su en-
torno de trabajo es el mismo que el del Turbo
Assembler, por lo que es muy simple la cap-
tura y edición programas en ensamblador.
Este editor puede llamarse desde el entorno
del MS-DOS.
265. El Turbo Assembler (TASM), es un paquete
ensamblador principalmente destinado a la
plataforma del IBM PC y sus compatibles.
Fue la oferta de Borland en el mercado de
herramientas de programación en lenguaje
ensamblador para la familia de los micropro-
cesadores x86.
266. Como se pudiera esperar, trabaja bien con
los compiladores de lenguaje de alto nivel de
Borland para los PCs, como Turbo C y Turbo
Pascal.
Junto con el resto de paquetes de lenguajes
de programación Turbo, Turbo Assembler ya
no es mantenido por Borland.
267. El ensamblado se lleva a cabo invocando al
TASM. Este puede ser llamado, usando una
línea de comando, de la siguiente manera:
TASM nombre_archivo.asm [opciones]
donde:
nombre_archivo- Corresponde al programa
fuente
opciones- modo en que realizará el ensamble
268. opciones.- Pueden ser:
/a.- ordena los segmentos en orden alfabético
/s.-ordena los segmentos en orden del fuente
/c.-genera un archivo de referencias cruzadas
/iPATH.-busca PATH para archivos incluidos
/l.-genera un listado de ensamble
/la.-genera un listado expandido de ensamble
/z.-despliega línea fuente con mensaje de
error.
/zi, /zd, /zn.- Debug info: zi= completa, zd=
números línea, zn= ninguna
270. El paquete Turbo Assembler incluye el enla-
zador Turbo Linker, y es interoperable con el
de-purador Turbo Debugger.
Para la compatibilidad con el ensamblador
Microsoft Macro Assembler (MASM) de
Microsoft, TASM también ensambla los
archivos de código fuente del MASM por
medio de su modo MASM.
271. Formato del comando:
TLINK archivo_objeto [opciones]
donde:
archivo_objeto- nombre del archivo objeto
opciones- modo en el que se enlaza
272. Opciones:
/x.- sin mapa
/m.- mapa incluyendo nombres públicos
/s.- mapa más mapa detallado de segmentos
/l.- mapa más números de línea fuente
/i.- inicializa todos los segmentos
/L.- especifica rutas de búsqueda de librerías
/v.- información simbólica de debug completa
274. Turbo Debugger es un conjunto de herrami-
entas diseñadas para ayudar a depurar pro-
gramas desarrollados con la línea de compi-
ladores y ensambladores de Borland.
Turbo Debugger ayuda a depurar programas
escritos para Win16, Win32 y DOS.
275. Al cargar el programa en Turbo Debugger se
puede controlar la ejecución del programa y
visualizar diferentes aspectos de la ejecución
del programa.
Al monitorear las salidas del programa, código
fuente, estructuras de datos y valores del pro-
grama, es posible localizar aún los errores más
difíciles.
276. Dentro de las características de Turbo Debug-
ger se encuentran las siguientes:
Evaluación completa de expresiones en ensam-
blador, C, C++ y Pascal.
Control total de la ejecución del programa, in-
cluyendo animaciones.
Acceso de bajo nivel a los registros del CPU y la
memoria del sistema.
277. Capacidad de inspección de datos completa.
Facilidades para el manejo de ejecución paso a
paso de los programas, incluyendo puntos de
ruptura (breakpoints).
Soporte total de programación orientada a ob-
jetos.
278. Formato del comando:
TD archivo_executable
donde:
archivo_ejecutable- nombre del archivo
enlazado