16位汇编实现hello world!
Contents
最近在学汇编,有一个实验是用16位汇编实现字符打印,记录下实验过程
0x01基础知识
输出打印,实际上就是往显存区写数据,将要显示的内容写入显存区空间
内存地址中B8000H~BFFFFH共32KB空间,为80*25彩色字符模式的显示缓冲区,向这个地址空间写入数据,写入的内容将立刻出现在显示器上
在80*25彩色字符模式下,显示器一屏可以显示25行,每行80个字符,分别存放字符的ASCII码和属性
一个字符在显示缓冲区中就要占用两个字节,一屏的内容在显示缓冲区总共占4000个字节
偏移为
000~9F 第一行
0A0~13F 第二行
140~1DF 第三行
N160~(N+1) 160-1 第N行
在显存缓冲区中,偶地址存放字符,奇地址存放字符的颜色属性
在一行中,一个字符占两个字节的存储空间(一个字),低位字节存储字符的ASCII码,高位字节存储字符的属性。一行有80个字符,占160个字节
在一行中:
00~01单元对应显示器上的第1列
02~03单元对应显示器上的第2列
04~05单元对应显示器上的第3列
一屏幕为25行,80列
在屏幕中间输出为,13行,40列,字符串长度为12,正中间输出为
(40*2)-(12)=
要写入显存的偏移地址为
160*13+68=2148=864H
B800:842H
0x02程序代码
1 | assume cs:code |
致谢
汇编语言(第3版)王爽