Pregunta de la asamblea: ¿Qué significan movsb y cld?
La instrucción REP (REPeat) significa "repetir" y se denomina "instrucción de prefijo de repetición". Dado que las cadenas se transmiten, sería problemático si el programador las escribiera palabra por palabra (byte por byte). Por lo tanto, es necesario utilizar un registro para controlar la longitud de la cadena y utilizar una pequeña cantidad de código para lograr el propósito de la transmisión única. Este registro es CX Antes de ejecutar cada instrucción, se juzgará si el valor de CX es 0 (cuando es 0, la repetición finaliza, cuando no es 0, el valor de CX se reduce en 1) para establecer el. número de ejecuciones repetidas. Por lo tanto, después de configurar el valor CX, se puede utilizar REP MOVSB .
CLD (indicador CLear Direction) borra el indicador de dirección, incluso si el valor de DF es 0, y cambia la dirección de forma incremental para ajustar la dirección de ejecución del puntero actual al realizar operaciones de cadena. El resultado de esta instrucción es opuesto a STD (indicador de dirección SeT), es decir, el valor de DF se establece en 1.
; El ejemplo transfiere 100 bytes de datos en el segmento de datos actual comenzando en el desplazamiento 1000H a la celda que comienza en el desplazamiento 2000H
; Incrementa el; dirección del puntero
push DS ; El segmento de datos actual, por lo tanto, insertado en el almacenamiento de la pila
pop ES ; Make ES=DS
mov SI, 1000H; valor del puntero de la cadena de origen
mov DI, 2000H; valor inicial del puntero de la cadena de destino
mov CX, 100; establecer el tiempo del ciclo
Siguiente paso: p>
lodsb ; Obtener un byte
stosb ; Guardar un byte
bucle Siguiente ; Realizar un bucle CX veces
; lo anterior:
cld ; incremento de dirección
....
mov CX, 100 ; bucle CX veces
Siguiente paso:
movsb; transfiere un byte de datos a la vez
bucle Siguiente
O escritura más simple:
cld
;......
mov CX,100; repetir el comando movsb CX veces
rep movsb