|
发表于 2012-5-8 21:12:30
|
显示全部楼层
assume cs:code,ds:data,ss:stack
data segment
db 'welcome to masm!',0
data ends
stack segment
dw 8 dup (0)
stack ends
code segment
start:
mov dh, 8h ;显示的行号
mov dl, 3h ;显示的列号
mov cl, 2h ;显示的颜色
mov ax, data ;将DATA定义数据段
mov ds, ax
mov ax, stack
mov ss, ax
mov sp, 16
mov si, 0
call show_str
mov ax, 4c00h
int 21h
show_str: mov ax, 0b800h
mov es, ax
mov al, 160 ;计算行偏移字节数
sub dh, 1
mul dh
mov di, ax ;将行偏移字数给DI
mov al, 2 ;计算列偏移字节数
mul dl
sub ax, 2
add di, ax ;计算显存偏移地址
mov bl, cl ;显示的颜色给BL
mov cl, [si] ;将DATA的第一个字符给CL
mov ch, 0 ;给CH一个零
s: jcxz s1
mov es:[di], cl
mov es:[di+1], bl
add di, 2
inc si
mov cl, [si]
mov ch, 0
jmp short s ;loop会将cx减一,而cl又放字符 ,这会使你无法知道loop什么时候终止(我个人不建议用cl放字符)
s1:ret ; 少了返回
code ends
end start
|
|