Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Cadenas y Arreglos
Cadenas y Arreglos
Instrucción Descripción
MOVSB, MOVSW, Mover datos de cadena: copia los datos de la memoria direccionada por ESI
MOVSD a la memoria direccionada por EDI.
CMPSB, CMPSW, CMPSD Comparar cadenas: compara el contenido de dos ubicaciones de memoria
direccionadas por ESI y EDI.
SCASB, SCASW, SCASD Explorar cadenas: compara el acumulador (AL, AX, o EAX) con el contenido
de la memoria direccionada por EDI.
STOSB, STOSW, STOSD Almacenar datos de cadena: almacena el contenido del acumulador en la
memoria direccionada por EDI.
LODSB, LODSW, LODSD Cargar acumulador desde cadena: carga la memoria direcciona por ESI al
acumulador.
Cada instrucción en la tabla anterior utiliza en forma explícita a ESI, EDI o ambos registros para
direccionar la memoria. Las referencias al acumulado implican el uso de AL, AC o EAX, dependiendo del
tamaño de los datos de la instrucción.
Uso de prefijo de repetición Por sí sola, una instrucción de primitiva cadena solo procesa un solo
valor de memoria o un par de valores. Si agregamos un prefijo de repetición, la instrucción se repite
usando a ECX como contador. El prefijo de repetición nos permite procesar un arreglo completo
mediante una sola instrucción.
Las instrucciones CMPSB, CMPSW y CMPSD comparan un operando de memoria al que apunta ESI, con
un operando de memoria al que apunta EDI. La bandera de direccionamiento determina el incremento o
decremento de ESI y EDI.
Las instrucciones SCASB, SCASW y SCASD comparan un valor en AL/AX/EAX con un byte, palabra o doble
palabra, respectivamente, la cual esta direccionada por EDI. Las instrucciones son útiles cuando se busca
un valor individual en una cadena o arreglo. Si se combinan con el prefijo REPE (REPZ), la cadena o
arreglo se explora mientras que ECX > 0, y el valor en AL/AX/EAX coincida con un valor en memoria, o
cuando ECX = 0.
Las instrucciones LODSB, LODSW y LODSD cargan un byte o palabra de la memoria en ESI, hacia
AL/AX/EAX, respectivamente. ESI se incrementa o decrementa según el estado de la bandera Dirección.
El prefijo REP se utiliza raras veces con LODS, ya que cada nuevo valor que se carga en el acumulador
sobrescribe su contenido anterior.
Este procedimiento compara las cadenas en orden hacia delante, empezando en el primer byte. La
comparación es sensible al uso de mayúsculas y minúsculas, ya que los códigos ASCII son distintos para
las letras mayúsculas y minúsculas. El procedimiento no devuelve valor, pero las banderas Acarreo y
Cero pueden interpretarse como se muestra a continuación usando los argumentos cadena 1 y
cadena2.
Procedimiento Str_lenght
El procedimiento Str_lenght devuelve la longitud de una cadena en el registro EAX. Al llamarlo, hay que
pasarle el desplazamiento de la cadena. Por ejemplo:
Procedimiento Str_copy
El procedimiento Str_copy copia una cadena con terminación nula, de una ubicación de origen a una
ubicación de destino. Antes de llamar a este procedimiento, debemos asegurarnos de que el operando
de destino sea lo bastante grande como para poder almacenar la cadena que se va a copiar. La sintaxis
para llamar a Str_copy es:
Procedimiento Str_trim
La lógica para este procedimiento es interesante, ya que hay revisar una variedad de casos posibles.
Podemos usar el procedimiento Str_trim para eliminar todos los espacios del final de una cadena. La
manera más sencilla de truncar caracteres de una cadena es insertar un byte nulo justo antes de los
caracteres que se desean retener. Cualquier carácter después del byte nulo se vuelve insignificante.
Procedimiento Str_ucase
El procedimiento Str_ucase convierte todos los caracteres de una cadena a mayúscula. No devuelve un
valor. Al llamar este procedimiento, hay que pasarle el desplazamiento de una cadena:
Arreglos bidimensionales
Ordenamiento de filas y columnas
1 2 30 4 5
Arreglo lógico: 0 0 0 0
6 7 80 9 A
0 0 0 0
B C D E F0
1 2 3 4 5 6 7 8 9 A0 B0 C0 D0 E F
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 6 B 2 7 C 3 8 D 4 9 E 5 A F
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Si implementa un arreglo bidimensional en lenguaje ensamblador, puede elegir cualquiera de los dos
métodos de ordenamiento. En este capítulo utilizando el orden por las filas. Si escribe subrutinas en
lenguaje ensamblador para un lenguaje de alto nivel, debe seguir l orden especificando en su
documentación.
Operandos base-índice
Un operando base-índice suma los valores de dos registros (llamados base e índice), produciendo una
dirección de desplazamiento
[base + índice]
Los corchetes son necesarios. En modo de 32 bits, cualquier registro de propósito general de 32 bits
puede ser registro de base o índice. En modo de 16 bits, el registro debe ser BX o BP.
1 2 3 4 5 6 7 8 9 A B C D E F
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Ejemplo de base-índice
Operandos base-índice-desplazamiento
desplazamiento[base + índice]
Desplazamiento puede ser ser el nombre de una variable o expresión constante. En modo de 32 bits,
puede utilizarse cualquier registro de propósito general de 32 bits para la base y el índice. En modo de
16 bits, el operando base debe ser BX o BP y el operando índice debe ser SI o DI. Los operandos base-
índice-desplazamiento se adaptan muy bien al procesamiento de arreglos bidimensionales. El
desplazamiento puede ser el nombre de un arreglo, el operando base puede guardar el desplazamiento
de la fila y el operando índice puede guardar el desplazamiento de la columna.
1 2 3 4 5 6 7 8 9 A B C D E F
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Ejemplo de base-índice-desplazamiento