· Las instrucciones de cadena permiten trabajar con bloques de memoria a nivel byte o palabra.
· Las instrucciones de cadena tienen mnemónicos que terminan con la letra "S", y operan sobre los registros que se especificarán en cada caso.
· Ya que pueden actuar sobre bytes o palabras, es necesario indicar este extremo, lo que se conseguirá escribiendo la letra "B“ , "W“ o ”D” tras la "S" del mnemónico.
Bandera de dirección
La bandera de dirección (D) selecciona la operación de incremento automático (D=0) o la de disminución automática (D=1) para los registro DI y SI durante las operaciones de cadena.
La instrucción CLD borra la bandera D(D=0) y la instrucción STD la activa (D=1). Por lo tanto, la instrucción CLD selecciona el modo de incremento automático (D=0) y STD el de disminución automática (D=1).
DI o SI incrementan en 1 si se transfiere un byte, al transferir una palabra en 2 y una doble palabra en 4. El incremento solo afecta a los registros usados por la instrucción de cadena.
Registros DI y SI
· Durante la ejecución de instrucciones de cadena, ocurren accesos a memoria ya se por medio de uno de los dos registros DI y SI.
· La dirección de desplazamiento DI accede a los datos del segmento adicional (ES) para todas las instrucciones de cadena que se utilizan.
La dirección de desplazamiento SI accede por omisión a datos ubicados en el segmento de datos.
Al ejecutar una instrucción de cadena, la asignación de segmento para DI siempre está en el segmento adicional. Esta asignación no puede ser cambiada.
LODS
Desde Hasta
DS: SI à AL o AX
}Carga desde una cadena un elemento a el acumulador AL o AX según la longitud del elemento. Esta instrucción no se usan con prefijos puesto que no tendría sentido ya que cada vez que carga un valor al acumulador borra el anterior.
LODSB
}Pone en el acumulador un byte de la cadena fuente.
Operación:
AL <- DS:SI (un byte)
SI <- SI±1
LODSW
Poner en el acumulador dos bytes de la cadena fuente.
Operación:
AX <- DS:SI (dos bytes)
SI <- SI±2
LODSW
STOS
STOS
}La instrucción STOS (STOre String) almacena el contenido del registro AL, AX o EAX en la dirección de memoria especificada por ES:DI
}
STOSB
ES[DI]<- AL
DI = DI ± 1
STOSW
ES[DI]<- AX
DI = DI ± 2
STOSD
ES[DI]<- EAX
DI = DI ± 4
STOS con un REP
}El prefijo de repetición REP se agrega a cualquier instrucción de transferencia de cadena de datos excepto la instrucción LODS. El prefijo REP ocasiona que CX disminuya 1 cada vez que se ejecuta una instrucción sobre la cadena.