assume cs:code,ds:data data segment db 'Welcome to masm!', 0 data ends code segment start: comment* *comment mov dh, 8 mov dl, 3 mov cl, 2 mov ax, data mov ds, ax mov si, 0 call show_str mov ax, 4c00h int 21h show_str: ; 段地址 mov ax, 0b800h mov es, ax ; 计算偏移 8行 3 列的字节数, 暂存在bx中 mov ah, 0 mov al, 160 mul dh mov bx, ax mov ah, 0 mov al, 2 mul dl add bx, ax ; dx可用了 mov dl, cl ;用 dl 缓存 cl=2, cx 可用了 calc_len: mov cx, [si] inc ax inc si inc cx ;!!! 减一 loop calc_len dec ax ;需要减一, 此处省去减判断 ax >= 0 mov cx, ax mov di, 0 mov si, 0 mov ah, dl ;颜色 move_str: mov al, [si] mov word ptr es:[di+bx], ax inc si add di, 2 loop move_str ret code ends end start