您的位置:首页 > 其它

系统的简单注解 - 12 09_font.asm

2017-04-21 14:30 337 查看


该文件用于在屏幕上显示字符。

 

disp_letter_font:显示字符;

 

数组font_0_buf到font_cnsl_buf,为各字符的点阵;

数字font_letter_mem用于记录各字符点阵的起始地址;

;===============================================================================

;=== 本程序提供字符显示功能:                                                ===

;=== 1.字符显示函数                                                          ===

;=== 2.各类字符数组                                                          ===

;===============================================================================
;-------------------------------------------------------------------------------

disp_letter_font:                             ;显示字符

                                              ;输入参数:eax-高16位为Y值;低16位为X值

                                              ;输入参数:bl-对应的字符编码

                                              ;输入参数:cl-字符显示的颜色

                                              ;输出参数:无

     push ebp

     push eax                                 ;[ebp+8]: eax

     push ebx                                 ;[ebp+4]: ebx

     push ecx                                 ;[ebp]: ecx

     mov ebp, esp

 

     ;计算字符左上角点对应的显存地址

     xor ebx, ebx

     mov ebx, eax

     shr eax, 16                              ;ax对应Y值

     and ebx, 0xffff                          ;bx对应X值

     mov cx, 320                              ;一行320个点

     mul cx

     add eax, ebx                             ;eax中为字符左上角点在显存中的偏移

     mov [font_dis_saddr], eax                ;记录该偏移 

    

    ;做好画点的准备

     mov edx, font_letter_mem                 ;edx为保存字符点阵的内存地址

     mov eax, [ebp+4]                  
4000
       ;bl为对应字符的编码

     and eax, 0x0ff

     shl eax, 2                               ;左移2位,也是乘以4

     add edx, eax

     mov edx, [edx] 

     mov ebx, [font_dis_saddr]                ;edx设置为字符显存偏移

     add ebx, pic_mem_addr                    ;ebx指向字符对应的显存起始地址

     mov ecx, 16                              ;每个字符16行
     ;逐行的显示字符的点阵

_disp_a_letter:    

     mov al, [edx]

    

     mov ah, 0                                ;默认为黑色

     test al, 0x80

     jz _8@

     mov ah, [ebp]                            ;否则为红色

_8@:

     mov [ebx], ah    

     inc ebx

 

     mov ah, 0                                ;默认为黑色

     test al, 0x40

     jz _7@

     mov ah, [ebp]                            ;否则为红色

_7@:

     mov [ebx], ah

     inc ebx 
 

     mov ah, 0                                ;默认为黑色

     test al, 0x20

     jz _6@

     mov ah, [ebp]                            ;否则为红色

_6@:

     mov [ebx], ah

     inc ebx 

 

     mov ah, 0                                ;默认为黑色

     test al, 0x10

     jz _5@

     mov ah, [ebp]                            ;否则为红色

_5@:

     mov [ebx], ah

     inc ebx 

 

     mov ah, 0                                ;默认为黑色

     test al, 0x08

     jz _4@

     mov ah, [ebp]                            ;否则为红色

_4@:

     mov [ebx], ah

     inc ebx 

 

     mov ah, 0                                ;默认为黑色

     test al, 0x04

     jz _3@

     mov ah, [ebp]                            ;否则为红色

_3@:

     mov [ebx], ah

     inc ebx 

 

     mov ah, 0                                ;默认为黑色

     test al, 0x02

     jz _2@

     mov ah, [ebp]                            ;否则为红色

_2@:

     mov [ebx], ah

     inc ebx 

 

     mov ah, 0                                ;默认为黑色

     test al, 0x01

     jz _1@

     mov ah, [ebp]                            ;否则为红色

_1@:

     mov [ebx], ah

     inc ebx 

 

     inc edx                                  ;下一个字符

     add ebx, 312                             ;显存地址移到下一行

     loop _disp_a_letter

 

     pop ecx

     pop ebx

     pop eax

     pop ebp

     ret
