官术网_书友最值得收藏!

7 顯示變量值(harib02g)

現在可以顯示字符串了,那么這一節我們就來顯示變量的值。能不能顯示變量值,對于操作系統的開發影響很大。這是因為程序運行與想象中不一致時,將可疑變量的值顯示出來是最好的方法。

習慣了在Windows中開發程序的人,如果想看到變量的值,用調試器指調試程序中的錯誤(bug)時所用的工具,英文是debugger。另外,調試(動詞)是debug。(debugger)很容易就能看到,但是在開發操作系統過程中可就沒那么容易了。就像用Windows的調試器不能對Linux的程序進行調試一樣,Windows的調試器也不能對我們的“紙娃娃操作系統”的程序進行調試,更不要說對操作系統本身進行調試了。如果在“紙娃娃操作系統”中也要使用調試器的話,那只有自己做一個調試器了(也可以移植)。在做出調試器之前,只能通過顯示變量值來查看確認問題的地方。

閑話就說這么多,讓我們回到正題。那怎么樣顯示變量的值呢?可以使用sprintf函數。它是printf函數的同類,與printf函數的功能很相近。在開始的時候,我們曾提到過,自制操作系統中不能隨便使用printf函數,但sprintf可以使用。因為sprintf不是按指定格式輸出,只是將輸出內容作為字符串寫在內存中。

這個sprintf函數,是本次使用的名為GO的C編譯器附帶的函數。它在制作者的精心設計之下能夠不使用操作系統的任何功能。或許有人會認為,什么呀,那樣的話,怎么不做個printf函數呢?這是因為輸出字符串的方法,各種操作系統都不一樣,不管如何精心設計,都不可避免地要使用操作系統的功能。而sprintf不同,它只對內存進行操作,所以可以應用于所有操作系統。

■■■■■

我們這就來試試這個函數吧。要在C語言中使用sprintf函數,就必須在源程序的開頭寫上#include <stdio.h>,我們也寫上這句話。這樣以后就可以隨便使用sprintf函數了。接下來在HariMain中使用sprintf函數。

sprintf(s, "scrnx = %d", binfo->scrnx);
putfonts8_asc(binfo->vram, binfo->scrnx, 16, 64, COL8_FFFFFF, s);

sprintf函數的使用方法是:sprintf(地址,格式,值,值,值,……)。這里的地址指定所生成字符串的存放地址。格式基本上只是單純的字符串,如果有%d這類記號,就置換成后面的值的內容。除了%d,還有%s, %x等符號,它們用于指定數值以什么方式變換為字符串。%d將數值作為十進制數轉化為字符串,%x將數值作為十六進制數轉化為字符串。

關于格式的詳細說明

我們來運行一下看看。……運行正常。

說點題外話。因為這本書是在筆者吭哧吭哧寫完之后大家才看到的,所以雖然講到“能顯示變量的值了”,“以后調試就容易了”,恐怕大家也很難體會到其中的艱辛。但是,筆者是真刀真槍地編程,在此過程中犯了很多的錯(大多都是低級錯誤)。以前,因為不能顯示變量的值,所以發現運行異常的時候,只能拼命讀代碼,想象變量的值來修改程序,非常辛苦。但從今以后可以顯示變量的值就輕松多了。

話說,在分辨率是320×200的屏幕上,8×16的字體可是很大喲(笑)。

主站蜘蛛池模板: 峨眉山市| 青海省| 阿坝县| 安仁县| 大冶市| 和平区| 会昌县| 惠安县| 新邵县| 攀枝花市| 正安县| 邵阳县| 高清| 盈江县| 赤城县| 拜泉县| 金溪县| 花垣县| 马关县| 交口县| 左权县| 武邑县| 新田县| 固阳县| 永仁县| 河曲县| 松桃| 稻城县| 红安县| 垣曲县| 旅游| 泸州市| 民丰县| 岳西县| 闽侯县| 阜康市| 廉江市| 自贡市| 陆良县| 汾西县| 壤塘县|