1 assume cs:code, ds:data 2 data segment 3 db 'welcome to masm!', 0 4 data ends 5 6 code segment 7 start: mov ah, 8 8 mov al, 3 9 mov cl, 2 10 mov ax, data 11 mov ds, ax 12 mov si, 0 13 call show_str 14 15 mov ax, 4c00h 16 int 21h 17 18 ; 名称:show_ptr 19 ; 功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串。 20 ; 参数:(dh)=行号(1~25), (dl)=列号(1~80) 21 ; (cl)=颜色, ds:si指向字符串的首地址 22 show_str: push cx 23 push si 24 25 mov al, 0A0h ; 每行是80*2 26 27 dec dh ; 行号在显存的下标从0开始 28 mul dh ; (ax) = (al)*(dh) 29 30 mov bx, ax 31 32 mov al, 2 33 mul dl 34 sub ax, 2 ; 行号在显存的下标从0开始 35 36 add bx, ax ; bx存放的是行和列的偏移地址 37 38 mov ax, 0b800h 39 mov es, ax ; es中存放的是显存的第0页(共0-7页)的起始段地址 40 41 mov di, 0 ; di指向显存的偏移地址 42 43 44 mov al, cl ; al保存颜色 45 46 mov ch, 0 47 s: mov cl, ds: [si] 48 jcxz ok 49 mov es:[bx][di], cl ; 偶数地址存放字符 50 mov es:[bx][di+1], al ; 奇数地址颜色属性 51 52 inc si 53 add di, 2 54 jmp short s 55 56 ok: pop si 57 pop cx 58 ret 59 60 code ends 61 end start