调试结果:http://www.asmedu.net/blog/user/bigimg.jsp?neighborId=20202&pic=post_1240031404203.jpg
assume cs:code
code segment
s1: db 'Good,better,best,'
s2: db 'Never let it rest,'
s3: db 'Till good is better,'
s4: db 'And better,best.'
s: dw offset s2-offset s1,offset s3-offset s2,offset s4-offset s3,offset s-offset s4 ;存放每段字符的长度
row: db 2,4,6,8
r: db 0 ;存放列号
start: mov ax,cs
mov ds,ax
mov bp,offset s1 ;取第一个字符的内存地址
mov di,offset s ;取每段字符的长度的内存地址
mov si,offset row ;作为显存中行指针的内存地址
mov cx,4
ok: push cx
mov byte ptr ds:[si+4],10
mov cx,[di] ;所写字符串的长度
l: push cx
mov bh,0 ;置光标
mov dh,[si] ;光标的行号
mov dl,byte ptr ds:[si+4] ;光标的列号
mov ah,2
int 10h
mov ah,9 ;在光标处写字符
mov al,ds:[bp] ;字符
mov bl,4ah ;字符颜色属性(红底高亮绿色)
mov cx,1 ;重复次数
inc byte ptr ds:[si+4] ;光标的列号加1
int 10h
inc bp ;取下一个字符
pop cx
loop l ;cx!=0显示下一个字符
pop cx
inc si ;换光标的行号
add di,2 ;换所写字符串的长度
loop ok
mov ax,4c00h
int 21h
code ends
end start |