• Domingo 16 de Mayo de 2021, 01:58

Autor Tema:  Rutina de copiado.  (Leído 1651 veces)

123celes

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Rutina de copiado.
« en: Lunes 20 de Octubre de 2008, 15:32 »
0
Hola ¿Que tal?,  yo soy 123celes y soy nuevo en el foro. Hace no mucho empecé a internarme en la programación, sobre todo la de los video juegos. Empecé a estudiar el lenguaje ensamblador y cada vez aprendo un poquito más.

Donde mostraban distintas rutinas en ensamblador para optimizar la programación gráfica, concretamente la que no comprendo es la de Copy64K. La  parte que no comprendo es esta: las líneas que dicen

xor  di,di
xor  si,si
mov  cx,16000
db   66h;rep movsw

¿Que trabajo hacen estas líneas, para que sirven?

PROCEDURE Copy64K  (SegOrg,SegDes:Word);assembler;
Asm
    push ds
    mov  ax,SegOrg
    mov  ds,ax
    mov  ax,SegDes
    mov  es,ax
    xor  di,di
    xor  si,si
    mov  cx,16000
    db   66h;rep movsw
    pop  ds
End;


PD: desde ya muchas gracias por su atención

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Rutina de copiado.
« Respuesta #1 en: Lunes 20 de Octubre de 2008, 15:55 »
0
Si te interesa programar videojuegos este codigo es inutil, es codigo de 16 bits absolutamente obsoleto.

http://pdos.csail.mit.edu/6.828/2004/re ... 86/REP.htm
http://pdos.csail.mit.edu/6.828/2006/re ... 6/MOVS.htm

En tu caso copia de ds:[si] (segOrg) a es:[di] (segDes) 16000 words.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Rutina de copiado.
« Respuesta #2 en: Lunes 20 de Octubre de 2008, 16:01 »
0
Primero aconsejarte una página de referencia:

http://ref.x86asm.net/coder32.html

Acto seguido, vamos a ver ese tremendo ensamblador (¿se nota que me gusta  :P ?)

Código: ASM
  1.  
  2. ; Pone a 0 DI y SI
  3. xor di,di
  4. xor si,si
  5. ; Número de repeticiones que va a realizar el prefijo REP más abajo
  6. mov cx,16000
  7. ; Precision-size override prefix (sólo disponible en procesadore con SSE2) // no he encontrado documentación sobre su uso
  8. db 66h
  9. ; Mueve una palabra (2 bytes) de DS:SI a ES:DI y suma 2 a SI y DI
  10. ; Usando REP se repite tantas veces como indique CX, en este caso 16.000 (16.000 x 4 = 64.000 bytes = 64K = 1 segmento)
  11. rep movsw
  12.  
  13.  

Espero que te haya quedado claro. Un saludo y a disfrutar con el ensamblador.  :good:  :hitcomp:

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Rutina de copiado.
« Respuesta #3 en: Lunes 20 de Octubre de 2008, 16:22 »
0
Sí, es un prefijo de tamaño, aunque no sabía qué hacía realmente. ¡Gracias!

Cita de: "NASM"
"instructions which use 32-bit data are prefixed with an 0x66 byte"
"las instrucciones que usan datos de 32 bits tienen como prefijo el byte 0x66"

En realidad SI y DI se incrementan o decrementan automáticamente dependiendo del bit DF del registro de banderas (EFLAGS).

123celes

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Rutina de copiado.
« Respuesta #4 en: Martes 21 de Octubre de 2008, 14:35 »
0
Muchas gracias por sus respuestas. Si no les importa, les podría preguntar ¿Para que es necesario que SI y DI tengan valor cero?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Rutina de copiado.
« Respuesta #5 en: Martes 21 de Octubre de 2008, 14:46 »
0
Para copiar desde el primer byte de cada segmento, por eso despues se incrementan (en este caso) y cx se decrementa en cada bucle. Mira los enlaces que deje sobre mov* y rep.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

123celes

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re: Rutina de copiado.
« Respuesta #6 en: Martes 21 de Octubre de 2008, 15:29 »
0
Ahhh. ahora ya lo entiendo, muchas gracias por su respuesta. Para mostrar mi gratitud les dejo esta excelente página con fuentes de assembler

asmsource.8k.com

PD:suerte.