关于汇编语言第二版实验9编程题目的问题
今天看到了第九章的实验,在屏幕中间显示有颜色的字。在看小甲鱼老师的视频前,自己写了一段代码 填充b872:0段得内容,结果发现,这段内容并没有改变,但是确实显示出有颜色的字来了,请问这个是为什么?如图:这段内容实际上是已经变化过了的。首先应该明白在80*25彩色字符模式下,显示器可以显示25行,每行80个字符。在显示每个字符的时候,实际上每个字符在es地址段是占用两个字节的,一个用来存放asc码,一个用来存放属性。回到问题上,假设b872:0-b872:1单元显示的是第一行的第一个字符,你在这一时刻屏幕上该位置对应的字符是e,那么该单元所存储的内容就是e的asc码及属性;这时你键入一个命令,当前屏幕向下移动一行,那么此时该位置对应的字符可能是另外一个字符,所以存储的内容会发生变化。你可以在第一个循环中通过将b872:0单元入栈,然后在弹出来,观察其值,来判定它到底是否发生变化 按照道理来说的话,第一个应该为77才对啊!(77为‘w’的ascii码) 相关代码也贴一下把 1971827035 发表于 2013-4-15 16:05 static/image/common/back.gif
相关代码也贴一下把
datasg segment
db 'welcome to masm!'
datasg ends;
codesg segment
start:
mov ax,datasg;
mov ds,ax;
mov bx,0b872h;内存地址空间中,b800h--bfffh共32kb的空间中,为80*25彩色字符模式的显示缓冲区,在这个地址写数据,写入的内容就会立即显示出现在显示器上
mov es,bx;
mov bx,0;
mov si,0;
mov cx,16;
s:mov al,ds:;
mov es:,al;
;
mov al,02h
mov es:,al
add bx,1;
add si,2
loop s;
mov ax,4c00h
int 21h
codesg ends;
end start; 强烈支持楼主ing…… 1971827035 发表于 2013-4-16 10:39 static/image/common/back.gif
这段内容实际上是已经变化过了的。首先应该明白在80*25彩色字符模式下,显示器可以显示25行,每行80个字符。 ...
请问下 这段地址的内容为什么会变呢?我直接mov给 b872:0 这些地址赋值 也没有任何变化。我是不是可以猜测,在这些缓冲区里面赋值之后马上就会在屏幕上作出相应的显示,显示完毕了之后,我输入命令行查看那段区域的时候, 这些缓冲区的数据就会被dos系统(dos默认就是黑底白字)以黑底白色的命令行给填充了。也就是说,给缓冲区一赋值,马上就显示。显示是一个即时(立刻)显示的行为。可以这么说吗? 我输入命令的时候,那个绿色的字已经跑到第三行了,也就是说 第12行的数据已经变成了黑底白字了。明白了。
页:
[1]