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:code
data segment
db "welcome to masm!"
db 00000010b
db 00100100b
db 01110001b
data ends
code segment
start: mov bx,data
mov ds,bx
mov bx,0b800h
mov es,bx
mov si,0 ;si用来指向字符
mov di,160*10 + 30*2 ;di用来指那块要设置的区域
mov bx,16 ;bx指向设置的颜色
mov dx,0
mov cx,3
showColumn:
push bx
push cx
push si
push di
mov cx,16
mov dh,ds:[bx]
showRow:
mov dl,ds:[si]
mov es:[di],dx
add di,2
inc si
loop showRow
pop di
pop si
pop cx
pop bx
add di,160
inc bx
loop showColumn
mov ax,4c00h
int 21h
code ends
end start
最后也算是千辛万苦
可以看出来, 我对汇编编程太弱了
各个寄存器使用的情况, 数据处理的常用手段, 完全不熟悉