看板 ASM 關於我們 聯絡資訊
※ 引述《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
softcloud:這類程式都很麻煩, table設錯, 分頁設錯都會發生例外 04/27 11:34
softcloud:系統大部分都會掛掉 或重開 04/27 11:34
ggg12345:qemu通常不會設定實體中斷,實體中斷訊號也到不了模擬介面 04/27 11:50
final01:沒中斷怎麼context switch 04/28 01:10
ggg12345:trap指令會被解譯,實際硬體中斷是由host os處理,qemu執行 04/28 04:43
ggg12345:序改變,需於解譯時由qemu的flag指示,trap是被解譯的指令. 04/28 04:50