0

使用 FASM 我试图用一条SHR指令来移动双字,该指令应该将位移动到右附加零。这是代码:


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

我究竟做错了什么?

PS这个值是通过打开我在十六进制编辑器中重定向输出的文件获得的。(这不是输出本身)

4

1 回答 1

1

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

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

于 2012-04-24T18:59:58.263 回答