domingo, 1 de junio de 2008

Descripcion Del Programa

La descripción del programa es como sigue:

1.- Las declaraciones SEGMENT y ENDS definen los segmentos a usar.

2.- La variable SALUDO en el segmento DATA, define la cadena a ser desplegada. El signo de dólares al final de la cadena (denominado centinela) es requerido por la función de visualización de la cadena de MS-DOS. La cadena incluye los códigos para carriage-return y line-feed.

3.- La etiqueta START en el segmento de código marca el inicio de las instrucciones del programa.

4.- La declaración DW en el segmento de pila define el espacio para ser usado por el stack del programa.

5.- La declaración ASSUME indica que registros de segmento se asociarán con las etiquetas declaradas en las definiciones de segmentos.

6.- Las primeras dos instrucciones cargan la dirección del segmento de datos en el registro DS. Estas instrucciones no son necesarias para los segmentos de código y stack puesto que la dirección del segmento de código siempre es cargado en el registro CS y la dirección de la declaración del stack segment es automáticamente cargada en el registro SS.

7.- Las últimas dos instrucciones del segmento CODE usa la función 4CH de MS-DOS para regresar el control al sistema operativo. Existen muchas otras formas de hacer esto, pero ésta es la más recomendada.

8.- La directiva END indica el final del código fuente y especifica a START como punto de arranque.

Estructura De Un Programa En Lenguaje Ensamblador (2)

Los ensambladores de MicroSoft y de Borland proporcionan algunas formas abreviadas para definir segmentos. Para usar estas abreviaturas, inicialice el modelo de memoria antes de definir algún segmento. El formato general (incluyendo el punto inicial) es:

.MODEL modelo de memoria

El modelo de memoria puede ser TINY, SMALL, MEDIUM, COMPACT o LARGE. Los requisitos para cada modelo son:



Puede utilizar cualquiera de estos modelos para un programa autónomo (esto es, un programa que no este enlazado con algún otro). El modelo TINY esta destinado para uso exclusivo de programas .COM, los cuales tienen sus datos, código y pila en un segmento. El modelo SMALL exige que el código quepa en un segmento de 64K y los datos en otro segmento de 64K. La directiva .MODELL genera automáticamente el enunciado ASSUME necesario.

Los formatos generales (incluyendo el punto inicial) para las directivas que define los segmentos de la pila, de datos y de código son:

.STACK [tamaño]
.DATA
.CODE [nombre]

Cada una de estas directivas hace que el ensamblador genere el enunciado SEGMENT necesario y su correspondiente ENDS. Los nombres por omisión de los segmentos (que usted no tiene que definir) son STACK, DATA y TEXT (para el segmento de código).

La sig figura proporciona un ejemplo haciendo uso de las directivas simplificadas de segmento.
page 60,132
TITLE P04ASM2 (EXE) Operaciones de mover y sumar
;-------------------------------------------------------------------------
.MODEL SMALL
.STACK 64 ;Se define la pila
.DATA ;Se definen los datos

FLDA DW 250
FLDB DW 125
FLDC DW ?
;-------------------------------------------------------------------------

.CODE ;Se define el segmento de código
BEGIN PROC FAR
MOV AX, @data ;Se asigna la dirección de DATASG (Prog. anterior)

MOV AX, FLDA ;Mover 0250 a AX
ADD AX, FLDB ;Sumar 0125 a AX
MOV FLDC, AX ;Almacenar suma en FLDC

MOV AX, 4C00H ;Salida a DOS
INT 21H
BEGIN ENDP ;Fin de procedimiento
END BEGIN ;Fin de programa

Estructura De Un Programa En Lenguaje Ensamblador

COMENTARIOS EN LENGUAJE ENSAMBLADOR

El uso de comentarios a lo largo de un programa puede mejorar su claridad, en especial en lenguaje ensamblador, donde el propósito de un conjunto de instrucciones con frecuencia no es claro. Un comentario empieza con punto y coma (;) y, en donde quiera que lo codifique, el ensamblador supone que todos los caracteres a la derecha de esa línea son comentarios. Un comentario puede contener cualquier carácter imprimible, incluyendo el espacio en blanco.
Un comentario puede aparecer solo en una línea o a continuación de una instrucción en la misma línea, como lo muestran los dos ejemplos siguientes:

