[問題] 利用C做中斷服務

看板C_and_CPP作者 (左)時間12年前 (2013/07/31 08:58), 編輯推噓7(7023)
留言30則, 9人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) C 問題(Question): 小弟是C語言的新手,如果問題太瞎還請鞭小力點。 最近發現一份Intel CPU的相關文件,裡面有些很有趣的subfunction。 都是利用暫存器來改變一些電腦的行為。例如 : 背光的亮暗 開關。 於是我在Debug的環境下,做了一些測試,都是可行的。 但是想用C做卻發生了瓶頸。 簡單CODE的範例如下 mov ax,5F6A mov bx,0x14 int 10 在C code中我有辦法利用一些Reg對ax bx填值。 但始終無法實現第10號的中斷服務。 組語的 int 10 在C code中該怎麼詮釋。還請高手賜教! 感激不盡 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.87.84.93 ※ 編輯: a0916327869 來自: 219.87.84.93 (07/31 17:00) ※ 編輯: a0916327869 來自: 219.87.84.93 (07/31 17:00)

07/31 18:56, , 1F
如果你是在作業系統下,是無法直接調用的
07/31 18:56, 1F

07/31 18:59, , 2F
這邊作業系統指的是非真實模式
07/31 18:59, 2F

07/31 19:08, , 3F
餵狗的解答是 win16
07/31 19:08, 3F

07/31 19:26, , 4F
WIN7:protect mode DOS:real mode 是這樣嗎?
07/31 19:26, 4F

07/31 19:26, , 5F
那如果我在OS下發SCI 有機會做到嗎 @@?
07/31 19:26, 5F

07/31 19:44, , 6F
你要 OS 下發哪個期刊
07/31 19:44, 6F

07/31 19:56, , 7F
那要先看期刊的點數來決定怎麼發
07/31 19:56, 7F

07/31 20:03, , 8F
那個 SCI 不一樣吧 XDD
07/31 20:03, 8F

07/31 20:53, , 9F
我所謂的SCI...其實是讓CPU 進入SMM MODE
07/31 20:53, 9F

07/31 20:54, , 10F
就是legacy時代的SMI...但是現在在OSPM下
07/31 20:54, 10F

07/31 20:55, , 11F
SMI不是都改SCI了嗎...記得有SCI和SMI兩根PIN...
07/31 20:55, 11F

07/31 21:40, , 12F
int 10 是 bios call 還是其他程式提供的?
07/31 21:40, 12F

07/31 22:54, , 13F
在 C 語言中呼叫系統中斷的方法是利用 intdos(), intdosx()
07/31 22:54, 13F

07/31 22:55, , 14F
int86(), int86x() 函式, 前 2 個只能呼叫 Dos 中斷,後者可
07/31 22:55, 14F

07/31 22:56, , 15F
呼叫 Dos 與 Bios, 在實體位址模式下這些函式都可以使用,但
07/31 22:56, 15F

07/31 23:02, , 16F
如果要在保護模式下使用,以 Windows 來說的話,必需要利用
07/31 23:02, 16F

07/31 23:03, , 17F
VxD 的技術來做,例如像是裝置驅動程式或者是系統核心程式才
07/31 23:03, 17F

07/31 23:05, , 18F
能完全使用系統全部的功能.
07/31 23:05, 18F

08/01 00:00, , 19F
int 10(h) 應該是 VGA BIOS Call... 印象中是這樣
08/01 00:00, 19F

08/01 00:02, , 20F
我猜你大概是在DOS下在寫/測這些程式,要用C做這些原先組
08/01 00:02, 20F

08/01 00:03, , 21F
合語言(assembly language)做的事不是不行,就我所知,可
08/01 00:03, 21F

08/01 00:04, , 22F
以在C程式裡用inline assembly的方式達成,你可以試試看.
08/01 00:04, 22F

08/01 00:04, , 23F
另外你是用什麼C compiler,寫出來人家好回答你.
08/01 00:04, 23F

08/01 00:12, , 24F
OS會擋住不給你用 太底層了
08/01 00:12, 24F

08/01 01:01, , 25F
你要用 SMM,首先得要能存取物理位址 0xA0000 首先在
08/01 01:01, 25F

08/01 01:02, , 26F
Windows 就不容易,然後還要改 SMRAM 控制暫存器...等
08/01 01:02, 26F


08/01 01:05, , 28F
這篇有寫好的程式用 UUdecoder 解。圖文看 Duflot 的文章
08/01 01:05, 28F

08/01 10:25, , 29F
int 10以前在DOS下比較常用,但不快,就現在而言懶惰的我
08/01 10:25, 29F

08/01 10:25, , 30F
都直接叫ANSI.SYS來用就好,不自己刻繪圖模式了
08/01 10:25, 30F
文章代碼(AID): #1H-D7CC2 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1H-D7CC2 (C_and_CPP)