直接看代码:
assume cs:code,ds:data,ss:stack
data segment
db "welcome to masm!"
; 绿字02h,绿底红字24h,白底蓝字71h
db 02h,24h,71h
; 25行,从0开始,算出中间为11,12,13行。偏移量为11*160=1760,12*160=1920,13*16=2080
; 16个字符,加上颜色属性,算出列偏移量为(160-16*2)/2 = 64
dw 1824,1984,2144
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start: mov ax,data
mov ds,ax
mov ax,0b800h
mov es,ax
mov cx,3
mov di,0 ;每行的初始地址的递增量,每个循环加2
mov si,0 ;每次的颜色属性的递增量,每个循环加1
s: push cx
push di
push si
mov bx,[19+di] ;取初始地址,19是data数据前两行占的大小
mov bp,[16+si] ;取颜色,16是data数据前一行行占的大小
mov di,0 ;循环加入字符的递增量,每次加1
mov si,0 ;写入内存时字符递增量,每次加2
mov cx,16
s0: mov al,[di]
mov es:[bx+si],al
mov al,[bp]
mov es:[bx+si+1],al
inc di
add si,2
loop s0
pop si
pop di
pop cx
inc si
add di,2
loop s
mov ax,4c00h
int 21h
code ends
end start
win7的话要装一个dos才能运行看到效果,我这篇文章有介绍怎么安装: