使用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
我做错了什么?
备注:这个值是通过打开我在十六进制编辑器中重定向输出的文件获得的。(这不是输出本身)
发布于 2012-04-25 02:59:58
你的号码是小端存储的。http://en.wikipedia.org/wiki/Endianness
为清楚起见,0x89ABCDEF存储为0xEFCDAB89,因此右移位将以相反的顺序生成0x0EFCDAB8,即您看到的字节
https://stackoverflow.com/questions/10304287
复制相似问题