miércoles, 22 de octubre de 2008

Ensamblador (Entrega 6)

Operaciones con Cadenas de Caracteres

Las cadenas de caracteres (strings, en inglés) permiten trabajar en forma simultánea con bloques de bytes almacenados en la memoria. En los lenguajes de bajo nivel (ensambladores) existe una limitación impuesta por el hardware que permite un máximo de 64 KBytes la longitud de una cadena. Este límite puede ser superado por medio de la implementación de procedimientos que permitan manejar bloques mayores. Los ensambladores simbólicos, tales como el Massm y los lenguajes de alto nivel, como Basic, C, Pascal y otros, proveen mecanismos estándar para trabajar con bloques grandes de manera que pueden, en ocasiones, superar el millón de bytes.

Tal como ocurre con las operaciones aritméticas básicas y las operaciones lógicas, las operaciones con cadenas de caracteres están sustentadas en operaciones denominadas “primitivas” que forman parte del conjunto de instrucciones del microprocesador. Estas instrucciones primitivas procesan los componentes del bloque o cadena de caracteres tomando independientemente un carácter por vez. Como puede observar en la Fig. 1, las instrucciones primitivas permiten mover, comparar, buscar, cargar y almacenar cadenas de caracteres.


Fig. 1 operaciones con cadenas de bytes o palabras.

Ejemplo práctico

El siguiente ejemplo servirá para ilustrar la forma en la que trabajan las instrucciones primitivas con respecto a las cadenas.

Código del Programa en Ensamblador “cadena”

NCADENA.COM
A
DB 'CADENA'
PUSH AX
PUSH BX
PUSH CX
PUSH DX
MOV AH,40
MOV BX,1
MOV CX,6
LEA DX,[100]
INT 21H
POP DX
POP CX
POP BX
POP AX
INT 20

RCX
2A
W
Q



Práctica de laboratorio

Para realizar esta práctica, el lector deberá contar con los siguientes elementos:

- Una computadora personal con DOS.
- El programa DEBUG.EXE de DOS.
- Un programa editor de textos ASCII como EDIT.

Nota: El lector puede utilizar un programa ensamblador como Turbo Assembler de Borland o el Asembler de Microsoft en lugar de el programa DEBUG.EXE. Sin embargo, si sigue las indicaciones expuestas en el libro, podrá emplear DEBUG.EXE para producir un programa sin mayores dificultades.

1) Ubíquese en el directorio C:\DOS o, si posee Windows 95 o superior, en el directorio C:\WINDOWS\COMMAND. Cree el archivo CADENA.TXT utilizando para ello, el programa EDIT (o equivalente).

2) Una vez creado el archivo, ejecute el siguiente comando:

3) Si realizó los pasos 1 y 2 en forma correcta, habrá creado el programa CADENA.COM. Verifique si este programa efectivamente existe mediante el comando DIR de DOS. Si no logró crear este archivo, relea los ejemplos previos y repita la operación. De otra forma, pruebe el programa creado a escribir por teclado CADENA . El programa deberá mostrar una el bloque de texto CADENA por pantalla.

Análisis

1) El uso de las instrucciones push y pos sirven para preservar los contenidos de los registros. En próximas unidades daremos una explicación completa de su uso.
Fig. 2 Las instrucciones PUSH y POP.
Nota: Observe que las operaciones ocurren en forma inversa, es decir, el último registro empujado (PUSH) es el primero retirado (POP).

2) El comando db (definir byte) permite almacenar consecutivamente el bloque de caracteres entre comillas simples (‘CADENA’). La forma en que se almacenan los bytes consecutivos es por medio de los códigos ascii correspondientes tal como lo muestra la siguiente tabla:
3) La función 40 (AH=40) de la interrupción 21 permite realizar operaciones de entrada salida. Cuando el registro BX=1, la función permite poner por pantalla la cantidad de caracteres indicada por CX (en nuestro caso CX=6) que se encuentran almacenados a partir de la dirección que indica DX.

MOV AH,40
MOV BX,1
MOV CX,6
LEA DX,[100]
INT 21H


4) Debido a que la primera instrucción de nuestro programa es DB ‘CADENA’ y como ya sabemos que el código del programa comienza en la dirección 100, entonces, sabemos que el conjunto de bytes ‘CADENA’ comienzan en la dirección 100. La instrucción LEA, permite cargar la dirección real de la cadena (LEA en inglés quiere decir Load Effective Adreess que en castellano significa cargar la dirección efectiva o real).

¡Que tengan un gran día!

Sergio Otaño

0 comentarios: