註意:這裏只介紹點陣字體的使用。
準備工作:
1,必須首先創建相應的晶格信息。
讓我們創建兩個漢字的16×16點陣。其實很簡單。妳在紙上畫壹條線。
每個有16個正方形的正方形出來,然後根據它的大小,在裏面寫壹個字,如“成”和“建”
如果妳粗略地寫,妳會發現壹些方塊被字符的筆畫所交叉,而另壹些仍然是空格。
兒子,現在妳把沒有筆畫的標為0,有筆畫的標為1。從第壹行開始,標記這個。
寫下16×16的“點陣”信息。因為每行有16位,所以記錄壹行需要2個字節。
行,***16行,因此***需要2×16=32字節來存儲壹個單詞的“點陣”。
例如:韓-》;00000h、04008h、037fch、01008h、08208h、06208h、02210h、00910h
01120h、020A0h、0E040h、020A0h、02110h、02208h、0240Eh、00804h
當然,我的“點陣”是從其他字體加載的,但上述方法絕對可行。
從本質上講,晶格就是這樣產生的。
2.寫壹個子程序來顯示壹個像素。
任務:以圖形模式在屏幕上打印壹個像素。
分析:
必需變量:左上角的初始坐標值x0,y0。
默認參數:默認分辨率為640×480×16顏色模式。
(因為這是VGA標準BIOS支持的模式)
默認顏色是黑色背景上的黃色字符。
實現:(參考VGA實用編程技術,羅建軍清華大學出版社1995)。
;功能:
;在指定的屏幕位置用指定的顏色繪制壹個點。
;入口參數:
;Bx =屏幕上x0像素的x0坐標。
;Ax =屏幕上y0像素的y0坐標。
;Cl =彩色像素的顏色值。
writePix過程
linelen = 80在640*480*16顏色模式下掃描線占用的字節數。
;=寬度/8
;計算像素點的位置
推送es
推送bp
推dx
推斧頭
推di
推送cx
推送bx
mov bp,sp
第3版mov
shr bx,cl;X0/8
mov cx、linelen
mul cx
加ax,bx;這裏ax是像素點的偏移量,dx是頁碼。
mov di,ax
;設置圖像屏蔽寄存器
mov dx、sequen_ctl
第2集
美國東部時間
公司dx
mov al,0fh四個平面都可以寫。
美國東部時間
;選擇寫入模式2
mov dx、graphi_ctl
第五部電影
美國東部時間
公司dx
第2集
美國東部時間
;計算掩碼代碼並設置位掩碼寄存器。
dx年12月
第八集
美國東部時間
mov cx、【BP】;取出x坐標
和C1,7
80小時
奧地利shr公司
公司dx
美國東部時間
;寫入數據
mov ax、vgasegES段指向內存地址0a000h。
移動,ax
mov ax,【BP+2】;取壹個顏色值
mov ah,es:【di】;讀取壹次以驗證屏蔽寄存器。
movs:【di】,al;寫入顯示存儲器
流行bx
流行cx
波普迪
爆破筒
流行dx
流行血壓
流行歌曲
浸水使柔軟
writePix endp
3.寫壹個子程序輸出壹個漢字的圖形字符。有了2的基礎,這壹步相對容易實現。
如下所示:
;以圖形模式顯示漢字
;輸入參數:
;BX=x0初始左上角x坐標
;AX=y0初始左上角y坐標
;CX =顏色實際上只是顏色的cl。
;ds:si = buff字符點陣信息的第壹個地址。
;返回值:無
DispZhC過程
推送si
推送bp
推斧頭
推送bx
推送cx
推dx
mov bp,sp
異或dx,dx;Dx電流線
jmp a1
顯示:
公司si
inc si指向下壹個單詞
inc dx行數加壹
a1:
cmp dx,16;當前行為是0-15,因為它是16*16晶格。
我完成了
xor cx、CX;Cx當前列初始化
mov bx,word ptr【si】;讀取壹行點陣信息,壹行用兩個字節表示。
顯示:
cmp cx,16
je Disp換行
或cx,CX;清除CF
shl bx,1
jc DispP如果當前位是1,則顯示壹個點。
inc cx
jmp顯示
顯示:
推斧頭
推送bx
推送cx
mov ax,【bp+6】
添加ax,dx
mov bx,【bp+4】
添加bx、cx
mov cx,【BP+2】;顏色值以cl為單位。
調用writePix
流行cx
inc cx
流行bx
爆破筒
jmp顯示
完成:
流行dx
流行cx
流行bx
爆破筒
流行血壓
波普斯
浸水使柔軟
DispZhC endp
4.編寫壹個輸出字符串的子程序。
任務:妳已經有了壹個顯示壹個字符的子程序,現在妳必須連續、完整地調用它。
有效顯示緩沖區中的所有漢字點陣。
分析:
必需變量:整個字符串的初始左上角坐標x0,y0。
字符串長度
顯示每個字符時傳遞給子例程的左上角坐標X1和Y1。
默認參數:默認為16晶格。
默認的字間距是5像素。
程序的主要結構:
根據字符串長度循環的單個循環。
我的體會:
;以圖形模式顯示指定長度的字符串。
;輸入參數:
;字符串點陣緩沖區的第壹個地址。
;ax = y0字符串第壹個字符左上角的y坐標。
;bx = x0字符串第壹個字符左上角的x坐標。
;ch=n
;cl =顏色
;返回值:無
def dis = 5;每兩個符號之間的默認間距為5像素。
char width = 16;默認為16點陣,這也是每個字符的像素寬度。
顯示過程
推送bp
推斧頭
推送bx
推送ds
推送si
推送cx
推dx
mov bp,sp
異或dx,dx
jmp s1
next char:;指向下壹個要輸出的字符。
添加si,32
添加bx,DefDis+CharWidth
s1:
cmp dh,ch;是否輸出了指定數量的字符?
我願意
調用DispZhc
公司dh
jmp nextChar
Dones:
流行dx
流行cx
波普斯
流行數碼相機
流行bx
爆破筒
流行血壓
浸水使柔軟
DispZhS endp
5.標準VGA進入圖形模式的方法
;進入640×480×16的色彩模式。
;設置模式:
;對於640*480*16和320*,200*256是標準的VGA模式,在各種VGA上分別為12h和13h。
mov ax,12h
int 10h 19 _ 24 . rar(39.92 KB)
關於中國支持的壹些想法;
1,“字符集”對用戶來說只是問題的高級抽象。
當妳把壹個中文文檔保存在軟盤上帶回家時,它包含了“字符集”中的壹組代碼,這些代碼以標準化的方式定義了現實世界中存在的唯壹中文字符。但另壹方面,這些代碼本身並不能解釋這個漢字的任何其他信息,比如發音?激進?等等,當妳在另壹臺機器上查看這個文檔時,在人和計算機之間必須有壹個“顯示層”,如何實現這個顯示層並不重要。唯壹重要的是它還必須知道代碼和漢字之間的對應關系。當它讀取“字符集”中的代碼時,它將通過自己維護的代碼轉換表將標準代碼轉換為自己的字體信息代碼,這是壹個查表過程。
2.這意味著重要的是標準,而不是實現。當妳想在英文平臺上顯示漢字時,唯壹的困難是確定壹個彼此不沖突的標準字符集。至於顯示什麽形狀,根本不是問題。
3.為了保證兼容性和跨平臺性,從軟件角度來說,最好自帶字體。通過這個例子,很清楚如何自帶字體。事實上,由於這裏實現的程序通常以字而不是字節讀取字體信息,點陣字體中的代碼不能直接使用,因此字的兩面正好相反,必須每兩個字節交換壹次才能正確顯示。但是通過修改DispZhC中的代碼來實現通用性並不難。
4.矢量字形的原理是相同的,但需要更多的數學方法,因此我們知道該理論的用途。想想為什麽壹些計算機大師最初是出於對遊戲的熱情。