SlideShare une entreprise Scribd logo
1  sur  278
Ingeniería en Sistemas
  Computacionales
      Primera Unidad

   Lenguaje Ensamblador
       (SCM-0421)
Ing. Mario Jiménez Vázquez
Programa

1.- Fundamentos
2.- Elementos del Lenguaje
3.- Modularización
4.- Programación Híbrida
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
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.
3.- Modularización

3.1.- Macros
3.1.1.- Internas
3.1.2.- Externas

3.2.- Procedimientos
3.2.1.- Internos
3.2.2.- Externos
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
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
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.
Lenguaje Ensamblador
44 0012 B9 00 05                 mov Cx, 5
45 0015 C6 06 00 43r 08   ciclo: mov Dato, 08h
46
47 001A BA 03 78          atras: mov dx, 378h
48 001D A0 00 43r                mov al, Dato
49 0020 EE                       out dx, al
50 0021 E8 00 1C                 call Retardo
51 0024 E8 00 2B                 call pantalla
52 0027 D0 0E 00 43r             Ror Dato,1
53 002B 80 3E 00 43r 80          cmp Dato,80h
54 0030 75 E8                    jne atras
55
56 0032 E2 E1                  Loop ciclo
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
1.1.2.- Escalabilidad de los
         procesadores
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.
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.
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.
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.
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.
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.
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.
Con todo esto queda patente que tener un alto
factor de escalabilidad es un requisito in-
teresante para cualquier sistema.
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
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
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
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
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.
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.
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:
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.
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.
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.
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.
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.
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.
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.
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
Escalabilidad de los Procesadores
Procesador Pentium III




Parte externa     Parte Interna
Procesador Pentium IV




Parte externa     Parte Interna
1.1.3.- Tipos de Lenguajes
        Ensambladores
Se pueden distinguir tres tipos de
ensambladores:

– Ensambladores básicos.
– Ensambladores modulares
– Ensambladores modulares 32-bits o de
  alto nivel.
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.
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).
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.
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.
• 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
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.
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).
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.
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.
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.
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
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.
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.
1.1.4.- Clasificación de
        memorias
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)
Por su encapsulado:

– SIMM (Single In line Memory Module)

– DIMM (Dual In line Memory Module)

– DIP (Dual In line Pin)
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
1.1.5.- Unidades de entrada / salida
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.
Hay tres técnicas de control de entrada/salida
(E/S) principales:


          • E/S programada

          • E/S con interrupciones

          • Acceso Directo a Memoria (DMA)
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.
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.
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.
Unidades de entrada-salida


      »Estándar

      »Paralelo

      »Serie
Dispositivos Estándar

    » Teclado
    » Ratón
    » Pantalla
    » Impresora
    » Módem
    » Red
Puertos Paralelo (estándar)

           » LPT1

           » LPT2
Impresora
» Puerto Paralelo

Pantalla
» Puerto RGB
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.
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.
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
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
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
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
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
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
1.1.5 Unidades de entrada/ salida

Puertos Serie (estándar)

             » COM1

             » COM2
1.1.5 Unidades de entrada/ salida

Puertos Serie (alta velocidad)

              » USB

              » Firewire
1.1.5 Unidades de entrada/ salida

Puertos Serie (Inalámbricos)


– Bluetooth (radiofrecuencia)

– Infrarrojo (luz infrarroja)
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)
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.
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
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.
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.
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.
1.2.- El microprocesador
   1.2.1 Buses

   1.2.2 Registros

   1.2.3 Modos de direccionamiento
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
1.2.1 Buses
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
Tipo de transferencia:

    • Lectura
    • Escritura
    • Lectura-Escritura
    • Escritura-Lectura
    • Bloque
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.
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.
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.
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.
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.
1.2.2.- Registros
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
1.2.3.- Modos de Direccionamiento
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.
Direccionamiento de datos
   » Registro
   » Inmediato
   »Directo
   » Indirecto a registro
   » Base más índice
   » Relativo a registro
   » Relativo a base más índice
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.
Direccionamiento Inmediato
Immediate Addressing.- Se usa para transferir
el byte o word inmediato al registro destino.

          • Ejemplo: MOV AX,1234H

Copia 1234H dentro del registro AX.
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.
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.
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.
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]
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]
1.3.- Interrupciones


    1.3.1.- Hardware

    1.3.2.- Software
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.
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.
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.
1.3.1.- Interrupciones
        por hardware
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).
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.
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).
1.3.2 Interrupciones por Software
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
• 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.
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.
Componentes de un programa
 en Lenguaje Ensamblador

       Comentarios
       Palabras Reservadas
       Identificadores
       Instrucciones
       Directivas
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.
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
Palabras Reservadas en
        Lenguaje Ensamblador
• Instrucciones: MOV, ADD, etc.

• Directivas: END, SEGMENT, etc.

• Operadores: FAR, SIZE, etc.

• Símbolos predefinidos: @Data, @Model
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.
Caracteres de un Identificador
• Letras del alfabeto:     A-Z

• Dígitos:                 0 al 9

• Caracteres especiales:   interrogación (?)
                           subrayado ( _ )
                           signo de pesos($)
                           arroba (@)
                           punto (.)
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.
Ejemplos de Identificadores

       COUNT
       PAGE45
       _DATONUEVO
       $F100
1.4.4 Instrucciones
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.
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
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
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.
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.
• Ejemplos:

              * CMP DX,CX
              * CMP AX, BX
              * CMP AL,25
              * CMP BH,Label
1.4.5.-Directivas
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.
1.4.5 Directivas

  • PAGE y TITLE
  • SEGMENT y ENDS
  • PROC y ENDP
  • ASSUME
  • END
  • DB, DW
  • EQU
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
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
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
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.
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
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.
Ejemplos:

• STACKSG SEGMENT PARA STACK ‘Stack’
•
• STACKSG ENDS


• DATASG SEGMENT PARA ‘Data’
•
• DATASG ENDS
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.
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
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.
Ejemplos con ASSUME:


OPERACIÓN           OPERANDO

 ASSUME     SS:Nompila, DS:nomsegdatos,
            CS:nomsegcódigo
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.
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
1.5.1 Captura y Edición
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.
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.
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.
1.5.2 Procedimiento de Ensamble
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.
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.
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.
1.5.3 Procedimiento de Enlace
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).
Una de las tareas del enlazador es combinar
los programas ensamblados en forma sepa-
rada en un solo programa ejecutable.
1.5.4 Procedimiento de Ejecución
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.
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.
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.
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.
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.
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.
Como consecuencia, los programas tienen
que inicializar el DS con la dirección del
segmento de datos.
1.5.5 Procedimiento de Depuración
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
1.6.1 Wordpad y Edit
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.
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.
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.
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.
1.6.2 Turbo Assembler
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.
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.
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
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
1.6.3 Turbo Linker
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.
Formato del comando:

TLINK archivo_objeto [opciones]

donde:

archivo_objeto- nombre del archivo objeto
opciones- modo en el que se enlaza
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
1.6.4 Turbo Debugger
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.
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.
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.
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.
Formato del comando:

TD archivo_executable

donde:

archivo_ejecutable- nombre del archivo
enlazado

Contenu connexe

Tendances

02.Arquitectura de los microcontroladores pic
02.Arquitectura de los microcontroladores pic02.Arquitectura de los microcontroladores pic
02.Arquitectura de los microcontroladores picJonathan Ruiz de Garibay
 
"Hola Mundo" C18, PIC18F y MPLAB
"Hola Mundo"  C18,  PIC18F y MPLAB"Hola Mundo"  C18,  PIC18F y MPLAB
"Hola Mundo" C18, PIC18F y MPLABBlackD10
 
Decodificador de instrucciones
Decodificador de instruccionesDecodificador de instrucciones
Decodificador de instruccionesAlejandro Cano
 
Introducción al microcontrolador MSP430
Introducción al microcontrolador MSP430Introducción al microcontrolador MSP430
Introducción al microcontrolador MSP430Julio Jornet Monteverde
 
Matriz de LEDs + Interfaz Grafica con GTK en Linux
Matriz de LEDs + Interfaz Grafica con GTK en LinuxMatriz de LEDs + Interfaz Grafica con GTK en Linux
Matriz de LEDs + Interfaz Grafica con GTK en LinuxSNPP
 
Clasificación dos sistemas operativos
 Clasificación dos sistemas operativos Clasificación dos sistemas operativos
Clasificación dos sistemas operativosirocho
 
Arquitectura del microcontrolador
Arquitectura del microcontroladorArquitectura del microcontrolador
Arquitectura del microcontroladorJose Chacho
 
Introduccion micro´s
Introduccion micro´sIntroduccion micro´s
Introduccion micro´sUrbina15
 
programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84guestf09168b
 
Presentación Taller ROS - Robotic Operating System
Presentación Taller ROS - Robotic Operating SystemPresentación Taller ROS - Robotic Operating System
Presentación Taller ROS - Robotic Operating SystemBruno Faúndez
 
Fase 1 - Ensamble y Mantenimiento
Fase 1 - Ensamble y MantenimientoFase 1 - Ensamble y Mantenimiento
Fase 1 - Ensamble y MantenimientoFrank Alarza Moreno
 
Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550 Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550 Alejandra Ruiz
 

Tendances (18)

02.Arquitectura de los microcontroladores pic
02.Arquitectura de los microcontroladores pic02.Arquitectura de los microcontroladores pic
02.Arquitectura de los microcontroladores pic
 
"Hola Mundo" C18, PIC18F y MPLAB
"Hola Mundo"  C18,  PIC18F y MPLAB"Hola Mundo"  C18,  PIC18F y MPLAB
"Hola Mundo" C18, PIC18F y MPLAB
 
Decodificador de instrucciones
Decodificador de instruccionesDecodificador de instrucciones
Decodificador de instrucciones
 
Introducción al microcontrolador MSP430
Introducción al microcontrolador MSP430Introducción al microcontrolador MSP430
Introducción al microcontrolador MSP430
 
Matriz de LEDs + Interfaz Grafica con GTK en Linux
Matriz de LEDs + Interfaz Grafica con GTK en LinuxMatriz de LEDs + Interfaz Grafica con GTK en Linux
Matriz de LEDs + Interfaz Grafica con GTK en Linux
 
Clasificación dos sistemas operativos
 Clasificación dos sistemas operativos Clasificación dos sistemas operativos
Clasificación dos sistemas operativos
 
Arquitectura del microcontrolador
Arquitectura del microcontroladorArquitectura del microcontrolador
Arquitectura del microcontrolador
 
Microprocesador
MicroprocesadorMicroprocesador
Microprocesador
 
Microprocesador
MicroprocesadorMicroprocesador
Microprocesador
 
Introduccion micro´s
Introduccion micro´sIntroduccion micro´s
Introduccion micro´s
 
programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84programacion con microcontrolador pic 16f84
programacion con microcontrolador pic 16f84
 
Microprocesador
Microprocesador Microprocesador
Microprocesador
 
Presentación Taller ROS - Robotic Operating System
Presentación Taller ROS - Robotic Operating SystemPresentación Taller ROS - Robotic Operating System
Presentación Taller ROS - Robotic Operating System
 
Procesadores
ProcesadoresProcesadores
Procesadores
 
Motor pasopaso
Motor pasopasoMotor pasopaso
Motor pasopaso
 
Fase 1 - Ensamble y Mantenimiento
Fase 1 - Ensamble y MantenimientoFase 1 - Ensamble y Mantenimiento
Fase 1 - Ensamble y Mantenimiento
 
Tipos de microcontroladores
Tipos de microcontroladoresTipos de microcontroladores
Tipos de microcontroladores
 
Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550 Presentacion pic 16f887 y 18f4550
Presentacion pic 16f887 y 18f4550
 

En vedette

ManageEngine ServiceDesk Plus Admin Guide
ManageEngine ServiceDesk Plus Admin GuideManageEngine ServiceDesk Plus Admin Guide
ManageEngine ServiceDesk Plus Admin GuideServiceDesk Plus
 
Presentación Increventia
Presentación IncreventiaPresentación Increventia
Presentación IncreventiaCIT Marbella
 
Nilla Recommendation Letter
Nilla Recommendation LetterNilla Recommendation Letter
Nilla Recommendation LetterRobert Kodingo
 
Growth Hacking with LinkedIn - By Peter Chee @thinkspace
Growth Hacking with LinkedIn - By Peter Chee @thinkspaceGrowth Hacking with LinkedIn - By Peter Chee @thinkspace
Growth Hacking with LinkedIn - By Peter Chee @thinkspacePeter Chee
 
Apresentação OMG! (Interdesigners 2011)
Apresentação OMG! (Interdesigners 2011)Apresentação OMG! (Interdesigners 2011)
Apresentação OMG! (Interdesigners 2011)Caio Henrique
 
Perspektivwechsel Normdaten: ein neues Nutzungskonzept an der UB und HMT Leipzig
Perspektivwechsel Normdaten: ein neues Nutzungskonzept an der UB und HMT LeipzigPerspektivwechsel Normdaten: ein neues Nutzungskonzept an der UB und HMT Leipzig
Perspektivwechsel Normdaten: ein neues Nutzungskonzept an der UB und HMT Leipzigmrtncz
 
Migraña y discapacidad.
Migraña y discapacidad.Migraña y discapacidad.
Migraña y discapacidad.José María
 
Angular js 24 april 2013 amsterdamjs
Angular js   24 april 2013 amsterdamjsAngular js   24 april 2013 amsterdamjs
Angular js 24 april 2013 amsterdamjsMarcin Wosinek
 
Cancer de ovario mi parte
Cancer de ovario mi parteCancer de ovario mi parte
Cancer de ovario mi parteMancho Suarez
 
CAPITULO II
CAPITULO IICAPITULO II
CAPITULO II26200926
 
El naixement del món modern reforma
El naixement del món modern reformaEl naixement del món modern reforma
El naixement del món modern reformaRaquel Pérez Badia
 
Input (warm up)
Input (warm up)Input (warm up)
Input (warm up)ashtic
 
Online Communities at EuroPCom - Steven Clift KHub.Net and E-Democracy.org
Online Communities at EuroPCom - Steven Clift KHub.Net and E-Democracy.orgOnline Communities at EuroPCom - Steven Clift KHub.Net and E-Democracy.org
Online Communities at EuroPCom - Steven Clift KHub.Net and E-Democracy.orgSteven Clift
 
Thomas Alva Edison
Thomas Alva EdisonThomas Alva Edison
Thomas Alva Edisonjclua1234
 

En vedette (20)

Workshop Webtools
Workshop WebtoolsWorkshop Webtools
Workshop Webtools
 
ManageEngine ServiceDesk Plus Admin Guide
ManageEngine ServiceDesk Plus Admin GuideManageEngine ServiceDesk Plus Admin Guide
ManageEngine ServiceDesk Plus Admin Guide
 
Aparato psiquico
Aparato psiquicoAparato psiquico
Aparato psiquico
 
Presentación Increventia
Presentación IncreventiaPresentación Increventia
Presentación Increventia
 
Nilla Recommendation Letter
Nilla Recommendation LetterNilla Recommendation Letter
Nilla Recommendation Letter
 
Growth Hacking with LinkedIn - By Peter Chee @thinkspace
Growth Hacking with LinkedIn - By Peter Chee @thinkspaceGrowth Hacking with LinkedIn - By Peter Chee @thinkspace
Growth Hacking with LinkedIn - By Peter Chee @thinkspace
 
Apresentação OMG! (Interdesigners 2011)
Apresentação OMG! (Interdesigners 2011)Apresentação OMG! (Interdesigners 2011)
Apresentação OMG! (Interdesigners 2011)
 
Perspektivwechsel Normdaten: ein neues Nutzungskonzept an der UB und HMT Leipzig
Perspektivwechsel Normdaten: ein neues Nutzungskonzept an der UB und HMT LeipzigPerspektivwechsel Normdaten: ein neues Nutzungskonzept an der UB und HMT Leipzig
Perspektivwechsel Normdaten: ein neues Nutzungskonzept an der UB und HMT Leipzig
 
