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