0
使用FASM我試圖移動dword與SHR
指令應該將位移到右邊附加零。下面是代碼: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
我在做什麼錯?
P. S.通過打開在十六進制編輯器中重定向輸出的文件來獲取此值。 (這不是輸出本身)
但是,如果沒有改變輸入值是正常打印... – user28667 2012-04-24 19:08:35
無論您的打印或者你的十六進制編輯器正在做一個字節順序的隱式反轉。基本上你「看到」的字節是你正在移位的字節的相反順序。 – TJD 2012-04-24 19:14:19
非常感謝!我在'BSWAP'之間寫了'SHR',而不是很好。但我不確定這是最好的方法...... – user28667 2012-04-24 19:37:39