Are you doing something to Q after you store a fraction of it to W? Because otherwise Q should remain the same. W is only a copied portion of Q; the portion of Q was not moved (comparing this to Windows). So I think you just did something to Q before you tried that routine again. Oh and for the rest of you... this does have something to do with ASM; the basic concepts are still the same all accross the board.