Migraña y discapacidad.
Migraña y discapacidad.Migraña y discapacidad.
Migraña y discapacidad.
 
El procesador
El procesadorEl procesador
El procesador
 
Angular js 24 april 2013 amsterdamjs
Angular js   24 april 2013 amsterdamjsAngular js   24 april 2013 amsterdamjs
Angular js 24 april 2013 amsterdamjs
 
Cancer de ovario mi parte
Cancer de ovario mi parteCancer de ovario mi parte
Cancer de ovario mi parte
 
EdicióN13
EdicióN13EdicióN13
EdicióN13
 
CAPITULO II
CAPITULO IICAPITULO II
CAPITULO II
 
El naixement del món modern reforma
El naixement del món modern reformaEl naixement del món modern reforma
El naixement del món modern reforma
 
Content Scope España 2015
Content Scope España 2015 Content Scope España 2015
Content Scope España 2015
 
House101
House101House101
House101
 
Input (warm up)
Input (warm up)Input (warm up)
Input (warm up)
 
Online Communities at EuroPCom - Steven Clift KHub.Net and E-Democracy.org
Online Communities at EuroPCom - Steven Clift KHub.Net and E-Democracy.orgOnline Communities at EuroPCom - Steven Clift KHub.Net and E-Democracy.org
Online Communities at EuroPCom - Steven Clift KHub.Net and E-Democracy.org
 
Thomas Alva Edison
Thomas Alva EdisonThomas Alva Edison
Thomas Alva Edison
 

Similaire à Unidad i (20)

Microprocesador ::: http://leymebamba.com
Microprocesador  ::: http://leymebamba.comMicroprocesador  ::: http://leymebamba.com
Microprocesador ::: http://leymebamba.com
 
Antologia Lenguaje Ensamblador.pdf
Antologia Lenguaje Ensamblador.pdfAntologia Lenguaje Ensamblador.pdf
Antologia Lenguaje Ensamblador.pdf
 
Curso basico de pic 16 f877
Curso basico de pic 16 f877Curso basico de pic 16 f877
Curso basico de pic 16 f877
 
Segundo blog arquitectura de hardware tercer corte
Segundo blog arquitectura de hardware tercer corteSegundo blog arquitectura de hardware tercer corte
Segundo blog arquitectura de hardware tercer corte
 
Micropro
MicroproMicropro
Micropro
 
Microcontroladores Ciscx
Microcontroladores CiscxMicrocontroladores Ciscx
Microcontroladores Ciscx
 
5154 - Tema 2
5154 - Tema 25154 - Tema 2
5154 - Tema 2
 
Microcontroladores ASM
Microcontroladores ASMMicrocontroladores ASM
Microcontroladores ASM
 
Sistema Experto para Mantenimiento de PCs
Sistema Experto para Mantenimiento de PCsSistema Experto para Mantenimiento de PCs
Sistema Experto para Mantenimiento de PCs
 
6 microprocesador
6 microprocesador6 microprocesador
6 microprocesador
 
6 microprocesador
6 microprocesador6 microprocesador
6 microprocesador
 
6 microprocesador
6 microprocesador6 microprocesador
6 microprocesador
 
6 microprocesador
6 microprocesador6 microprocesador
6 microprocesador
 
Arqui hardware
Arqui hardwareArqui hardware
Arqui hardware
 
Libro basico pic
Libro basico picLibro basico pic
Libro basico pic
 
Manual de Uso Detallado de Proteus
Manual de Uso Detallado de ProteusManual de Uso Detallado de Proteus
Manual de Uso Detallado de Proteus
 
Pic16 f877
Pic16 f877Pic16 f877
Pic16 f877
 
Monroylopes act4.2 microprocesador de la computadora
Monroylopes act4.2 microprocesador de la computadoraMonroylopes act4.2 microprocesador de la computadora
Monroylopes act4.2 microprocesador de la computadora
 
Microcontroladores PIC USS
Microcontroladores PIC  USSMicrocontroladores PIC  USS
Microcontroladores PIC USS
 
4 Microprocesadores
4 Microprocesadores4 Microprocesadores
4 Microprocesadores
 

Unidad i

  • 1. Ingeniería en Sistemas Computacionales Primera Unidad Lenguaje Ensamblador (SCM-0421) Ing. Mario Jiménez Vázquez
  • 2. Programa 1.- Fundamentos 2.- Elementos del Lenguaje 3.- Modularización 4.- Programación Híbrida
  • 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.
  • 5. 3.- Modularización 3.1.- Macros 3.1.1.- Internas 3.1.2.- Externas 3.2.- Procedimientos 3.2.1.- Internos 3.2.2.- Externos
  • 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.
  • 9. Lenguaje Ensamblador 44 0012 B9 00 05 mov Cx, 5 45 0015 C6 06 00 43r 08 ciclo: mov Dato, 08h 46 47 001A BA 03 78 atras: mov dx, 378h 48 001D A0 00 43r mov al, Dato 49 0020 EE out dx, al 50 0021 E8 00 1C call Retardo 51 0024 E8 00 2B call pantalla 52 0027 D0 0E 00 43r Ror Dato,1 53 002B 80 3E 00 43r 80 cmp Dato,80h 54 0030 75 E8 jne atras 55 56 0032 E2 E1 Loop ciclo
  • 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.
  • 20. 1.1.2.- Escalabilidad de los procesadores
  • 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
  • 44. Escalabilidad de los Procesadores
  • 45.
  • 46. Procesador Pentium III Parte externa Parte Interna
  • 47. Procesador Pentium IV Parte externa Parte Interna
  • 48. 1.1.3.- Tipos de Lenguajes Ensambladores
  • 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
  • 67. 1.1.5.- Unidades de entrada / salida
  • 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.
  • 73. Unidades de entrada-salida »Estándar »Paralelo »Serie
  • 74. Dispositivos Estándar » Teclado » Ratón » Pantalla » Impresora » Módem » Red
  • 75. Puertos Paralelo (estándar) » LPT1 » LPT2
  • 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.
  • 104.
  • 105. 1.2.- El microprocesador 1.2.1 Buses 1.2.2 Registros 1.2.3 Modos de direccionamiento
  • 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
  • 108.
  • 109.
  • 110.
  • 111.
  • 112.
  • 113.
  • 114.
  • 115.
  • 116.
  • 117.
  • 118.
  • 119.
  • 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.
  • 145. 1.2.3.- Modos de Direccionamiento
  • 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.
  • 149.
  • 150. Direccionamiento Inmediato Immediate Addressing.- Se usa para transferir el byte o word inmediato al registro destino. • Ejemplo: MOV AX,1234H Copia 1234H dentro del registro AX.
  • 151.
  • 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]
  • 161.
  • 162. 1.3.- Interrupciones 1.3.1.- Hardware 1.3.2.- Software
  • 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.
  • 166. 1.3.1.- Interrupciones por hardware
  • 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).
  • 170.
  • 171.
  • 172.
  • 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.
  • 200. Ejemplos de Identificadores COUNT PAGE45 _DATONUEVO $F100
  • 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.
  • 208. • Ejemplos: * CMP DX,CX * CMP AX, BX * CMP AL,25 * CMP BH,Label
  • 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.
  • 218. Ejemplos: • STACKSG SEGMENT PARA STACK ‘Stack’ • • STACKSG ENDS • DATASG SEGMENT PARA ‘Data’ • • DATASG ENDS
  • 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.
  • 222. Ejemplos con ASSUME: OPERACIÓN OPERANDO ASSUME SS:Nompila, DS:nomsegdatos, CS:nomsegcó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
  • 225.
  • 226.
  • 227. 1.5.1 Captura y Edició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.
  • 238. 1.5.4 Procedimiento de Ejecución
  • 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.
  • 246.
  • 247. 1.5.5 Procedimiento de Depuración
  • 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
  • 258.
  • 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