1. ; Toda esta línea es un comentario.
2. ADD AX, BX ; Comentario en la misma línea que la instrucción.

Ya que un comentario aparece solo en un listado de un programa fuente en ensamblador y no genera código de maquina, puede incluir cualquier cantidad de comentarios sin afectar el tamaño o la ejecución del programa ensamblado.
Otra manera de proporcionar comentarios es por medio de la directiva COMMENT.

PALABRAS RESERVADAS

Ciertas palabras en lenguaje ensamblador están reservadas para sus propósitos propios, y son usadas solo bajo condiciones especiales. Por categorías, las palabras reservadas incluyen:

Instrucciones, como MOV y ADD, que son operaciones que la computadora puede ejecutar.
Directivas como END o SEGMENT, que se emplean para proporcionar comandos al ensamblador.
Operadores, como FAR y SIZE, que se utilizan en expresiones.
Símbolos predefinidos, como @Data y @Model, que regresan información a su programa.

El uso de una palabra reservada para un propósito equivocado provoca que el ensamblador genere un mensaje de error.
Ver palabras reservadas.

IDENTIFICADORES

Un identificador es un nombre que se aplica a elementos en el programa. Los dos tipos de identificadores son: nombre, que se refiere a la dirección de un elemento de dato. y etiqueta, que se refiere a la dirección de una instrucción. Las mismas reglas se aplican tanto para los nombres como para las etiquetas. Un identificador puede usar los siguientes caracteres:

1.- Letras del alfabeto: Desde la A hasta la Z
2.- Dígitos: Desde el 0 al 9 (no puede ser el primer carácter)
3.- Caracteres especiales Signo de interrogación ( ? )
Subrayado ( _ )
Signo de pesos ( $ )
Arroba ( @ )
Punto ( . ) (no puede ser el primer carácter)

El primer carácter de un identificador debe ser una letra o un carácter especial, excepto el punto. Ya que el ensamblador utiliza algunos símbolos especiales en palabras que inician con el símbolo @, debe evitar usarlo en sus definiciones.

El ensamblador trata las letras mayúsculas y minúsculas como iguales. La longitud máxima de un identificador es de 31 caracteres (247 desde el MASM 6.0). Ejemplos de nombres validos son COUNT, PAGE25 y $E10. Se recomienda que los nombres sean descriptivos y con significado. Los nombres de registros, como AX, DI y AL, están reservados para hacer referencia a esos mismos registros. En consecuencia, en una instrucción tal como:

ADD AX, BX

el ensamblador sabe de forma automática que AX y BX se refieren a los registros. Sin embargo, en una instrucción como:

MOV REGSAVE, AX

el ensamblador puede reconocer el nombre REGSAVE solo si se define en algún lugar del programa.

INSTRUCCIONES.

Un programa en lenguaje ensamblador consiste en un conjunto de enunciados. Los dos tipos de enunciados son:

1. Instrucciones, tal como MOV y ADD, que el ensamblador traduce a código objeto.

2. Directivas, que indican al ensamblador que realiza una acción especifica, como definir un elemento de dato.

A continuación esta el formato general de un enunciado, en donde los corchetes indican una entrada opcional:


[identificador] operación [operando(s)] [;comentarios]


Un identificador (si existe), una operación y un operando (si existe) están separados por al menos un espacio en blanco o un carácter tabulador. Existe un máximo de 132 caracteres en una línea (512 desde el MASM 6.0), aunque la mayoría de los programadores prefiere permanecer en los 80 caracteres ya que es el numero máximo que cabe en la pantalla. A continuación se presentan dos ejemplos de enunciados:

IDENTIFICADOR OPERACION OPERANDO COMENTARIO
Directiva: COUNT DB 1 ;Nom, Op, Operando
Instrucción: MOV AX, 0 ;Operación, 2 Operand

Identificador, operación y operando pueden empezar en cualquier columna. Sin embargo, si de manera consistente se inicia en la misma columna para estas tres entradas se hace un programa mas legible.

IDENTIFICADOR

Como ya se explico, el termino nombre se aplica al nombre de un elemento o directiva definida, mientras que el termino etiqueta se aplica al nombre de una instrucción.

