21,459
社区成员
发帖
与我相关
我的任务
分享
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start:
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 di,0
mov bl,cl
mov ch,0
mov cl,dh
s1:
add ax,160
loop s1
mov cl,dl
s2:
add ax,2
loop s2
mov es,ax
s3:
mov ah,bl
mov al,[di]
mov es:[si],ax
mov cl,[di]
jcxz ok
inc di
add si,2
jmp short s3
ok:
ret
code ends
end start
;--------------------------------------------------------------------------------------------------------------------
; Nmae: 1.asm
;
; Description: 在指定的位置,用指定的颜色,显示一个用0结束的字符串.
;
; 子程序描述: (dh) = 行号(取值范围0-24).
;
; (dl) = 列号(取值范围0-79).
;
; (cl) = 颜色,ds:si指向字符串的首地址.
;
; Date: 2007-9-3
;--------------------------------------------------------------------------------------------------------------------
assume cs:code
data segment
db 'welcome to masm!', 0
data ends
code segment
start:
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 bx, 0B800h
mov es, bx
mov al, 0A0h
dec dh
mul dh ;计算行地址
mov di, ax ;保存偏移地址
mov al, 2h
dec dl
mul dl ;计算列地址
add di, ax ;计算行和列的地址
write:
mov bl, [si] ;读字符串
cmp bl, 0
jz return ;字符为零则表示显示完
mov byte ptr es:[di], bl ;将字符写入显存
mov byte ptr es:[di+1], cl ;写入字符的颜色
inc si ;下一个字符
add di, 2 ;字符的下一个偏移地址
jmp write
return:
ret
code ends
end start