汇编语言显示缓存区的内容怎么显示
发布网友
发布时间:2022-05-01 06:22
我来回答
共1个回答
热心网友
时间:2022-06-25 12:25
首先你要知道,当你把字符对应的ASCII码写入显示缓冲区的时候它就会被屏幕所显示出来。
显示缓冲区一共有8页(这里只用第一页就够了,所以我就提一下)
每页的可以存储2000个字,一个字的高位存放的是需要显示的字符,低位存放的是字符的颜色
也就是说一页最多显示2000个字符了 比如说 0位:41,1位:02 这里41所在的位是0位(偶数位)所以它将被转换成对应的字符显示在屏幕上 而紧跟0位后面的是奇数位(1位),它里面的内容会转换成控制0位字符和背景等颜色信息,以后的都是这样,比如第2位和第3位配对,第4位和第5位配对,第4位是字符信息,第5位就是控制第4位字符信息的颜色。
而每行可以放80个字,也就是80个字符(字符位+颜色位=160个字节),而每页又可以显示25行
我们可以用 行数*160=内存中相对于行数所在的地址(因为一行是160个字节,所以乘以160)
我们可以用 列数*2=内存中相对于列数所在的地址 (因为每行用2个字节分别存放字符和颜色)
如果说用SI存放行数,DI存放列数,而你需要在屏幕的第13行40列显示数据的时候,它的偏移地址就是:si*160+di*2(这个是字符存放的位置),如果你要设置颜色的话 只要向后面偏移一位就可以了:si*160+di*2+1
说了这么多,我来写个具体的给你看看吧,不会的看我写的备注
需要向屏幕的 13行40列显示字符X,颜色为(黑底绿色)
assume cs:code
code segment
start:
mov bx,0b800h
mov es,bx ;用ES段存放显示缓冲区
mov bx,13*160+40*2 ;在编译的时候编译器会帮你计算出显示的偏移地址
mov es:[bx],'X' ;在显示缓冲区的内存中写入字符'X'的ascii码
mov es:[bx+1],2h ;这里向后移一位,控制‘X’的颜色
mov ax,4c00h
int 21h
code ends
end start
回答完毕 QQ544980123 一起交流