[Ayuda]MOVSD y MOVSW

Iniciado por blackray, 6 Septiembre 2009, 16:54 PM

0 Miembros y 1 Visitante están viendo este tema.

blackray

Hola =P la cuestion es que yo entiendo que copia de SI a DI, lo que no entiendo es la instruccion del flag de direccion como CLD, lei y dice... movimiento para adelante WTF?
:-\ No entiendo muy bien eso, me podeis echar una mano porfavor?  ;D
Saludos!
Nada es imposible.

YST

MOVSD lo que hace es mover un dword(4 bytes ) desde la posición quue apunta esi hacia la posión que apunta edi , movsw hace lo mismo solamente que en vez de un dword mueve un word  ;) Para que lo entienddas mejor te dejo un codigo :P
Código (asm) [Seleccionar]

include 'win32ax.inc'
.code
start:
mov esi,Hola ;Le pasamos el puntero de "Hola" a esi
mov edi,Buffer ;Le pasamos el puntero de el buffer a edi
movsd  ;Copiamos los 4 bytes
invoke MessageBox,0,Buffer,0,0 ;Los imprimimos
invoke ExitProcess,0 ;Salimos
.data
Buffer db 20 dup (0)
Hola db 'Hola',0
.end start           


Yo le enseñe a Kayser a usar objetos en ASM

blackray

Muchas gracias  :P
mmm y el CLD? tengo entendido que pone a 1 el flag de direccion y que esta relacionado con el movsX ._. en los codes comentados que veo solo dice... hacia adelante ._. mire sobre la instruccion pero solo dice para que sirve, no como se usa  :xD
Saludos!
Nada es imposible.

YST

#3
CLD

Borra la bandera de dirección ,asignándole un 0 . Las instrucciones de primitivas de cadena incrementan (e)si y (e)di de manera automatica

Formato de instrucción:
CLD


Yo le enseñe a Kayser a usar objetos en ASM

blackray

Emm entiendo lo que hace pero no le veo uso ._. si es para hacer un bucle no seria mas facil el tipico loop o con condicionales? =/
Saludos :P
Nada es imposible.

Eternal Idol

CLD pone el flag a 0, tambien existen STD que si pone el flag a 1 y entonces se decrementan las direcciones. Un uso muy util es por ejemplo cuando queres copiar memoria, va aumentando o decrementando ambas direcciones (fuente y destino) y usando un repXXX podes lograr la copia completa.

Un ejemplo tonto en MASM, depuralo y vas a ver como funciona (las copias tendran el valor de los originales):
Código (asm) [Seleccionar]
.386
.model flat, stdcall

.data
w dd 14
x dd 15
y dd 16
z dd 17

w1 dd 0
x1 dd 0
y1 dd 0
z1 dd 0

.code
main:

mov esi, offset w
mov edi, offset w1
mov ecx, 4
rep movsd

ret
end main


Lo mismo pero decrementando:
Código (asm) [Seleccionar]
std
mov esi, offset z
mov edi, offset z1
mov ecx, 4
rep movsd
cld ;siempre hay que restaurar este flag, por defecto es 0
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

blackray

Muchas gracias a los dos, ya lo entiendo perfectamente  ;D

Saludos!
Nada es imposible.

Eternal Idol

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón