一步步编写操作系统 75 从显卡读取光标位置1
我們在打印字符時,通常都不用指定字符顯示的坐標位置,大家也沒覺得有什么奇怪,原因是字符是在當前光標的位置處顯示的,而且光標的位置會一直更新順延,我們的字符一直跟著光標走,似乎光標就是字符的導航一樣,而我們已經習慣了跟隨光標。我想大伙兒已經清楚了光標和字符的關系了,對,它們的關系就是沒有任何關系^_^。“光標在哪字符就在哪”,這是我們人為有意設置的,我們是在光標處打印字符。也就是說,我們也可以不在光標處打印字符,讓光標和字符的位置分開。這一點在理論上就能證明,我們知道打印字符本質上就是把字符寫入在顯存中的某個地址處。在文本模式80*25下的顯存可以顯示80*25=2000個字符,每個字符占2字節,低字節是字符的ascii碼,高字節是前景色和背景色屬性,所以在4000字節的顯存空間中,只要起始地址為偶數的任意2字節我們都可以寫入字符,您看,這哪里是光標能限制的。光標只是個亮點,用來吸引用戶眼球的,它能夠幫助咱們快速找到屏幕上的活躍位置,它本身與字符顯示的位置沒有關系。
話雖然這么說,但光標的作用已經被認同為當前可輸入或顯示字符的位置,字符在光標處顯示,這已經成了字符打印的傳統觀念,所以在咱們的實現中也要傳承復制這種觀念。
光標是什么?不要感到奇怪,我是很認真的說。
我們Linux用戶最熟悉了,就是屏幕上那一小白豎塊,和文本軟件中的小豎線是一回事,它們都是用來告訴用戶當前文本輸入點在哪里。光標是字符的坐標,只不過該坐標不是二維的,而是一維的線性坐標,是屏幕上所有字符以0為起始的順序。在默認的80*25模式下,每行80個字符共25行,屏幕上可以容納2000個字符,故該坐標值的范圍是0~1999。第0行的所有字符坐標是0~24,第1行的所有字符坐標是25~49,以此類推,最后一行的所有字符是1975~1999。由于一個字符是占用2字節,所以光標乘以2后才是字符在顯存中的地址。
光標的坐標位置是存放在光標坐標寄存器中的,當我們在屏幕上寫入一個字符時,光標的坐標并不會自動+1,因為光標跟隨字符并不是必要的,比如我們想刪除文本中的某個字符時,咱們就可以把光標移動到該字符后面,再按下delete鍵,這樣字符就被刪除了,這就是光標與字符分離的應用之一。所以,光標位置并不會自動更新,因為光標坐標寄存器是可寫的,如果需要的話,程序員可以自己來維護光標的坐標。
為了在光標處打印字符,咱們得先知道光標在哪,所以第一件事就是讀取光標坐標寄存器,獲取光標坐標值。
好了,以上是理論,下節咱們實戰,下班吃飯。
?
?
?
總結
以上是生活随笔為你收集整理的一步步编写操作系统 75 从显卡读取光标位置1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 银行客服的一个电话 差点让我损失1600
- 下一篇: 一步步编写操作系统 51 加载内核4