Ensamblador

Algunos libros que están muy bien son:
- Lenguaje ensamblador y programación para PC IBM y compatibles (Peter Abel).
- 80-86/87 Programación. Ensamblador en entorno MS-DOS (Miguel Angel Rodríguez-Roselló).
- Ensamblador para DOS, Linux y Windows (Francisco Charte Ojeda).
- Los microprocesadores xx86 y la arquitectura del PC (Antonio García Guerra).
Los alumnos de la Universidad Autónoma de Madrid pueden encontrarlos en la biblioteca de la escuela.

Importante:
Los programas están hechos con MS-DOS 6.22 puro, es decir, sin Windows. Si intentamos ejecutar estos programas con Windows XP y similares, no nos va a dejar trabajar tranquilos ya que no nos permite acceder al micro como nosotros deseamos. Lo mejor que se puede tener es MS-DOS en una partición independiente. En esta sección casi todo van a ser ejercicios, así que se supone que ya conocéis la arquitectura interna de vuestro ordenador. Si no es así, haceos con algún libro o manual (en internet hay algunos) donde os expliquen esto.
Yo no lo voy a hacer porque para mi es más importante mostraros cómo hacer los ejercicios a la teoría, la cual podéis encontrar 20 veces mejor en un libro ;)

Lo que si me parece imprescindible que sepáis de teoría para empezar es esto:

Los registros internos del microprocesador

- Registros de datos:
AX = Acumulador. Es el registro principal utilizado en las instrucciones aritméticas.
BX = Utilizado como base. Lo utilizaremos para indicar el desplazamiento u offset.
CX = Se utiliza como contador en los bucles y operaciones iterativas.
DX = Utilizado también para operaciones aritméticas.

Estos registros son de 2 bytes y podemos referirnos a su parte baja y alta:
AX -> AH y AL
BX -> BH y BL
CX -> CH y CL
DX -> DH y DL

- Registros de segmentos:
CS = Registro de segmento de código. Contiene la dirección del segmento de código, lo que son las instrucciones del programa.
DS = Registro de segmento de datos. Contiene la dirección del segmento de datos, es decir, el área de memoria donde se encuentran los datos del programa.
SS = Registro de segmento de pila. Contiene la dirección del segmento de pila.
ES = Registro de segmento extra. El segmento extra es un segmento adicional que se utiliza para superar la limitación de los 64 Kb del segmento de datos y para hacr la transferencia de datos entre segmentos.

- Registros punteros de pila:
SP = Puntero de pila. Contiene la dirección relativa del segmento de pila.
BP = Puntero base. Utilizado para fijar el puntero de la pila y poder acceder a los elementos de esta.

- Registros índices:
SI = Índice fuente (Source Index)
DI = Índice destino (Destination Index)

- Registro puntero de instrucciones:
IP = Puntero de instruccion (Instruction Pointer)

- Registro de banderas:
Se usa para registrar la información de estado y de control de las operaciones del microprocesador.
Hay 9 banderas:
* Banderas de estado: Registran el estado del procesador, normalmente asociado a una comparación o una instrucción aritmética.
CF = Bandera de acarreo. Indica acarreo en las instrucciones aritméticas (Carry Flag)
OF = Bandera de desbordamiento aritmético (Overflow Flag)
ZF = Bandera de resultado cero o comparación igual (Zero Flag)
SF = Bandera de resultado o comparación negativa (Sign Flag)
PF = Bandera de paridad (Parity Flag)
AF = Bandera auxiliar. Indica si hay necesidad de ajuste en las operaciones aritméticas con números BCD (Auxiliar Flag)

* Banderas de control: Registran el funcionamiento del procesador:
DF = Bandera de dirección. Controla la dirección (hacia adelante o hacia atrás) en las operaciones con cadenas de caracteres incrementando o decrementando automáticamente los registros índices (SI y DI) (Direction Flag)
IF = Bandera de interrupciones. Indica si están permitidas o no las interrupciones de los dispositivos externos (Interrupt Flag)
TF = Bandera de traza. Controla la operación modo paso a paso (Trap Flag)

Curso completo:

Hoja 1
Hoja 2
Hoja 3
Hoja 4
Hoja 5
Hoja 6
Hoja 7
Hoja 8
Hoja 9
Hoja 10

Para ensamblar, linkar y ejecutar un programa en DOS puede hacerse de la siguiente manera:
C:\>tasm /zi archivo.asm (la extensión .asm puede omitirse)
C:\>tlink /v archivo.obj (la .obj también)
C:\>archivo

Con esto, ensamblamos, luego linkamos y por último ejecutamos.

Muy importante es saber utilizar el Turbo Debugger. Para utilizarlo simplemente hay que poner:
C:\>td archivo

Lo que sí debéis tener puesto es para que los directorios TASM y TD sean encontrados por defecto.
Una forma sencilla de hacerlo, y que siempre que arranquemos el ordenador lo tengamos así, es editar nuestro archivo 'autoexec.bat' e incluir la línea: path=c:\dos;c:\mouse;c:\tasm;c:\td     (o todos los directorios que sean necesarios) Hay otras formas de hacerlo, como por ejemplo, desde la línea de comandos escribir esto para añadir el directorio TASM:
set path=%path%;c:\tasm

Otra forma de inicializar PATH con los directorios que queramos es esta. En mi caso tengo los siguiente directorios:
set path=c:\dos;c:\mouse;c:\tasm;c:\td Si por alguna razón no podeis hacer esto siempre os queda el consuelo de ir grabando vuestros archivos .asm en el directorio 'tasm' y ejecutarlo desde ahí. Todos estos programas están hechos en un 286 con MS-DOS 5.0 y un Pentium 166Mhz con MS-DOS 6.22.


www.victorsanchez2.com
victorsanchez2 en gmail.com
victorsanchez2 en jabberes.org
http://www.linkedin.com/in/victorsanchez2
victorsanchez2.asc (Huella digital: 4D05 8831 CB70 5F22 D836 73FF BA0A 5C66 BBB9 AC5A)
Tf: 659 35 74 53

Valid XHTML 1.0 Transitional