OPERACION

La operación, que debe ser codificada, es con mayor frecuencia usada para la definición de áreas de datos y codificación de instrucciones. Para un elemento de datos, una operación como DB o DW define un campo, área de trabajo o constante.

OPERANDO

El operando (si existe) proporciona información para la operación que actúa sobre el. Para un elemento de datos, el operando identifica su valor inicial. Por ejemplo, en la definición siguiente de un elemento de datos llamado COUNTER, la operación DB significa "definir byte", y el operando inicializa su contenido con un valor cero:



Para una instrucción, un operando indica en donde realizar la acción. Un operando de una instrucción puede tener una, dos o tal vez ninguna entrada. Aquí están tres ejemplos:



DIRECTIVAS PARA LISTAR: PAGE Y TITLE

La directiva PAGE y TITLE ayudan a controlar el formato de un listado de un programa en ensamblador. Este es su único fin, y no tienen efecto sobre la ejecución subsecuente del programa.

PAGE. Al inicio de un programa, la directiva PAGE designa el numero máximo de líneas para listar en una pagina y el numero máximo de caracteres en una línea. Su formato general es:

PAGE [longitud][, ancho]


El ejemplo siguiente proporciona 60 líneas por pagina y 132 caracteres por línea:

PAGE 60, 132

El numero de líneas por pagina puede variar desde 10 hasta 255, mientras que el numero de caracteres por línea desde 60 hasta 132. La omisión de PAGE causa que el ensamblador tome PAGE 50, 80.

TITLE. Se puede emplear la directiva TITLE para hacer que un titulo para un programa se imprima en la línea 2 de cada pagina en el listado del programa. Puede codificar TITLE de una vez, al inicio del programa. Su formato general es:

TITLE Texto.

Para el operando texto, una técnica recomendada es utilizar el nombre del programa como se registra en el disco. Por ejemplo:

TITLE Prog1 Mi primer programa en ensamblador
DIRECTIVA SEGMENT

Un programa ensamblado en formato .EXE consiste en uno o mas segmentos. Un segmento de pila define el almacén de la pila, un segmento de datos define los elementos de datos y un segmento de código proporciona un código ejecutable. Las directivas para definir un segmento, SEGMENT y ENDS tienen el formato siguiente:

El enunciado SEGMENT define el inicio de un segmento. El nombre del segmento debe estar presente, ser único y cumplir las convenciones para nombres del lenguaje. EL enunciado ENDS indica el final del segmento y contiene el mismo nombre del enunciado SEGMENT. El tamaño máximo de un segmento es de 64K. El operando de un enunciado SEGMENT puede tener tres tipos de opciones: alineación, combinar y clase, codificadas en este formato:

nombre SEGMENT alineación combinar ' clase '

TIPO ALINEACION. La entrada alineación indica el limite en el que inicia el segmento. Para el requerimiento típico, PARA, alinea el segmento con el limite de un párrafo, de manera que la dirección inicial es divisible entre 16, o 10H. En ausencia de un operando hace que el ensamblador por omisión tome PARA.

TIPO COMBINAR. La entrada combinar indica si se combina el segmento con otros segmentos cuando son enlazados después de ensamblar. Los tipos de combinar son STACK, COMMON, PUBLIC y la expresión AT. Por ejemplo, el segmento de la pila por lo común es definido como:

nombre SEGMENT PARA STACK

Puede utilizar PUBLIC y COMMON en donde tenga el propósito de combinar de forma separada programas ensamblados cuando los enlaza. En otros casos, donde un programa no es combinado con otros, puede omitir la opción o codificar NONE.

TIPO CLASE. La entrada clase, encerrada entre apóstrofos, es utilizada para agrupar segmentos cuando se enlazan. Se utiliza la clase 'code' para el segmento de códigos, 'data' por segmento de datos y 'stack' para el segmento de la pila. El ejemplo siguiente define un segmento de pila con tipos alineación, combinar y clase:

nombre SEGMENT PARA STACK 'Stack'

DIRECTIVA ASSUME.

Un programa utiliza el registro SS para direccionar la pila, al registro DS para direccionar el segmento de datos y el registro CS para direccionar el segmento de código. Para este fin, usted tiene que indicar al ensamblador el propósito de cada segmento en el programa. La directiva para este propósito es ASSEME, codificada en el segmento de código como sigue:

