assume cs:codesg, ds:datasg,ss:stacksg
datasg segment
db 'Welcome To Qzone'
db 00000010b,00100100b,01110001b
datasg ends
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
codesg segment
start:
mov ax,datasg ;设置段寄存器入口
mov ds,ax
mov si,0
mov bx,0
mov dx,16
mov ax,stacksg ;设置堆栈入口
mov ss,ax
mov sp,16
mov ax,0b800h ;设置缓冲区段地址
mov es,ax
mov bx,9*160 ;设置起始位置字符打印
mov cx,3 ;外层循环控制复制的行数
s: push cx
mov di,64
mov si,0
mov cx,16 ;内层循环16次控制复制字符的个数
s1: mov al,ds:[si]
mov es:[di+bx],al ;复制字符到缓冲区
push bx ;从数据段复制属性,并保护bx内容
mov bx,dx
mov al,[bx]
pop bx
mov es:[di+bx+1],al ;复制属性到缓冲区
inc si
add di,2
loop s1
add bx,160 ;每行增加160字节
inc dx
pop cx
loop s
mov ax,4c00h
int 21h
codesg ends
end start |