系统的简单注解 - 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
该文件用于在屏幕上显示字符。
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
相关文章推荐
- 系统的简单注解 - 9 06_color.asm文件
- 系统的简单注解 - 4 01_interrupt.asm文件
- 系统的简单注解 - 7 04_process.asm文件
- 系统的简单注解 - 6 03_timer.asm文件
- 系统的简单注解 - 2 core.asm文件
- 系统的简单注解 - 13 10_keyboard.asm文件
- 系统的简单注解 - 5 02_mouse.asm文件
- 系统的简单注解 - 11 08_bs16.asm文件
- 09 12 11 Java Web学习笔记-Jsp简单总结
- SE高阶(12):Annotation(注解)的简单了解和使用
- 系统的简单注解 - 3 00_header.asm文件
- 系统的简单注解 - 15 键盘扫描码汇总
- 使用EF6和MVC5实现一个简单的选课系统--EF6的弹性链接和命令拦截(4/12)
- 使用EF6和MVC5实现一个简单的选课系统--使用EF6更新相关数据(8/12)
- 使用EF6和MVC5实现一个简单的选课系统--使用EF6处理并发操作(10/12)
- 使用EF6和MVC5实现一个简单的选课系统--使用EF6异步编程模式和存储过程(9/12)
- 使用EF6和MVC5实现一个简单的选课系统--排序、过滤和分页(3/12)
- 12-简单的系统救援模式
- 使用EF6和MVC5实现一个简单的选课系统--使用EF6实现基本的GRUD功能(2/12)
- 使用EF6和MVC5实现一个简单的选课系统--启航(1/12)