我試圖將一個項目從Windows移植到Linux。 我承擔了以下回購協議中的代碼:Nspire Emu。 我能夠修復一些編譯錯誤,但很多功能需要重新實現,並且有些部分我無法理解。行內彙編說明
frame
變量類型定義:
typedef struct { void *prev, *function; } os_exception_frame_t;
直列件組裝我不明白:
asm ("movl %%fs:(%1), %0" : "=r" (frame->prev) : "r" (0));
asm ("movl %0, %%fs:(%1)" : : "r" (frame), "r" (0));
我真的很感激,如果有人能幫助我理解前面的代碼。 在此先感謝。
gcc和visual c編譯器對內聯彙編有不同的語法。我將從編譯器中的文檔開始,它將正確地工作,並轉換爲您定位的編譯器所需的格式。 – Jay
感謝您的提示。這是使用mingw gcc在Linux中編譯的,這意味着我可以在Windows和Linux中編譯代碼。那對我來說不是問題。問題是這段代碼的實際含義。我最近發現fs:0是SEH在Windows中發生的地方,現在我知道該代碼的作用。見http://feepingcreature.github.io/handling.html感謝您的時間和耐心,併爲回答我自己的問題感到抱歉。 PD:因爲我的名譽,我無法回答。 –