Author: James Robertson
Date: 18:15:01 01/27/99
Go up one level in this thread
On January 27, 1999 at 19:58:35, Larry Griffiths wrote: >On January 27, 1999 at 14:50:59, James Robertson wrote: > >>On January 27, 1999 at 01:32:28, Eugene Nalimov wrote: >> >>>On January 26, 1999 at 22:38:37, James Robertson wrote: >>> >>>>Once again I show my absolute ignorance of assembly with these two questions: >>>>I am trying to acces the 3rd [+ 4th] byte of a register. How? E.g., what is next >>>>after al, ah, ? >>>>How do I pop something off the stack without moving the stack pointer? >>>> >>>>Thanks, >>>>James >>> >>>1. Use shift instruction. E.g. >>> shr eax, 16 >>> mov byte ptr [esi], al >>> You can also use rotate instruction (it'll not destruct >>> other bytes): >>> ror eax, 16 >>> mov byte ptr [esi], al >>> ror eax, 16 >>> But if I remember it correctly, rotate is worse than shift >>> (cannot be executed in parallel) on both Pentium and P6 family. >>>2. mov reg32, dword ptr [esp] >>> >>>Eugene >> >>Ok.... that would work. Because I already have stuff stored in ax, and I know >>the exact values I want to put into the 'e' part, I wrote: >> >>or eax,0xeeee0000 >>and eax,0x0000ffff >>or eax,0xeeee0000 >> >>where eeee=what I want to put in. This seems to work. Are there any problems I >>am missing? >> >>James > >James, > >It looks to me like the above three instructions can be replaced by: > >mov eax,0xeeee0000 This won't work because the goal of the bitwise or is to preserve the lower 16 bits, while a straight mov operation replaces them all with 0. My logic is such: or eax,0xeeee0000 //move some value (here represented by eeee) to eax ..... and eax,0x0000ffff //set the top 16 bits to 0 while preserving lower 16 or eax,0xdddd0000 //move some new value to eax ...and so on... James > >Larry
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.