assume cs:code,ds:datasg,ss:stack
datasg segment
db "welcome to masm!";十六个字符
db 02H,24H,71H
datasg ends
stack segment
db 16 dup(0)
stack ends
;绿字02h,绿底红字24h,白底蓝字71h
;25行,所以要从0开始,我们要用到的是11,12,13行。
;偏移量为11*160=1760,12*160=1920,13*16=2080
;我们需要放进16+16个字符,分别是welcome to masm!和颜色属性
;所以列偏移量为(160-16*2)/2 = 64
;所以偏移依次为:1824,1984,2144
code segment
start:
mov ax,datasg
mov ds,ax;
mov ax,0b800h
mov es,ax;
mov ax,stack
mov ss,ax
mov sp,10H;
mov bx,0
mov si,16
mov di,1824;11行64列开始11*160+(160-16(wel...字符)+16(效果字符))/2=1824
;11*160-(16+16)/2
mov cx,3
s0:
push cx
mov bx,0
mov cx,16
s1:
mov ah,byte ptr ds:[si]
mov al,byte ptr ds:[bx]
mov word ptr es:[di],ax
inc bx
add di,2
loop s1
inc si
add di,128;转移到下一行
pop cx
loop s0
mov ax,4c00h
int 21H
code ends
end start