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

本文介绍了一个用于屏幕字符显示的程序,详细解释了disp_letter_font函数的工作原理及其输入参数。此外,还提供了从font_0_buf到font_cnsl_buf的一系列字符点阵数组,这些数组构成了字符的视觉表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



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

 

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]                         ;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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值