[ros-dev] [ros-diffs] [greatlrd] 23826: Wrote RtlUshotByteSwap RtlUlongByteSwap and RtlUlonglongByteSwap to asm code. but we need a C api for header to linking it right. Put the asm version to i386

mrnobo1024 mrnobo1024 at yahoo.com
Fri Sep 1 17:06:29 CEST 2006


--- Alex Ionescu <ionucu at videotron.ca> wrote:

> mrnobo1024 wrote:
> > --- Alex Ionescu <ionucu at videotron.ca> wrote:
> > 
> > 
> > I meant that instead of mov edx,[esp+8] mov eax,[esp+4] it could be mov
> > edx,[esp+4] mov eax,[esp+8]. I don't think that would affect instruction
> pairing.
> > 
> 
> That wouldn't swap them... you would just be inverting the bytes. Each
> ULONG must be swapped here.

Which can be done without an explicit swap. Just change the way they're read
from the stack. As an example, suppose you're calling it with
0x0011223344556677:

                     edx      eax      ecx
    mov edx, [esp+8] 00112233
    mov eax, [esp+4] 00112233 44556677
    bswap edx        33221100 44556677
    bswap eax        33221100 77665544
    mov ecx, eax     33221100 77665544 77665544
    mov eax, edx     33221100 33221100 77665544
    mov edx, ecx     77665544 33221100 77665544

    mov edx, [esp+4] 44556677
    mov eax, [esp+8] 44556677 00112233
    bswap edx        77665544 00112233
    bswap eax        77665544 33221100

They both give the correct answer in edx:eax, but the second would swap the
ulongs implicitly by reading the high ulong into eax and the low one into
edx. Much like how RtlUshortByteSwap works, but with ulongs instead of bytes.

__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 


More information about the Ros-dev mailing list