.modelsmall
.datamsg
db
'welcome to masm!',0
.stack
.code
assumecs:@code,ds:@data,ss:@stackstart:cld
mov
ax,@data
mov
ds,ax
mov
si,offset msg
mov
dh,8
mov
dl,3
mov
cl,2
mov
ch,0
push
ds
push
si
push
dx
push
cx
call
show_str
add
sp,8
mov
ax,4c00h
int
21hshow_str:
mov
bp,sp
push
ds
push
es
mov
dx,[bp+4] ;取屏幕目标位置
lds
si,[bp+6] ;取字符串地址
mov
ax,0b800h ;屏幕缓冲区段值
mov
es,ax
mov
al,160
;每行占160字节
mul
dh
xor
dh,dh
shl
dx,1
add
ax,dx
;得到屏幕上字符位置的起始地址
mov
di,ax
;放到DI中
cld
mov
ah,[bp+2] ;取颜色参数@@:
lodsb
or
al,al
;字串末尾?
jz
@f
stosw
jmp
@b@@:
pop
es
pop
ds
ret
end
start 注意:因为字符是通过直接访问VIDEO RAM来显示的,所以须在MSDOS下执行才看到。windows中可能无法正确显示。 |