;--------------------------------全局变量---------------------------------------

align 4

     font_dis_saddr   dd 0x0                  ;用于记录对应字符显存的首地址

     font_letter_mem  dd font_0_buf,     font_1_buf,     font_2_buf,      font_3_buf,

                      dd font_4_buf,     font_5_buf,     font_6_buf,      font_7_buf,

                      dd font_8_buf,     font_9_buf,     font_a_buf,      font_b_buf,

                      dd font_c_buf,     font_d_buf,     font_e_buf,      font_f_buf,

                      dd font_g_buf,     font_h_buf,     font_i_buf,      font_j_buf,

                      dd font_k_buf,     font_l_buf,     font_m_buf,      font_n_buf,      

                      dd font_o_buf,     font_p_buf,     font_q_buf,      font_r_buf,

                      dd font_s_buf,     font_t_buf,     font_u_buf,      font_v_buf,

                      dd font_w_buf,     font_x_buf,     font_y_buf,      font_z_buf,

                      dd font___buf,     font_cnsl_buf     

 

     font_0_buf       db 0x00,0x00,0x3E,0x63,0x63,0x63,0x6B,0x6B,

                      db 0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00

     font_1_buf       db 0x00,0x00,0x0C,0x1C,0x3C,0x0C,0x0C,0x0C,

                      db 0x0C,0x0C,0x0C,0x3F,0x00,0x00,0x00,0x00   

     font_2_buf       db 0x00,0x00,0x3E,0x63,0x03,0x06,0x0C,0x18,

                      db 0x30,0x61,0x63,0x7F,0x00,0x00,0x00,0x00

     font_3_buf       db 0x00,0x00,0x3E,0x63,0x03,0x03,0x1E,0x03,

                      db 0x03,0x03,0x63,0x3E,0x00,0x00,0x00,0x00

     font_4_buf       db 0x00,0x00,0x06,0x0E,0x1E,0x36,0x66,0x66,

                      db 0x7F,0x06,0x06,0x0F,0x00,0x00,0x00,0x00

     font_5_buf       db 0x00,0x00,0x7F,0x60,0x60,0x60,0x7E,0x03,

                      db 0x03,0x63,0x73,0x3E,0x00,0x00,0x00,0x00

     font_6_buf       db 0x00,0x00,0x1C,0x30,0x60,0x60,0x7E,0x63,

                      db 0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00

     font_7_buf       db 0x00,0x00,0x7F,0x63,0x03,0x06,0x06,0x0C,

                      db 0x0C,0x18,0x18,0x18,0x00,0x00,0x00,0x00

     font_8_buf       db 0x00,0x00,0x3E,0x63,0x63,0x63,0x3E,0x63,

                      db 0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00

     font_9_buf       db 0x00,0x00,0x3E,0x63,0x63,0x63,0x63,0x3F,

                      db 0x03,0x03,0x06,0x3C,0x00,0x00,0x00,0x00

     font_a_buf       db 0x00,0x00,0x00,0x00,0x00,0x3C,0x46,0x06,

                      db 0x3E,0x66,0x66,0x3B,0x00,0x00,0x00,0x00

     font_b_buf       db 0x00,0x00,0x70,0x30,0x30,0x3C,0x36,0x33,

                      db 0x33,0x33,0x33,0x6E,0x00,0x00,0x00,0x00

     font_c_buf       db 0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x60,

                      db 0x60,0x60,0x63,0x3E,0x00,0x00,0x00,0x00

     font_d_buf       db 0x00,0x00,0x0E,0x06,0x06,0x1E,0x36,0x66,

                      db 0x66,0x66,0x66,0x3B,0x00,0x00,0x00,0x00

     font_e_buf       db 0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x63,

                      db 0x7E,0x60,0x63,0x3E,0x00,0x00,0x00,0x00

     font_f_buf       db 0x00,0x00,0x1C,0x36,0x32,0x30,0x7C,0x30,

                      db 0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00

     font_g_buf       db 0x00,0x00,0x00,0x00,0x00,0x3B,0x66,0x66,

                      db 0x66,0x66,0x3E,0x06,0x66,0x3C,0x00,0x00

     font_h_buf       db 0x00,0x00,0x70,0x30,0x30,0x36,0x3B,0x33,

                      db 0x33,0x33,0x33,0x73,0x00,0x00,0x00,0x00

     font_i_buf       db 0x00,0x00,0x0C,0x0C,0x00,0x1C,0x0C,0x0C,

                      db 0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00

     font_j_buf       db 0x00,0x00,0x06,0x06,0x00,0x0E,0x06,0x06,

                      db 0x06,0x06,0x06,0x66,0x66,0x3C,0x00,0x00

     font_k_buf       db 0x00,0x00,0x70,0x30,0x30,0x33,0x33,0x36,

                      db 0x3C,0x36,0x33,0x73,0x00,0x00,0x00,0x00

     font_l_buf       db 0x00,0x00,0x1C,0x0C,0x0C,0x0C,0x0C,0x0C,

                      db 0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,0x00

     font_m_buf       db 0x00,0x00,0x00,0x00,0x00,0x6E,0x33,0x33,

                      db 0x33,0x33,0x33,0x33,0x00,0x00,0x00,0x00

     font_n_buf       db 0x00,0x00,0x00,0x00,0x00,0x6E,0x7F,0x6B,

                      db 0x6B,0x6B,0x6B,0x6B,0x00,0x00,0x00,0x00

     font_o_buf       db 0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x63,

                      db 0x63,0x63,0x63,0x3E,0x00,0x00,0x00,0x00

     font_p_buf       db 0x00,0x00,0x00,0x00,0x00,0x6E,0x33,0x33,

                      db 0x33,0x33,0x3E,0x30,0x30,0x78,0x00,0x00

     font_q_buf       db 0x00,0x00,0x00,0x00,0x00,0x3B,0x66,0x66,

                      db 0x66,0x66,0x3E,0x06,0x06,0x0F,0x00,0x00

     font_r_buf       db 0x00,0x00,0x00,0x00,0x00,0x6E,0x3B,0x33,

                      db 0x30,0x30,0x30,0x78,0x00,0x00,0x00,0x00

     font_s_buf       db 0x00,0x00,0x00,0x00,0x00,0x3E,0x63,0x38,

                      db 0x0E,0x03,0x63,0x3E,0x00,0x00,0x00,0x00

     font_t_buf       db 0x00,0x00,0x08,0x18,0x18,0x7E,0x18,0x18,

                      db 0x18,0x18,0x1B,0x0E,0x00,0x00,0x00,0x00

     font_u_buf       db 0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x66,

                      db 0x66,0x66,0x66,0x3B,0x00,0x00,0x00,0x00

     font_v_buf       db 0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x36,

                      db 0x36,0x1C,0x1C,0x08,0x00,0x00,0x00,0x00

     font_w_buf       db 0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,

                      db 0x6B,0x6B,0x7F,0x36,0x00,0x00,0x00,0x00

     font_x_buf       db 0x00,0x00,0x00,0x00,0x00,0x63,0x36,0x1C,

                      db 0x1C,0x1C,0x36,0x63,0x00,0x00,0x00,0x00

     font_y_buf       db 0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x63,

                      db 0x63,0x63,0x3F,0x03,0x06,0x3C,0x00,0x00

     font_z_buf       db 0x00,0x00,0x00,0x00,0x00,0x7F,0x66,0x0C,

                      db 0x18,0x30,0x63,0x7F,0x00,0x00,0x00,0x00

     font___buf       db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

                      db 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00

     font_cnsl_buf    db 0x00,0x00,0x00,0x60,0x30,0x18,0x0C,0x06,

                      db 0x0C,0x18,0x30,0x60,0x00,0x00,0x00,0x00
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: