2.1 Ensamblador (y ligador) a utilizar
Aunque todos los ensambladores
realizan básicamente las mismas tareas, podemos clasificarlos de acuerdo a
características.
Ensambladores Cruzados (Cross-Assembler)
Se denominan así los ensambladores
que se utilizan en una computadora que posee un procesador diferente al que
tendrán las computadoras donde va a ejecutarse el programa objeto producido.
Ensambladores Residentes
Son aquellos que permanecen en la
memoria principal de la computadora y cargan, para su ejecución, al programa
objeto producido. Este tipo de ensamblador tiene la ventaja de que se puede
comprobar inmediatamente el programa sin necesidad de transportarlo de un lugar
a otro, como se hacía en cross-assembler, y sin necesidad de programas
simuladores.
Sin embargo, puede presentar problemas
de espacio de memoria, ya que el traductor ocupa espacio que no puede ser
utilizado por el programador. Asimismo, también ocupará memoria el programa
fuente y el programa objeto.
La ventaja de estos ensambladores
es que permiten ejecutar inmediatamente el programa; la desventaja es que deben
mantenerse en la memoria principal tanto el ensamblador como el programa fuente
y el programa objeto.
Macroensambladores
Son ensambladores que permiten el
uso de macroinstrucciones (macros). Debido a su potencia, normalmente son
programas robustos que no permanecen en memoria una vez generado el programa
objeto. Puede variar la complejidad de los mismos, dependiendo de las
posibilidades de definición y manipulación de las macroinstrucciones, pero
normalmente son programas bastantes complejos, por lo que suelen ser
ensambladores residentes.
Microensambladores
Generalmente, los procesadores
utilizados en las computadoras tienen un repertorio fijo de instrucciones, es
decir, que el intérprete de las mismas interpretaba de igual forma un
determinado código de operación.
Ensambladores de una fase.
Estos ensambladores leen una línea
del programa fuente y la traducen directamente para producir una instrucción en
lenguaje máquina o la ejecuta si se trata de una pseudoinstrucción. También va
construyendo la tabla de símbolos a medida que van apareciendo las definiciones
de variables, etiquetas, etc. Debido a su forma de traducción, estos
ensambladores obligan a definir los símbolos antes de ser empleados para que,
cuando aparezca una referencia a un determinado símbolo en una instrucción, se
conozca la dirección de dicho símbolo y se pueda traducir de forma correcta.
Estos ensambladores son sencillos, baratos y ocupan poco espacio, pero tiene el
inconveniente indicado.
Ensambladores de dos fases
Los ensambladores de dos fases se
denominan así debido a que realizan la traducción en dos etapas. En la primera
fase, leen el programa fuente y construyen una tabla de símbolos; de esta
manera, en la segunda fase, vuelven a leer el programa fuente y pueden ir
traduciendo totalmente, puesto que conocen la totalidad de los símbolos
utilizados y las posiciones que se les ha asignado.
2.3 Captura básica de cadenas
2.4 Comparación y prueba
La instrucción CMP pro lo común es
utilizada para comparar dos campos de datos, uno de los cuales están contenidos
en un registro. El formato general para CMP es:| [etiqueta:] | CMP |
{registro/memoria}, {registro/memoria/inmediato} |
Observe que la operación compara el
primer operando con el segundo; por ejemplo, el valor del primer operando es
mayor que, igual o menor que el valor del segundo operando.
La instrucción CMPS compara el
contenido de una localidad de memoria (direccionada por DS:SI). Dependiendo de
la bandera de dirección, CMPS incrementa o disminuye también los registros SI y
DI en 1 para bytes, en 2 para palabras y en 4 para palabras dobles. La
operación establece las banderas AF, CF, OF, PF, SF y ZF.
Cuando se combinan con un prefijo
REP y una longitud en el CX, de manera sucesiva CMPS puede comparar cadenas de
cualquier longitud.
CMPS proporciona una comparación
alfanumérica, esto es, una comparación de acuerdo a con los valores ASCII.
Considere la comparación de dos cadenas que contienen JEAN y JOAN
Algunas derivaciones de CMPS son
las siguientes:
· CMPSB. Compara bytes
· CMPSD. Compara palabras dobles
· CMPSW. Compara palabras
2.5 Saltos
Estas instrucciones permiten saltar
a otras partes del código. Todas cambian el registro IP (contador de programa)
y el registro CS (segmento de código) si es un salto lejano. Un salto es lejano
cuando la dirección a la que se salta no está en el mismo segmento de código.
Existen dos tipos de saltos: los
absolutos; en lo que se especifica la dirección absoluta a la que se salta; y
los relativos; que son saltos hacia delante o hacia atrás desde el valor de IP.
JMP realiza un salto incondicional
a la dirección especificada. La siguiente tabla relaciona los tipos de saltos y
los argumentos que puede tomar esta instrucción.
Saltos condicionales
Estas instrucciones realizan el
salto a la dirección especificada en función de si se cumple o no una
condición. Para evaluar la condición se considera el registro de estado, esto
quiere decir que la condición depende directamente de la instrucción anterior.
Instrucciones en función del tipo de operandos y la condición que se quiere evaluar
Instrucciones en función del tipo de operandos y la condición que se quiere evaluar
2.6 Ciclos condicionales
Las instrucciones de bucle se usan
para realizar estructuras repetitivas, y utilizan el registro CX como contador.
LOOP esta instrucción hace que el programa salte a la dirección
especificada (salto dentro del segmento), mientras que CX sea distinto de 0 y decrementa
CX en 1 cada vez.
LOOP salto
Ejemplo:
MOV CX, 100
COMIENZO: …
…
LOOP COMIENZO; este bucle se repite 100
LOOPNE/LOOPNZ esta instrucción salta a la dirección especificada
mientras que CX sea distinto de 0 y si ZF = 0.
LOOPNE/LOOPNZ salto
Esta instrucción proporciona una
ruptura del bucle adicional.
LOOPE/LOOPZ esta instrucción actúa como la anterior pero la
condición adicional es ZF = 1.
LOOPE/LOOPZ salto
JCXZ esta instrucción realiza un salto si CX = 0.
JCXZ salto
Ninguna de estas instrucciones afecta
al registro de estado.
No hay comentarios:
Publicar un comentario