Assume we save the number 1 in the EAX-Register and we swap the most significant byte with the least significant byte. Is the new swapped number 256 or 16777216?
I tried it in a assembler program by swapping the value of the AL- with the value of the AH-Register. My result was 256. I do not think that this is correct and neither I understand the result of 256. I tought the EAX-Register is 32 Bit, not 16 Bit.
The Question is related to the correct result of the swap.
There is a special opcode for this, called BSWAP, for example:
    MOV     EAX,1   ; EAX is 0x00000001  or 1 decimal  
    BSWAP   EAX     ; EAX is 0x01000000  or 16777216 decimal
It will swap all 4 bytes of any 32 bit general purpose register. This converts little-endian 32 bit values to big-endian and vice versa.
FWIW, to swap the bytes of a 16 bit value, e.g. in AX, you can do
    MOV     AX,1    ; AX is 0x0001 or 1 decimal
    XCHG    AL,AH   ; AX is 0x0100 or 256 decimal
Or, according to @PeterCordes:
    MOV     AX,0x1234
    ROL     AX,8    ; AX is 0x3412 now
There is no special opcode to swap only the top and low bytes of a 32 bit register (and leave the other two intact). You can only do something like this:
<removed code using ROR, XCHG AL,AH, ROL and BSWAP>
As @Fifoernik pointed out in a comment (thanks!), much easier than the code I removed is the following:
    MOV     EAX,0x12345678
    ROL     EAX,8   ; EAX is 0x34567812  rotate left one byte: 12 34 56 78 --> 34 56 78 12
    XCHG    AL,AH   ; EAX is 0x34561278  swap 12 and 78:       34 56 78 12 --> 34 56 12 78
    ROR     EAX,8   ; EAX is 0x78345612  rotate back:          34 56 12 78 --> 78 34 56 12
As @PeterCordes points out, this might even be a little faster:
    MOV     EAX,0x12345678
    ROL     EAX,8   ; EAX is 0x34567812  rotate left one byte: 12 34 56 78 --> 34 56 78 12
    ROL     AX,8    ; EAX is 0x34561278  swaps 12 and 78:      34 56 78 12 --> 34 56 12 78
    ROR     EAX,8   ; EAX is 0x78345612  rotate back:          34 56 12 78 --> 78 34 56 12
But I didn't time either of those.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With