OPERACION OPERANDO
ASSUME SS:nompila, DS:nomsegdatos, CS: nomsegcodigo,. . .

Los operandos pueden aparecer en cualquier orden. Al igual que otras directivas, ASSUME es solo un mensaje que ayuda al ensamblador a convertir código simbólico a código maquina; aun puede tener que codificar instrucciones que físicamente cargan direcciones en registros de segmentos en el momento de la ejecución.

1 PAGE 60,132
2 TITLE P04ASM1 ESTRUCTURA DE UN PROGRAMA .EXE
3;-------------------------------------------------------------------------------
4 STACKSG SEGMENT PARA STACK 'Stack'
5 ...
6 STACKSG ENDS
7;-------------------------------------------------------------------------------
8 DATASG SEGMENT PARA 'Data'
9 ...
10 DATASG ENDS
11;-------------------------------------------------------------------------------
12 CODESG SEGMENT PARA 'Code'
13 BEGIN PROC FAR
14 ASSUME SS:STACKSG, DS:DATASG,CS:CODESG
15 MOV AX, DATASG ;Obtiene la dirección del segmento de datos
16 MOV DS, AX ;Almacena dirección en DS
17 ...
18 MOV AX, 4C00H ;Peticion
19 INT 21H ;Salida al DOS
20 BEGIN ENDP
21 CODESG ENDS
22 END BEGIN

Descarga ek TASM y El Tlink

Descarga el TASM del siguiente vinculo:

http://www.4shared.com/file/49752182/18d13f0c/tasm20.html

Descarga el TLINK del siguiente vinculo:

http://www.4shared.com/file/49752204/3b2dae68/tlink301.html

Hola mundo En Lenguaje Ensamblador

; HOLA.ASM
; Programa clasico de ejemplo. Despliega una leyenda en pantalla.
STACK SEGMENT STACK ; Segmento de pila
DW 64 DUP (?) ; Define espacio en la pila
STACK ENDS
DATA SEGMENT ; Segmento de datos
SALUDO DB "Hola mundo!!",13,10,"$" ; Cadena
DATA ENDS
CODE SEGMENT ; Segmento de Codigo
ASSUME CS:CODE, DS:DATA, SS:STACK
INICIO: ; Punto de entrada al programa
MOV AX,DATA ; Pone direccion en AX
MOV DS,AX ; Pone la direccion en los registros
MOV DX,OFFSET SALUDO ; Obtiene direccion del mensaje
MOV AH,09H ; Funcion: Visualizar cadena
INT 21H ; Servicio: Funciones alto nivel DOS
MOV AH,4CH ; Funcion: Terminar
INT 21H
CODE ENDS
END INICIO ; Marca fin y define INICIO

Lenguaje Ensamblador

El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informáticos, y constituye la representación más directa del código máquina específico para cada arquitectura de computadoras legible por un programador.

Fue usado ampliamente en el pasado para el desarrollo de software, pero actualmente sólo se utiliza en contadas ocasiones, especialmente cuando se requiere la manipulación directa del hardware o se pretenden rendimientos inusuales de los equipos.

CARACTERISTICAS

Programar en lenguaje ensamblador es difícil de aprender, entender, leer, escribir, depurar y mantener, por eso surgió la necesidad de los lenguajes compilados.
A pesar de perder rendimiento en un proceso de compilación, en la actualidad la mayoría de las computadoras son suficientemente rápidas.
El lenguaje ensamblador no es portable.
Programar en lenguaje ensamblador lleva mucho tiempo.
Los programas hechos en lenguaje ensamblador son generalmente más rápidos. Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas de 5 a 10 veces más rápidos que con lenguajes de alto nivel.
Los programas hechos en lenguaje ensamblador generalmente ocupan menos espacio. Un buen programa en lenguaje ensamblador puede ocupar casi la mitad de espacio que su contraparte en lenguaje de alto nivel.
Con el lenguaje ensamblador se pueden crear segmentos de código imposibles de formar en un lenguaje de alto nivel.

ENSAMBLADORES

