Re: [問題] 用C連結 ASM進入保護模式的副程式會當機

看板ASM (組合語言)作者 (打卡上班的日子)時間16年前 (2008/04/27 04:22), 編輯推噓3(303)
留言6則, 3人參與, 最新討論串3/3 (看更多)
※ 引述《SILee (打卡上班的日子)》之銘言: : ※ 引述《typeotoco (打字男)》之銘言: : : 我單獨使用 masm compile 一個進入保護模式的asm程式 能正常做動 : : 後來我想寫成副程式讓 C 去 call,但是只要一設定保護模式的 bit : : 就會當機。一直不知道怎麼辦,不知道有沒有人可以給我建議。 : : 或是有人有空可以幫我看一下? : : 我直接把 start 的部分改成 MemSetting 這個函數了。 : : http://rafb.net/p/aS7Oy058.html : : 當在最下面的地方 : : 先謝謝了 : 這幾天在寫開機檔時我也碰到了這個問題 : 我的程式在VirtualBox和QEMU下做模擬都沒有問題,可以正常地執行 : 可是只要拿到實體PC上做測試 : 開機後跑到寫入cr0這條指令,switch到protect mode後電腦就會自動重新開機 : movl %cr0, %eax : orl $1, %eax : movl %eax, %cr0 : 到現在我還搞不清楚原因,不知道ASUS在BIOS裡動了什麼手腳 搞了快兩個禮拜,今天終於被我找到原因了 = =" 我在程式一開始的時候有下cli把interrupt關掉 可是在執行一些software interrupt後interrupt又被打開了 而在剛switch到protect mode時,我還沒有把IDT建好 所以這時候只要一收到timmer來的interrupt系統就當掉了 在QEMU的模擬環境中並不會發生這種現象,所以在QEMU上測試的時候都不會有問題 但只要把程式一放到實體PC上跑就出問題了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.59.105.115

04/27 11:34, , 1F
這類程式都很麻煩, table設錯, 分頁設錯都會發生例外
04/27 11:34, 1F

04/27 11:34, , 2F
系統大部分都會掛掉 或重開
04/27 11:34, 2F

04/27 11:50, , 3F
qemu通常不會設定實體中斷,實體中斷訊號也到不了模擬介面
04/27 11:50, 3F

04/28 01:10, , 4F
沒中斷怎麼context switch
04/28 01:10, 4F

04/28 04:43, , 5F
trap指令會被解譯,實際硬體中斷是由host os處理,qemu執行
04/28 04:43, 5F

04/28 04:50, , 6F
序改變,需於解譯時由qemu的flag指示,trap是被解譯的指令.
04/28 04:50, 6F
文章代碼(AID): #184uyZvw (ASM)
文章代碼(AID): #184uyZvw (ASM)