Unidad I
Unidad I
Unidad I
Programa
1.- Fundamentos
2.- Elementos del Lenguaje
3.- Modularizacin
4.- Programacin Hbrida
1.- Fundamentos
1.1.- Introduccin 1.2.- El Microprocesador 1.3 .-Interrupciones 1.4.- Estructura de un programa en Lenguaje Ensamblador 1.5.- Procedimiento de ensamble, enlace y ejecucin 1.6.- Entorno de programacin
3.- Modularizacin
3.1.- Macros 3.1.1.- Internas 3.1.2.- Externas 3.2.- Procedimientos 3.2.1.- Internos 3.2.2.- Externos
1.1.- Introduccin
1.1.1.- Uso y aplicaciones del Lenguaje Ensamblador. 1.1.2.- Escalabilidad de los procesadores
Un Lenguaje Ensamblador es aquel en el que cada enunciado produce exactamente una instruccin de mquina. Existe una correspondencia uno a uno entre las instrucciones de mquina y los enunciados del programa en ensamblador.
Lenguaje Ensamblador
44 0012 B9 00 05 45 0015 C6 06 00 43r 08 46 47 001A BA 03 78 48 001D A0 00 43r 49 0020 EE 50 0021 E8 00 1C 51 0024 E8 00 2B 52 0027 D0 0E 00 43r 53 002B 80 3E 00 43r 80 54 0030 75 E8 55 56 0032 E2 E1 mov Cx, 5 ciclo: mov Dato, 08h
atras: mov dx, 378h mov al, Dato out dx, al call Retardo call pantalla Ror Dato,1 cmp Dato,80h jne atras
Loop ciclo
Si cada lnea del programa en Lenguaje Ensamblador contiene exactamente un enunciado y cada palabra de mquina contiene exactamente una instruccin de mquina, entonces un programa en ensamblador de n-lneas producir, a su vez, un programa en lenguaje de mquina de n-palabras.
Compilar
Ensamblar
Enlazar
Leer Decodificar
La principal razn por la que se utiliza el lenguaje ensamblador, es porque resulta muy complejo programar directamente en lenguaje de mquina, los sistemas que se utilizan para resolver las necesidades computacionales de las empresas. Es ms fcil utilizar nombres y direcciones simblicas que manejar nicamente valores binarios, octales o hexadecimales.
Cuando se usa Ensamblador se puede acceder directamente a todos los recursos de un procesador, mientras que con un lenguaje de nivel medio o alto no es posible hacerlo, ya que el Ensamblador est diseado para hacer uso del conjunto de instrucciones completo de un procesador especfico.
La programacin en Ensamblador es mucho ms difcil que en lenguaje de alto nivel. Escribir un programa en Ensamblador es ms tardado que escribirlo en alto nivel.
Depurar un programa en Ensamblador es ms complejo. Es ms difcil mantener un programa en Ensamblador que en alto nivel.
Programando correctamente un sistema, se puede producir cdigo ms pequeo en lenguaje Ensamblador que en lenguaje de alto nivel. Esto es importante porque en todas las aplicaciones la rapidez de respuesta y el tamao son factores principales.
Como ejemplos se puede mencionar al cdigo de una tarjeta inteligente, el cdigo de un telfono 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 interrupciones y trampas de bajo nivel de un sistema operativo, adems de los controladores de dispositivos de muchos sistemas incorporados de tiempo real.
Se estima que llevar a cabo la programacin de un sistema en lenguaje ensamblador es por lo menos 5 veces ms tardada que en un lenguaje de alto nivel.
Tambin se estima que el cdigo resultante de la programacin en ensamblador es por lo menos la tercera parte del cdigo obtenido en alto nivel y se ejecuta en la tercera parte del tiempo. Lo anterior implica que cuando se programa en alto nivel el cdigo generado depende del compilador, mientras que cuando se usa ensamblador el cdigo depende del programador.
En consecuencia el cdigo producido por el compilador ocupa un espacio mayor en la memoria y se almacena en archivos ms grandes. Por el contrario, el cdigo producido por el lenguaje ensamblador ocupa poco espacio en memoria y se almacena en archivos pequeos, por lo que ocupan poco espacio en los medios de almacenamiento, como disco duro u otros.
Con frecuencia la arquitectura de una aplicacin se evala en trminos de su rendimiento; la capacidad que tiene para terminar un nmero de operaciones lgicas en un perodo especfico de tiempo. La meta es lograr una arquitectura que garantice que el rendimiento alcanzar un nivel suficientemente alto que permita darle un tiempo de respuesta adecuado a la demanda del usuario.
Una arquitectura escalable es aquella que tiene la capacidad de incrementar el rendimiento sin que tenga que redisearse por obligacin y simplemente se aprovecha de manera adecuada el hardware adicional.
La definicin de escalabilidad ms apropiada en los trminos 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 mayora de las veces se habla de escalar hacia arriba, es decir, hacer el sistema ms grande, no siempre es necesario. Muchas veces interesa hacer el sistema ms pequeo logrando reutilizar los componentes excluidos.
Funcionalidad y rendimiento.
Si un sistema escala, mejora su rendimiento, de manera que de forma ideal, al aumentar en N el nmero 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 sistema lleve un costo de N por el costo de un procesador. La escalabilidad perfecta es lineal, si una potencia 10 veces superior nos cuesta 15 veces ms, el sistema no est escalando bien.
Compatibilidad de componentes. De manera que la inclusin o exclusin de componentes en el sistema no suponga, por obligacin, la inutilizacin, infrautilizacin o costo adicional en los componentes.
Con todo esto queda patente que tener un alto factor de escalabilidad es un requisito interesante para cualquier sistema.
8.2 M
(0.8)
42 M
(0.13) 20 Etapas
77 M
(0.13)
230 M
(0.09) 13 Etapas
512 Kb L2
2 Kb L2
1 Mb L2
2x1 Mb L2
El ncleo del K8 ha sido concebido desde un principio para su perfecta implementacin en sistemas multiprocesador, tarea que se ve ampliamente beneficiada con la implementacin de la tecnologa Hyper Transport.
Un equipo basado en 8 procesadores Opteron puede tener 64 bancos de memoria directamente conectados (128 GB de RAM) y 4 enlaces Hyper Transport.
Sockets
Uno de los aspectos ms controvertidos en todo a lo que la nueva generacin 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 estaciones de trabajo (workstation) de sistemas multiprocesador.
Tambin se pueden instalar los Athlon64 FX, la versin ms potente del Athlon64, si bien la tendencia es que en poco tiempo slo 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, aqullos Athlon64 que no tienen habilitado el doble canal de memoria y funcionan con memoria DDR sin registrar.
Hasta hace poco tiempo estos microprocesadores eran la nica opcin que un usuario medio poda adquirir, dado el elevadsimo precio de la siguiente familia de microprocesadores Athlon 64: los Athlon64 FX, cuyo precio es muy superior (prcticamente el triple) y desde el principio han estado enfocados a las plataformas socket 939 y 940, sin demasiadas ofertas 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 ms bien simblica.
La situacin ha venido a ser un tanto comparable a aqul Intel Pentium 4 en socket 423, con la diferencia de que entonces no se saba con tanta certeza la poca duracin que iba a tener en el mercado.
El ltimo en discordia es el socket 939. Es exactamente igual que el 940 a excepcin de que tiene un pin menos, debido a que los microprocesadores que sean insertados 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 ms que prometedor, y es que un usuario tericamente podra comprar hoy un Athlon 64 939 y cambiarlo dentro de un ao y medio por un nuevo microprocesador mucho ms potente y econmico, sin necesidad de tener que sustituir ms hardware que el propio microprocesador
Parte externa
Parte Interna
Procesador Pentium IV
Parte externa
Parte Interna
Ensambladores modulares
Ensambladores modulares 32-bits o de alto nivel.
Ensambladores bsicos
Son de muy bajo nivel, y su tarea consiste bsicamente en ofrecer nombres simblicos a las distintas instrucciones, parmetros y cosas como los modos de direccionamiento.
Estos ensambladores reconocen una serie de directivas (o meta instrucciones) que indican ciertos parmetros de funcionamiento del ensamblador.
Ensambladores modulares, o macro ensambladores. Son descendientes de los ensambladores bsicos, fueron muy populares en las dcadas de los 50 y los 60, antes de la generalizacin de los lenguajes de alto nivel. Hacen todo lo que puede hacer un ensamblador y proporcionan una serie de directivas para definir e invocar macroinstrucciones (o simplemente, macros).
Ensambladores modulares 32-bits o de alto nivel. Son ensambladores que aparecieron como respuesta a una nueva arquitectura de procesadores de 32 bits, muchos de ellos teniendo compatibilidad hacia atrs para trabajar con programas con estructuras de 16 bits.
Permiten tambin el uso de macros, y pueden utilizar estructuras de programacin ms 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
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 ms popular ensamblador disponible para ese sistema operativo.
El MASM soport una amplia variedad de facilidades para macros y programacin estructurada, incluyendo instrucciones de alto nivel para bucles, llamadas a procedimientos y alternacin (por lo tanto, MASM es un ejemplo de un ensamblador de alto nivel).
Versiones posteriores agregaron la capacidad de producir programas para los sistemas operativos Windows. MASM es una de las pocas herramientas de desarrollo de Microsoft para las cuales no haba 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 programacin en lenguaje ensamblador para la familia de los microprocesadores 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 programacin Turbo, Turbo Assembler ya no se encuentra 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 tambin poda ensamblar los archivos de cdigo 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 ensamblador del proyecto GNU. Es el back-end por defecto del GNU Compiler 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.
Por su tecnologa de fabricacin 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:
Por su uso: Memoria Principal Memoria Cach (RAM de alto desempeo) Tag RAM (RAM de alto desempeo) RAM Disk (Disco en RAM) Memoria Virtual (RAM en disco) Paginada Segmentada Segmentos paginados
La arquitectura de entrada-salida de una computadora es la interfaz con el exterior . Esta arquitectura se disea de manera que permita una forma sistemtica de controlar las interacciones con el mundo exterior y proporcione al sistema operativo, o programa monitor, la informacin que necesita para gestionar eficazmente la actividad de entrada-salida.
E/S programada, en la que la E/S se produce bajo el control directo y continuo del programa que solicita la operacin. E/S mediante interrupciones, en la que el programa genera una orden de E/S y despus contina ejecutndose hasta que el hardware de E/S lo interrumpe para indicar que la operacin ha concluido.
Acceso Directo a Memoria (DMA, Direct Memory Access), en el que un procesador de E/S especfico toma el control de la operacin 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 dispositivos externos, mientras que Firewire es una interfaz serie de alta velocidad.
Unidades de entrada-salida
Estndar
Paralelo
Serie
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 diferentes a las impresoras, como lectores de disco y protectores de programas, entre otros, que pueden conectarse y trabajar con el puerto paralelo.
IN AL, DX
Usa un cable simple con 6 conductores, que incluye dos pares diferenciales de lneas de reloj y datos, ms dos lneas de alimentacin.
Es posible conectar y desconectar dispositivos sin apagar el equipo. Originalmente la interfaz fue desarrollada por Apple y Texas Instruments.
El AGP opera a la frecuencia de reloj del bus del microprocesador. Est diseado de tal manera que la transferencia entre la tarjeta video y la memoria del sistema se realice a la mxima velocidad.
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 programacin Su conjunto de instrucciones Sus modos de direccionamiento Su Lenguaje Ensamblador
1.2.1 Buses
Caracterizacin de un Bus
Arquitectura: Tradicional o Alto Desempeo
Tipo de transferencia:
Lectura Escritura Lectura-Escritura Escritura-Lectura Bloque
1.2.1 Buses
CLK La terminal de reloj proporciona al procesador la seal bsica de temporizacin. La seal debe tener un ciclo activo del 33% para proporcionar la temporizacin interna adecuada. Vcc Proporciona la seal de alimentacin de +5VCD, +/- 10% al procesador.
1.2.1 Buses
NMI.- La Interrupcin no-enmascarable, es parecida a INTR, excepto porque no verifica el bit de bandera IF, al activar NMI, la entrada utiliza el vector de interrupcin 2.
RESET .- La entrada de restauracin ocasiona que el procesador se reinicie si se mantiene en alto por un mnimo de cuatro perodos de reloj. Al activarse el 8086/8088 inician en la memoria FFFF0H e inhabilita interrupciones futuras restaurando el bit IF.
1.2.1 Buses
INTR.- Solicitud de interrupcin, se utiliza para solicitar una interrupcin por hardware. Si INTR se mantiene en alto cuando IF=1, el procesador entra en un ciclo de reconocimiento de interrupcin (INTA se activa), despus de ejecutar la instruccin actual.
1.2.1 Buses
RD Seal 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 espera en la temporizacin 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 caractersticas, las operaciones que se realizan entre ellos, y cmo se realizan.
1.2.2 Registros
El Modelo de Programacin de un procesador est formado por los registros internos, a los que se puede acceder utilizando el conjunto de instrucciones.
AH AH AH AH
AX BX CX DX
AL BL CL DL
Accumulator Base Counter Data Stack pointer Base pointer Source index Destination
SP BP SI DI
CS DS SS ES
Code Segment Data Segment Stack Segment Extra Segment Pointer Instruction
IP
OF DF IF TF SF ZF AF PF
CF
Flags
IP (Apuntador de instrucciones).- Apunta a la localidad de memoria donde se encuentra la prxima instruccin a ser ejecutada.
CF (Acarreo).- Contiene el acarreo resultante de una operacin aritmtica.
PF (Paridad).- Indica paridad par o impar, resultante de una operacin en los 8-bits de datos de menor orden. AF (Acarreo auxiliar).- Contiene un acarreo externo del bit 3 en un dato de 8-bits, para aritmtica especializada.
SF (Signo).- Contiene el signo resultante de una operacin aritmtica (0-positivo, 1-negativo). TF (Trampa).- Permite la operacin paso a paso del procesador. Se ejecuta una instruccin y se detiene para examinar sus efectos sobre los registros y la memoria. IF (Interrupcin).- Habilita e inhabilita la atencin a interrupciones.
DF (Direccin).- Designa la direccin, a la izquierda o a la derecha, para mover o comparar cadenas de caracteres. OF (Desbordamiento).- Indice desbordamiento del bit ms significativo, despus de una operacin aritmtica.
AX BX CX DX BP SI DI SP
AH BH CH DH
AL BL CL DL
Acumulator Base Count Data Pointer Base Index Source Index Destination Stack Pointer Flags Instructor Pointer Status Machine Register
F IP MSW Segment CS DS ES SS
Selectors TR LDTR
AH BH CH DH SP
AL BL CL DL
BP
SI DI
CS DS ES SS FS GS
Segment Register
EIP EFLAGS
IP FLAGS
The internal structure of the 80386 microprocessor ilustrating the general, segment and flags registers.
* Memoria,
* Puertos de entrada y salida.
Direccionamiento de datos
Registro Inmediato Directo Indirecto a registro Base ms ndice Relativo a registro Relativo a base ms ndice
Register addressing. Se usa para transferir un byte o una palabra desde el registro fuente hasta el registro destino. Ejemplo: MOV AX,CX
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. Ladireccin de memoria del dato se almacena con la instruccin.
Ejemplo: MOV AX,DATO Toma el contenido de 16-bits de la direccin 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.
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 cuenta con dispositivos que puedan comunicarse con el mundo exterior.
Para ello deber contar con dispositivos para introducir datos al sistema que puedan ser almacenados en la memoria y procesados por el CPU.
Igualmente, se deben recuperar los resultados del procesamiento a travs 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 comunicacin con el exterior.
Aunque la revisin peridica de los puertos de entrada-salida es simple, puede resultar ineficiente. Las Interrupciones representan una manera muy eficiente para atender dispositivos asncronos. El perifrico atrae la atencin del procesador a travs de una interrupcin, ste concluye la instruccin actual y ejecuta una rutina de interrupcin, para continuar con la tarea anterior posteriormente.
Las interrupciones pueden utilizar las lneas NMI (interrupcin no-enmascarable) e INTR (interrupt request).
La interrupcin se atiende a travs de un vector de interrupcin. 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 interrupcin de INTR, dos banderas de interrupcin (IF y TF), adems de una instruccin de retorno de interrupcin (IRET).
Es comn utilizar algunas funciones especializadas del BIOS y del DOS llamndolas como interrupciones, esto evita el tener que escribir una gran cantidad de cdigo, facilitando el uso de los recursos de la computadora personal.
INT 10H. Interrupcin 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 tamao de la memoria instalada en el sistema. INT 13H. Controla los discos flexibles y rgidos de la computadora.
INT 14H. Controla los puertos de comunicaciones 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 computadora.
INT 17H. Controla el puerto paralelo de la impresora (LPT). INT 33H. Esta funcin proporciona un control completo de las acciones del mouse. INT 21H. Con esta interrupcin del DOS pueden realizarse una gran cantidad de funciones, incluyendo manejo de dispositivos como teclado, pantalla, puertos, manejo de archivos, hora y fecha del sistema, entre otros. Esta interrupcin utiliza rutinas del BIOS.
Existen normas para escribir un programa en lenguaje ensamblador. La primera se refiere a la estructura del programa, despus cada lnea sigue un formato, finalmente se deben respetar las instrucciones y los modos de direccionamiento; la sintaxis y la ortografa son muy estrictas.
La estructura de los programas en Lenguaje Ensamblador de la familia x86 est basada en el uso de segmentos de: Cdigo, Datos, Pila y Extra. De esta manera la memoria se divide en segmentos de longitud fija, 64K en el modelo original.
Por esta razn, 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.
El segmento de pila puede almacenar datos, contenidos de registros y banderas, es un segmento tipo LIFO. Para acceder a la pila se utilizan las instrucciones PUSH y POP, la posicin superior de la pila est apuntada por SP.
El segmento de Cdigo se declara al principio del programa y se puede definir su tamao o utilizar uno por omisin.
El segmento de Cdigo contiene el cdigo del programa ejecutable.
Palabras Reservadas
Identificadores Instrucciones Directivas
Un comentario empieza con (;) y todos los caracteres a la derecha no generan cdigo de mquina.
Un comentario puede ocupar una lnea completa o aparecer a continuacin de una instruccin o directiva.
Ejemplos de Comentarios
;Toda la lnea es un ejemplo de comentario ADD AX,BX ;Comentario en una instruccin .DATA ;Comentario en una directiva
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 direccin de un elemento de dato y etiqueta, que se refiere a la direccin de una instruccin.
Caracteres de un Identificador
Letras del alfabeto: Dgitos: A-Z 0 al 9
Caracteres especiales:
Se recomienda que los nombres de identificadores sean descriptivos y significativos. Todos los identificadores deben definirse en algn lugar del programa.
Ejemplos de Identificadores
COUNT PAGE45 _DATONUEVO $F100
1.4.4 Instrucciones
1.4.4.- Instrucciones
Son acciones a realizar, identificadas por Nemnicos como MOV y ADD, que el ensamblador traduce a cdigo objeto y que corresponden una a una a instrucciones en Lenguaje de Mquina.
1.4.4.- MOV
Nemnico: MOV destino, fuente Funcin: Destino = fuente Banderas: Ninguna Descripcin: MOV transfiere un byte o una palabra desde el operando fuente hasta el operando destino. Ejemplos: * MOV AX,BX * MOV CL,AL * MOV BX,300 * MOV BH,25
1.4.4.- ADD
Nemnico: ADD destino, fuente Funcin: destino=destino+fuente Banderas: AF,CF,OF,PF,SF,ZF Descripcin: La suma de los dos operandos, los cuales pueden ser bytes o words, remplaza al operando destino.
Ejemplos:
1.4.4.- CLC
Nemnico: CLC (Sin operandos) Funcin: CF = 0 Banderas: CF Descripcin: CLC pone en cero a la bandera de carry (CF) sin afectar otras banderas.
1.4.4 CMP
Nemnico: CMP destino, fuente Funcin: destino fuente Banderas: AF,CF,OF,PF,SF,ZF Descripcin: CMP sustrae la fuente del destino, los cuales pueden ser bytes o words, pero no devuelve el resultado, ni los operandos cambian. Slo se actualizan las banderas y pueden utilizarse con instrucciones subsecuentes de salto condicional.
* 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.
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 nmero mximo de lneas (10-255) para listar en una pgina y el nmero mximo de caracteres (60-132) en una lnea. Formato: PAGE [longitud] [, ancho]
Nombre Nombre
SEGMENT Ends
Nombre
SEGMENT
combinar
combinar
clase
La directiva ENDP indica el fin de un procedimiento. Los procedimientos deben quedar totalmente contenidos dentro de un segmento.
OPERACIN ASSUME
1.5.3 Enlace
1.5.4 Ejecucin
1.5.5 Depuracin
Las sentencias pueden comenzar en cualquier columna, no pueden tener ms de 128 caracteres, no se permiten lneas mltiples ni cdigos de control, y cada lnea debe ser terminada con una combinacin de line-feed y carriage-return. Los comentarios se declaran con ; y terminan al final de la lnea.
El ensamblador tambin crea un encabezado al frente del mdulo .OBJ generado, parte del encabezado tiene informacin acerca de direcciones incompletas.
El mdulo .OBJ an no est en forma ejecutable.
Una de las tareas del enlazador es combinar los programas ensamblados en forma separada en un solo programa ejecutable.
Si un archivo tiene menos de 64K de longitud, se puede convertir de archivo ejecutable en archivo de comandos (extensin .COM). Este archivo se origina en la localidad 100H y tiene la ventaja de que requiere poco espacio en disco y en memoria, adems de que se ejecuta rpidamente.
El Sistema Operativo ofrece soporte a dos tipos de programas ejecutables: .COM y .EXE. Un programa .COM consta de un solo segmento que contiene cdigo, datos y pila.
Cuando se llama un programa desde el disco para su ejecucin, el cargador del sistema operativo realiza las siguientes acciones: Accede al programa .EXE en eldisco. Construye un prefijo de segmento de programa (PSP) de 256 bytes (100H) en un lmite de prrafo en la memoria interna disponible.
Almacena el programa en memoria inmediatamente despus del PSP. Carga la direccin del PSP en los registros DS y ES. Carga la direccin del segmento de cdigo en el CS y establece el IP al desplazamiento de la primera instruccin (generalmente cero) en el segmento de cdigo.
Carga la direccin de la pila en el SS y establece el SP al tamao de la pila. Transfiere el control al programa para ejecucin, iniciando con la primera instruccin del segmento de cdigo.
En esta forma, el cargador del DOS inicializa los registros CS:IP y SS:SP Aunque se debe observar que el cargador almacena la direccin del PSP tanto en el registro DS como en el ES, aunque normalmente se requiere la direccin del segmento de datos en estos registros.
Como consecuencia, los programas tienen que inicializar el DS con la direccin del segmento de datos.
Una de las teoras en computacin dice que el programa que funciona bien desde la primera vez seguramente tiene errores.
El nmero de errores posibles en un programa es proporcional al nmero de lneas e inversamente proporcional a la experiencia del programador.
El dominio de la arquitectura del sistema as como del ensamblador facilitan la escritura de programas sin errores.
El propio ensamblador ayuda a encontrar errores ortogrficos o de sintaxis durante el proceso de ensamble.
El enlazador tambin participa en la localizacin de errores en tiempo de ejecucin.
An con esa ayuda, es posible que en el momento de ejecutar un programa surjan problemas de diseo que lleven a resultados errneos.
Por todo lo anterior se recomienda desarrollar un programa paso a paso evitando pensar 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 correctamente 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 ejecucin del programa, los procesos, entradas y salidas. Definir las variables, incluyendo los tipos y tamaos.
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 lneas es conveniente que alguien ms lo revise.
Si a pesar de todo lo anterior surgen problemas durante la ejecucin, lo cual es altamente probable, se recomienda utilizar el Turbo Debugger, herramienta de depuracin que facilita la prueba de programas as como la correccin de errores al permitir la ejecucin paso a paso de los programas.
Adems de que permite visualizar el estado de los registros del CPU, las banderas, as como el contenido de los segmentos en memoria.
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 caracteres desconocidos.
Tambin es posible utilizar Notepad, sin embargo slo es til para capturar programas de tamao 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 programas en ensamblador, debido a que su entorno de trabajo es el mismo que el del Turbo Assembler, por lo que es muy simple la captura y edicin programas en ensamblador. Este editor puede llamarse desde el entorno del MS-DOS.
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 programacin en lenguaje ensamblador para la familia de los microprocesadores 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 programacin Turbo, Turbo Assembler ya no es mantenido por Borland.
El ensamblado se lleva a cabo invocando al TASM. Este puede ser llamado, usando una lnea 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 alfabtico /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 lnea fuente con mensaje de error. /zi, /zd, /zn.- Debug info: zi= completa, zd= nmeros lnea, zn= ninguna
El paquete Turbo Assembler incluye el enlazador Turbo Linker, y es interoperable con el de-purador Turbo Debugger.
Para la compatibilidad con el ensamblador Microsoft Macro Assembler (MASM) de Microsoft, TASM tambin ensambla los archivos de cdigo fuente del MASM por medio de su modo MASM.
Opciones: /x.- sin mapa /m.- mapa incluyendo nombres pblicos /s.- mapa ms mapa detallado de segmentos /l.- mapa ms nmeros de lnea fuente /i.- inicializa todos los segmentos /L.- especifica rutas de bsqueda de libreras /v.- informacin simblica de debug completa
Turbo Debugger es un conjunto de herramientas diseadas para ayudar a depurar programas desarrollados con la lnea de compiladores 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 ejecucin del programa y visualizar diferentes aspectos de la ejecucin del programa.
Al monitorear las salidas del programa, cdigo fuente, estructuras de datos y valores del programa, es posible localizar an los errores ms difciles.
Dentro de las caractersticas de Turbo Debugger se encuentran las siguientes: Evaluacin completa de expresiones en ensamblador, C, C++ y Pascal.
Control total de la ejecucin del programa, incluyendo animaciones. Acceso de bajo nivel a los registros del CPU y la memoria del sistema.
Facilidades para el manejo de ejecucin paso a paso de los programas, incluyendo puntos de ruptura (breakpoints).
Soporte total de programacin orientada a objetos.
TD archivo_executable
donde: archivo_ejecutable- nombre del archivo enlazado