lab92002.3.6
编程,在屏幕中间分别显示绿色, 绿底红色, 白底蓝色的字符串 ‘welcome to masm !’
材料分析:
内存 B8000H ~ BFFFFH共 32KB 的空间 , 为 80 X25 彩色字符模式显示缓冲区. 向这个地址空间写入数据, 写入的内容会出现在显示器上
这种模式下, 可以显示 25行 *80 个字符 . 每个字符有 256种 属性 (那就是用一个字节来控制它的各种显示属性喽)
显示缓冲区分为 8 页 ,每页 4kb , 显示器可以显示任意一页的内容.
默认情况下显示第一页, 也就是 B8000H ~ B8F9FH 中的4000个字节
偏移 000 ~ 09F 对应显示器第一行(80个字符160字节)
0A0 ~ 13F 对应显示器上的第2行
140~1DF对应第三行
在一行中,一个字符占两个字节, 低位字节存储ASCII, 高位字节存储字符的属性
assume cs:codedata segmentdb "welcome to masm!"db 00000010bdb 00100100bdb 01110001bdata endscode segmentstart: mov bx,datamov ds,bxmov bx,0b800hmov es,bxmov si,0 ;si用来指向字符mov di,160*10 + 30*2 ;di用来指那块要设置的区域mov bx,16 ;bx指向设置的颜色mov dx,0mov cx,3showColumn:push bxpush cxpush sipush dimov cx,16mov dh,ds:[bx]showRow:mov dl,ds:[si]mov es:[di],dxadd di,2inc siloop showRowpop dipop sipop cxpop bxadd di,160inc bxloop showColumnmov ax,4c00hint 21hcode endsend start
最后也算是千辛万苦
可以看出来, 我对汇编编程太弱了
各个寄存器使用的情况, 数据处理的常用手段, 完全不熟悉
