assume cs:codesg, ss:stacksg, ds:datasg
ATTR_BLUEF EQU 00000010B ;绿色
ATTR_REDF_GREENB EQU 00100100B ;绿底红色
ATTR_BLUEF_WHITEB EQU 01110001B ;白底蓝色
datasg segment
db 'welcome to masm!'
db ATTR_BLUEF
db ATTR_REDF_GREENB
db ATTR_BLUEF_WHITEB
datasg ends
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
buff segment
db 4000 dup (0)
buff ends
codesg segment
start:
mov ax, datasg ;用于datasg中数据寻址
mov es, ax
mov ax, 0B800H ;用于显示缓冲区数据寻址
mov ds, ax
mov ax, stacksg ;创建堆栈
mov ss, ax
mov sp, 10h
mov bx, (11 * 0a0h) ;缓冲区第12行起始地址
mov cx, 3 ;12-14行
mov bp, 0
line:
push cx
mov dl, es:10h[bp] ;dl保存该行属性
mov si, 0h
mov di, 0h
mov cx, 10h ;33-48列
column:
mov al, es:0h[di]
mov [bx][64 + si], al ;数据
mov [bx][64 + si + 1], dl ;属性
inc di
add si, 2
loop column
add bx, 0a0h ;下一行
inc bp
pop cx
loop line
;拷贝出当前25*80缓存,即使刷新界面,仍能检查缓存。
check:
mov ax, buff
mov es, ax
mov ax, 0B800H
mov ds, ax
mov bx, 0
mov cx, 2000
s:
mov ax, [bx]
mov es:[bx], ax
add bx, 2
loop s
mov ax, 4c00h
int 21h
codesg ends
end start |