Un ensamblador crea código objeto traduciendo instrucciones mnemónicas a códigos operativos e interpretando los nombres simbólicos para direcciones de memoria y otras entidades. El uso de referencias simbólicas es una característica básica de los ensambladores, evitando tediosos cálculos y direccionamiento manual después de cada modificación del programa. La mayoría de los ensambladores también incluyen facilidades para crear macros, a fin de generar series de instrucciones cortas que se ejecutan en tiempo real, en lugar de utilizar subrutinas.1

Los ensambladores son por lo general más fáciles de programar que los compiladores de lenguajes de alto nivel, y han estado disponibles desde la década de 1950. Los ensambladores modernos, especialmente para arquitecturas basadas en RISC, como por ejemplo MIPS, SPARC y PA-RISC optimizan las instrucciones para explotar al máximo la eficiencia de segmentación2 del CPU.

Los ensambladores de alto nivel ofrecen posibilidades de abstracción que incluyen:

1.- Control avanzado de estructuras.
2.- Procedimientos de alto nivel, declaración de funciones.
3.- Tipos de datos que incluyen estructuras, registros, uniones, clases y conjuntos.
4.- Sofisticado procesamiento de macros.

LENGUAJE

Un programa escrito en lenguaje ensamblador consiste en una serie de instrucciones que corresponden al flujo de órdenes ejecutables que pueden ser cargadas en la memoria de una computadora. Por ejemplo, un procesador x86 puede ejecutar la siguiente instrucción binaria como se expresa en código de máquina:
Binario: 10110000 01100001 (Hexadecimal: 0xb061)

La representación equivalente en lenguaje ensamblador es más fácil de recordar:
MOV al, 061h

Esta instrucción significa:
Mueva el valor hexadecimal 61 (97 decimal) al registro "al".

El mnemónico "mov" es un código de operación u "opcode", elegido por los diseñadores de la colección de instrucciones para abreviar "move" (mover). El opcode es seguido por una lista de argumentos o parámetros, completando una instrucción de ensamblador típica.

La transformación del lenguaje ensamblador en código máquina la realiza un programa ensamblador, y la traducción inversa la puede efectuar un desensamblador. A diferencia de los lenguajes de alto nivel, aquí hay usualmente una correspondencia 1 a 1 entre las instrucciones simples del ensamblador y el lenguaje de máquina. Sin embargo, en algunos casos, un ensamblador puede proveer "pseudo instrucciones" que se expanden en un código de máquina más extenso a fin de proveer la funcionalidad necesaria. Por ejemplo, para un código máquina condicional como "si X mayor o igual que" , un ensamblador puede utilizar una pseudoinstrucción al grupo "haga si menor que" , y "si = 0" sobre el resultado de la condición anterior. Los ensambladores más completos también proveen un rico lenguaje de macros que se utiliza para generar código más complejo y secuencias de datos.

Cada arquitectura de computadoras tiene su propio lenguaje de máquina, y en consecuencia su propio lenguaje ensamblador. Los ordenadores difieren en el tipo y número de operaciones que soportan; también pueden tener diferente cantidad de registros, y distinta representación de los tipos de datos en memoria. Aunque la mayoría de las computadoras son capaces de cumplir esencialmente las mismas funciones, la forma en que lo hacen difiere y los respectivos lenguajes ensambladores reflejan tal diferencia.

Pueden existir múltiples conjuntos de mnemónicos o sintáxis de lenguaje ensamblador para un mismo conjunto de instrucciones, instanciados típicamente en diferentes programas ensamblador. En estos casos, la alternativa más popular es la provista por los fabricantes, y usada en los manuales del programa.

Sistema Operativo

Un sistema operativo es un conjunto de programas de computadora destinado a permitir una administración eficaz de sus recursos.

Comienza a trabajar cuando se enciende el computador, y gestiona el hardware de la máquina, permitiendo también la interacción con el usuario.

Un sistema operativo se puede encontrar normalmente en la mayoría de los aparatos electrónicos que utilicen microprocesadores para funcionar, ya que gracias a éstos podemos entender la máquina y que ésta cumpla con sus funciones (teléfonos móviles, reproductores de DVD, autoradios, computadoras, etc.).

Ejemplos de sistemas operativos son:

Windows



Linux



Mac Os