如何將mov [ebx], al
從NASM翻譯成GAS? 我試過mov %al, (%ebx)
但它確實發生了分段故障。從NASM到GAS的翻譯
另一個問題,可以說我有氣陣列.lcomm array, 50
我必須把美元符號($)在array
這樣的:mov %rbx, $array
還是不需要?
任何答案將是有益的:)
如何將mov [ebx], al
從NASM翻譯成GAS? 我試過mov %al, (%ebx)
但它確實發生了分段故障。從NASM到GAS的翻譯
另一個問題,可以說我有氣陣列.lcomm array, 50
我必須把美元符號($)在array
這樣的:mov %rbx, $array
還是不需要?
任何答案將是有益的:)
先上去,mov %al, %ecx
不能真正的錯,因爲它沒有訪問內存。地獄,它不應該組裝,因爲它們的大小不同。 也就是說,您的nasm代碼的正確翻譯是mov %al, (%ecx)
,它會將al
寫入地址ecx
的內存中。
對於其他問題:如果您想引用地址,則需要$
。因此,mov %rbx, $array
無效,因爲您無法分配給該地址。如果要將rbx
存儲到陣列的第一項中,請寫mov %rbx, array
。如果要加載第一個項目,請使用mov array, %rbx
。如果您想加載第一個項目的地址,請執行mov $array, %rbx
或使用lea
,這是特殊的,不需要$
。
intel2gas怎麼樣?
usage: intel2gas [options] [-o outfile] [infile]
where options include:
-h this help
-i convert from intel to at&t format (default)
-g convert from at&t to intel format
-m -t convert from masm/tasm to at&t format
-c understand C style comments
-I convert inline assembler (intel to at&t only)
-d output all % chars as %%
-V show version
infile and outfile default to stdin/stdout
您可以使用objdump(osx上的otool)將其反彙編爲gas格式。
它是英特爾語法,但是它是MASM風格,而不是NASM。例如'mov eax,symbol'是來自GAS和MASM內存的負載,但是是NASM中地址的'mov'-immediate。請參閱https://stackoverflow.com/tags/intel-syntax/info。 –
與NASM彙編,分解爲objdump -d
以獲取任何單個指令的AT & T語法版本。
或者使用Agner Fog的objconv
拆分爲.S
文件,使用GAS AT & T語法,您可以直接實際組裝。 (它將標籤放在分支目標上)。但它仍然沒有真正處理轉換數據,但大部分代碼都是我想的。
BTW,氣體可以使用.intel_syntax noprefix
,但它是MASM風格沒有NASM,所以mov eax, symbol
是一個負載,沒有地址的mov
-immediate。 (你需要mov eax, OFFSET symbol
在GAS .intel_syntax
)。 有關NASM和MASM之間差異的更多信息,請參閱https://stackoverflow.com/tags/intel-syntax/info。
mov [ebx], al
和mov %al, (%ebx)
是相同的指令:單獨使用ebx
作爲地址的al
一個字節的存儲。如果這種隔斷,那麼單獨的指示不是問題。其他說明都是錯誤的,或者您有其他問題。也許你將GAS代碼組裝成64位? Assembling 32-bit binaries on a 64-bit system (GNU toolchain)。
與NASM彙編,用'objdump -d'(或['objconv'](http://www.agner.org/optimize/#objconv)反彙編得到一個你可以實際組裝的文件。 –