Problema: escriba un programa en lenguaje ensamblador para transferir un bloque de bytes de una ubicación de memoria a otra ubicación de memoria utilizando instrucciones de string.
Ejemplo: Ejemplo:
- En este ejemplo, el valor del contador almacenado en el registro CX es 4.
- El bloque de datos que se almacena desde la ubicación de memoria que comienza con el desplazamiento 501 a 504 se transfiere a otra ubicación de memoria que comienza con el desplazamiento 600 a 603.
Suposiciones:
- El valor del contador que indica el número de bytes que se transferirán se almacena en el desplazamiento 500.
- Los datos de 8 bits que deben transferirse se almacenan en una ubicación de memoria continua a partir de 501.
- Los datos se transfieren a una ubicación de memoria continua a partir de 600.
- El valor de DS y ES se toma igual a 0000.
- el programa comienza desde el desplazamiento 400.
La instrucción CLD se utiliza para borrar la bandera direccional, es decir, DF=0. Ahora, se incrementará el valor de SI y DI.
SI=SI+1 DI=DI+1
La instrucción REP se usa para repetir el paso hasta que el valor de CX no es igual a cero y el valor de CX se reduce en uno en cada paso, es decir,
CX=CX-1
La instrucción MOVSB se usa para transferir bytes solo desde la ubicación de la memoria de origen (MADS) a la ubicación de la memoria de destino (MAES).
MADS-->MAES where MADS=DS*10+SI MAES=ES*10+DI
Aquí, el valor de SI y DI se actualiza automáticamente.
if DF=0, SI=SI+1 and DI=DI+1
Algoritmo:
- establezca el valor del desplazamiento SI igual a 500.
- establecer el valor de compensación DI igual a 600.
- cargue el valor 0000 en el registro AX.
- cargue los datos del registro AX en DS (segmento de datos).
- cargue los datos del registro AX en ES (segmento extra).
- cargue los datos del desplazamiento SI en el registro CL y cargue el valor 00 en el registro CH.
- incrementar el valor de SI en uno.
- borre la bandera direccional para que los datos se lean desde la memoria inferior a la ubicación de memoria superior.
- verifique el valor de CX, si no es igual a cero, repita el paso 10; de lo contrario, vaya al paso 11.
- transfiera los datos desde la ubicación de la memoria de origen a la ubicación de la memoria de destino y disminuya el valor de CX en uno.
- Deténgase.
Programa:
Dirección | Mnemotécnica | Comentarios |
---|---|---|
0400 | MOV SI, 500 | SI<-500 |
0403 | MOV DI, 600 | DI<-600 |
0406 | HACHA MOV, 0000 | AX<-0000 |
0409 | MOV DS, HACHA | DS<-AX |
040B | MOVIMIENTOS, HACHA | ES<-AX |
040D | CL MOV, [SI] | CL<-[SI] |
0410 | CA MOV, 00 | CH<-00 |
0412 | INC SI | SI<-SI+1 |
0413 | CLD | borra la bandera direccional |
0414 | REPS | repita hasta que CX no sea igual a cero y CX=CX-1 en cada paso |
0415 | MOVSB | transferir los datos desde la ubicación de la memoria de origen a la de destino |
0416 | HLT | final |
Explicación:
- MOV SI, 500: carga el valor 500 en el desplazamiento SI.
- MOV DI, 600: carga el valor 600 en el offset DI.
- MOV AX, 0000: carga el valor 0000 en el registro AX.
- MOV DS, AX: carga el valor del registro AX en DS (segmento de datos).
- MOV ES, AX: carga el valor del registro AX en ES (segmento extra).
- MOV CL, [SI]: carga los datos del desplazamiento SI en el registro CL.
- MOV CH, 00: carga el valor 00 en el registro CH.
- INC SI: incrementa el valor de SI en uno.
- CLD: borra la bandera direccional, es decir, DF=0.
- REP: repita hasta que el valor de CX no sea igual a cero y disminuya el valor de CX en uno en cada paso.
- MOVSB: transfiere los datos desde la ubicación de la memoria de origen a la ubicación de la memoria de destino.
- HL: fin.
Publicación traducida automáticamente
Artículo escrito por priyankagujral y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA