FASM SHR奇怪的行为

时间:2012-04-24 18:56:35

标签: linux assembly

使用FASM我试图用SHR指令移位dword,该指令应该将位移到右边附加零。这是代码:


format ELF executable 3

entry start

segment readable executable

start:
    cmp byte [counter],0
    jz fin

    mov eax,4
    mov ebx,1
    mov ecx,some
    mov edx,4
    int 0x80 ; write 4 bytes

    mov eax,4
    mov ebx,1
    mov ecx,splitter
    mov edx,1
    int 0x80 ; write a split byte (0x42)

    shr dword [some],4

    dec byte [counter]
    jmp start
fin:
    mov eax,1
    xor ebx,ebx
    int 0x80

segment readable writeable

some db 0x89,0xAB,0xCD,0xEF
splitter db 0x42
counter db 10

我希望得到类似的东西:0x89ABCDEF -> 0x089ABCDE -> 0x0089ABCD -> 0x00089ABC -> 0x000089AB -> 0x0000089A -> 0x00000089 -> 0x00000008 -> 0x00000000 但我得到的是:0x89ABCDEF -> 0xB8DAFC0E -> 0xABCDEF00 -> 0xDAFC0E00 -> 0xCDEF0000 -> 0xFC0E0000 -> 0xEF000000 -> 0x0E000000 -> 0x00000000

我做错了什么?

P上。 S.通过打开我在十六进制编辑器中重定向输出的文件来获取此值。 (这不是输出本身)

1 个答案:

答案 0 :(得分:1)

您的号码以小端存储。 http://en.wikipedia.org/wiki/Endianness

澄清一下, 0x89ABCDEF存储为0xEFCDAB89,因此右移产生0x0EFCDAB8,这是您看到的字节,顺序相反