Programa 8086 para transferir un bloque de bytes usando una instrucción de string

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:

  1. En este ejemplo, el valor del contador almacenado en el registro CX es 4.
  2. 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:

  1. establezca el valor del desplazamiento SI igual a 500.
  2. establecer el valor de compensación DI igual a 600.
  3. cargue el valor 0000 en el registro AX.
  4. cargue los datos del registro AX en DS (segmento de datos).
  5. cargue los datos del registro AX en ES (segmento extra).
  6. cargue los datos del desplazamiento SI en el registro CL y cargue el valor 00 en el registro CH.
  7. incrementar el valor de SI en uno.
  8. borre la bandera direccional para que los datos se lean desde la memoria inferior a la ubicación de memoria superior.
  9. verifique el valor de CX, si no es igual a cero, repita el paso 10; de lo contrario, vaya al paso 11.
  10. 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.
  11. 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:

  1. MOV SI, 500: carga el valor 500 en el desplazamiento SI.
  2. MOV DI, 600: carga el valor 600 en el offset DI.
  3. MOV AX, 0000: carga el valor 0000 en el registro AX.
  4. MOV DS, AX: carga el valor del registro AX en DS (segmento de datos).
  5. MOV ES, AX: carga el valor del registro AX en ES (segmento extra).
  6. MOV CL, [SI]: carga los datos del desplazamiento SI en el registro CL.
  7. MOV CH, 00: carga el valor 00 en el registro CH.
  8. INC SI: incrementa el valor de SI en uno.
  9. CLD: borra la bandera direccional, es decir, DF=0.
  10. REP: repita hasta que el valor de CX no sea igual a cero y disminuya el valor de CX en uno en cada paso.
  11. MOVSB: transfiere los datos desde la ubicación de la memoria de origen a la ubicación de la memoria de destino.
  12. 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *