我正在學習如何建立組裝和連接的實模式程序:使用「.intel_syntax noprefix」如何獲得標籤的內存地址?
- GCC彙編版本2.25
- Binutils的版本2.25
- GCC 5.2.0版本
我使用英特爾語法不帶前綴.intel_syntax noprefix
我想將一個字符串的地址加載到SI註冊。我知道,如何引用NASM中的內存位置,但是當我在GNU彙編程序代碼中執行相同操作時,它只將字符串的WORD移動到寄存器中,而不是標籤的地址。
我的代碼是:
.code16
.intel_syntax noprefix
mov cx, 11
mov si, name
mov di, 0x7E00
push di
rep cmpsb
pop di
je LOAD
當我用GCC編譯它,我可以在處理器確實調試器看到:
mov si, WORD ptr ds:0x7d2d
,但我想要的字符串的地址遷入寄存器,而不是它指向的數據。
我也試圖把方括號的名字是這樣的:
.code16
.intel_syntax noprefix
mov cx, 11
mov si, [name]
mov di, 0x7E00
push di
rep cmpsb
pop di
je LOAD
它不會有所作爲。
從NASM我知道,這彙編代碼的工作原理:
mov si, name
NASM將生成的name
地址移動到寄存器SI指令。
我的問題:有沒有辦法強制GCC使用帶有無前綴的英特爾語法將符號的地址加載到寄存器中?
事實後,我發現一個相關的問題,與[Stackoverflow答案](http://stackoverflow.com/questions/16121173/why-does-switching-from-att-to-intel-syntax-make-this -tutorial-segfault-using-g)是相似的。根據不同的觀點,這個問題可能被認爲是重複的。 –