0

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

私は何を間違っていますか?

PS この値は、16 進エディタで出力をリダイレクトするファイルを開くことによって取得されました。(出力そのものではありません)

4

1 に答える 1

1

数値はリトルエンディアンで保存されます。 http://en.wikipedia.org/wiki/エンディアンネス

明確にするために、0x89ABCDEF は 0xEFCAB89 として格納されるため、右シフトは 0x0EFCAB8 を生成します。これは、表示されているバイトであり、逆順です。

于 2012-04-24T18:59:58.263 に答える