簡體   English   中英

如何用Turbo C 2.01編寫內聯匯編?

[英]How to write inline Assembly with Turbo C 2.01?

我想在使用Turbo C 2.01編譯的DOS程序中編寫一些內聯程序集。 當我寫

asm {
   nop
}

編譯器聲稱in-line assembly is not allowed in function ... 看到: 內聯匯編錯誤Turbo C 2.01

有任何想法嗎?

請參閱第430頁的Turbo C用戶手冊

不允許內聯匯編

您的源文件包含內聯匯編語言語句,並且您正在從Integrated Environment中對其進行編譯。 您必須使用TCC命令來編譯此源文件。

我相信您還需要將-B選項傳遞給TCC(第455頁)。

另外,您可以使用__emit__ (第103頁)將相對簡單的代碼作為機器代碼而不是匯編助記符輸入。

不允許在IDE中進行內聯匯編似乎是一個奇怪的限制。 您可能考慮將其“升級”到Turbo C ++ 3.0,我相信確實允許這樣做。 我可以想象TC ++在提供.c文件時將編譯C代碼,或者可以將IDE設置為顯式編譯C。 也有手冊

Turbo C無需使用匯編程序階段即可將C代碼直接轉換為機器代碼,因此不能在程序中包含匯編語言源。 但是,它可以使用__emit指令插入機器代碼。 最干凈的使用方法可能是使用單獨的匯編器(或DEBUG )將感興趣的代碼本身處理為COM文件,然后將其中的字節值輸入__emit指令。 參數從BP + 4(在小型,小型或緊湊型模型中)或BP + 6(中,大型或大型)開始,以從左至右的升序存儲。 局部變量存儲在BP以下的地址。

使用Turbo Pascal時,可以使用方便的程序“內聯匯編器”將匯編語言源轉換為Turbo Pascal文字代碼指令。 Turbo Pascal的指令格式與C的格式不同(我更喜歡Pascal的格式),並且可以用Turbo C不能的方式容納標簽。 盡管如此,使用__emit可能比嘗試使用內聯匯編代碼對構建時間的影響要小得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM