extern在彙編中用來引用乙個在其他模組中定義過的符號名,使得這個符號名所表示的資料或函式能在該模組中被使用。
[file "naskfunc.nas"]
global _asm_inthandler21
extern _inthandler21
[section .text]
_asm_inthandler21:
push es
push ds
pushad
mov eax,esp
push eax
mov ax,ss
mov ds,ax
mov es,ax
call _inthandler21
pop eax
popad
pop ds
pop es
iretd
void inthandler21(int *esp)
}
inthandler21函式在bootpack.h中宣告過,這裡在彙編檔案naskfunc.nask中要用到這個函式,故用extern語句。這裡我們有幾個疑問一塊來**一下:
*上面的call _inthandler21是怎樣乙個呼叫?
先將當前的ip壓入棧中,再跳到_inthandler21處執行指令。
*但一般是跳到某個彙編段,而這裡是乙個c原始檔中的函式,這有是什麼原理?
首先,匯程式設計序可以呼叫c函式,這是混合程式設計。而且還可以引用c檔案中定義的變數,如 c: char ch; asm: extern ch:byte。
在我們的這個例子中,函式inthandler21帶有引數,如何在彙編中傳參。方法是匯程式設計序將引數值壓入堆疊
mov eax,esp
push eax
彙編EXTERN用法
extern在彙編中用來引用乙個在其他模組中定義過的符號名,使得這個符號名所表示的資料或函式能在該模組中被使用。file naskfunc.nas global asm inthandler21 extern inthandler21 section text asm inthandler21 pu...
extern用法詳解
1 基本解釋 extern可以置於變數或者函式 前,以標示變數或者函式 的定義在別的檔案中,提示編譯器遇到此變數和函式 時在其他模組中尋找其定義。另外,extern也可用來進行鏈結指定。2 問題 extern 變數 在乙個原始檔裡定義了乙個陣列 char a 6 在另外乙個檔案裡用下列語句進行了宣告...
extern用法詳解
extern可以置於變數或者函式 前,以標示變數或者函式 的定義在別的檔案中,提示編譯器遇到此變數和函式 時在其他模組中尋找其定義。另外,extern也可用來進行鏈結指定。2 問題 extern 變數 在乙個原始檔裡定義了乙個陣列 char a 6 在另外乙個檔案裡用下列語句進行了宣告 extern...