extrn是用來說明:在當前模組所使用的標識符中,哪些標識符是已在其它模組中被定義為指定類型的標識符。
偽指令EXTRN
如果當前模組使用了其它模組的標識符,而對它又不加以說明的話,那么,在彙編時,彙編程式將會給出下列出錯信息: error nnnnn: undefined symbol : XXXXXX 其中:“nnnnn”是錯誤號,“XXXXXX”是當前模組中沒有定義的標識符。
偽指令EXTRN的一般說明格式如下: EXTRN 標識符1:類型1, 標識符2:類型2, …… 其中:“標識符”和“類型”之間要用冒號“:”連線。
上面語句說明了標識符1、標識符2等是外部標識符,它們在其它模組中已被分別定義為類型1、類型2等,該類型說明符可以是:NEAR、FAR、BYTE、WORD、DWORD等之一。
注意:偽指令EXTRN中所說明的標識符必須在其定義的模組中被PUBLIC偽指令說明為公共標識符,並且其說明的標識符類型要與該標識符在定義是的類型相一致,否則,要么不能生成其執行檔,要么其執行檔案不能正確運行。
例如:在a.asm中加入了:
.......
call _main
......
extrn _main:near
編譯成a.obj。
在b.asm中定義了:
public _main
也編譯成b.obj。然後link a.obj b.obj 是能夠正確連結並運行的,我們的c語言編譯器也是這樣找到庫函式的。