主题:字符显示函数show_str (附, 编成背景知识)
函数
名称: show_str
功能: 在指定的位置, 用指定的颜色, 显示一个用 0 结束的字符串
参数: (ch) = 行号( 取值范围 2 ~ 24 ), (dl) = 列号( 取值范围
0 ~ 79) , (cl) = 颜色, ds:si 指向字符串首地址
返回: 无
编程背景知识:
80 * 25 彩色字符模式显示缓冲区(以下简称显示缓冲区 )的结构:
内存地址空间中, B8000H ~ BFFFFH 共 32KB 的空间, 为 80 * 25 彩色模式的显示缓冲区.向这个地址空间写数据,写入的内容将立即出现在显示器上.
在 80 * 25 彩色模式下, 显示器可以显示 25 行, 每行 80 个字符, 每个字符可以有 256 种属性 ( 背景色, 前景色, 闪烁, 高亮 等组合信息 ).
这样, 一个字符在显示缓冲区要占两个字节, 分别存放 字符的 ASCII 码和属性. 80 * 25 模式下, 一屏的内容在显示缓冲区共占 4000 个字节.
显示缓冲区分为 8 页, 每页 4KB ( 约 4000B ), 显示器可以显示任意一页内容. 一般情况下, 显示第 0 页的内容. 也就是说, 通常情况下, B8000 ~ B8F9F 中的 4000 个字节的内容将出现在显示器上.
在一页显示缓冲区中:
偏移 000 ~ 09F 对应显示器上的第 1 行( 80个字符, 占 1 60 个字节 );
偏移 0A0 ~ 13F 对应显示器上的第 2 行;
偏移 140 ~ 1DF 对应显示器上的第 3 行.
依此类推, 可以偏移 F00 ~ F9F 对应显示器上的第 25 行.
在一行中, 一个字符占 2 个字节的存储空间( 一个字 ), 低位字节存储字符的 ASCII 码, 高位字节存储字符的属性. 一共 80 个字符, 占 160 个字节.
即在一行中:
00 ~ 01 单元对应显示器上的第 1 列;
02 ~ 03 单元对应显示器上的第 2 列;
04 ~ 05 单元对应显示器上的第 3 列;
依此类推, 可知, 9E ~ 9F 单元对应显示器上的第 80 列。
具体字节属性请有兴趣者调试得到。
谢谢。。。
名称: show_str
功能: 在指定的位置, 用指定的颜色, 显示一个用 0 结束的字符串
参数: (ch) = 行号( 取值范围 2 ~ 24 ), (dl) = 列号( 取值范围
0 ~ 79) , (cl) = 颜色, ds:si 指向字符串首地址
返回: 无
编程背景知识:
80 * 25 彩色字符模式显示缓冲区(以下简称显示缓冲区 )的结构:
内存地址空间中, B8000H ~ BFFFFH 共 32KB 的空间, 为 80 * 25 彩色模式的显示缓冲区.向这个地址空间写数据,写入的内容将立即出现在显示器上.
在 80 * 25 彩色模式下, 显示器可以显示 25 行, 每行 80 个字符, 每个字符可以有 256 种属性 ( 背景色, 前景色, 闪烁, 高亮 等组合信息 ).
这样, 一个字符在显示缓冲区要占两个字节, 分别存放 字符的 ASCII 码和属性. 80 * 25 模式下, 一屏的内容在显示缓冲区共占 4000 个字节.
显示缓冲区分为 8 页, 每页 4KB ( 约 4000B ), 显示器可以显示任意一页内容. 一般情况下, 显示第 0 页的内容. 也就是说, 通常情况下, B8000 ~ B8F9F 中的 4000 个字节的内容将出现在显示器上.
在一页显示缓冲区中:
偏移 000 ~ 09F 对应显示器上的第 1 行( 80个字符, 占 1 60 个字节 );
偏移 0A0 ~ 13F 对应显示器上的第 2 行;
偏移 140 ~ 1DF 对应显示器上的第 3 行.
依此类推, 可以偏移 F00 ~ F9F 对应显示器上的第 25 行.
在一行中, 一个字符占 2 个字节的存储空间( 一个字 ), 低位字节存储字符的 ASCII 码, 高位字节存储字符的属性. 一共 80 个字符, 占 160 个字节.
即在一行中:
00 ~ 01 单元对应显示器上的第 1 列;
02 ~ 03 单元对应显示器上的第 2 列;
04 ~ 05 单元对应显示器上的第 3 列;
依此类推, 可知, 9E ~ 9F 单元对应显示器上的第 80 列。
具体字节属性请有兴趣者调试得到。
谢谢。。。