2017-07-03 83 views
1

這是我遇到的行爲的一個例子。我的彙編程序似乎沒有輸出32位代碼

在組裝下面的程序:

[BITS 32] 

mov eax, 0x1234 

使用:

nasm -f bin in.asm -o out.bin 

我得到以下二進制輸出:

B8 34 12 00 00 

B8是操作碼 '進入EAX' 和它應該採取一個32位值並將其放在那裏(即應該只是B8 34 12)。但相反,它將額外的00 00視爲一個64位值。

我不知道這是否是NASM特有的問題,因爲我沒有嘗試過其他的彙編程序。

回答

2

你很困惑。你有4個字節。 4個字節是32位。不是64位。那將是8個字節。

一對十六進制數字是一個字節,這就是反彙編輸出將它們分組爲十六進制數對的原因。

考慮,作爲一個反例,

[BITS 64] 

mov rax, 0xCAFEBABEDEADBEEF 

能夠組裝(然後轉儲爲十六進制),以產生

0000000 b848 beef dead babe cafe    
000000a 
+0

媽的,你說得對。直到再過10分鐘才能接受答案... – almosnow

+2

還要注意,如果你沒有製作一個扁平的二進制文件,你需要使用'-felf64'或其他任何東西,並且這使得[[64位]]成爲多餘的。 '[bits 32]'可以讓你將32位機器碼彙編成一個64位的目標文件,但這通常不會有用。 –

+0

@PeterCordes必須在您的最新消息前幾秒刪除我的無關評論。肯定錯過了'不' –