|
楼主 |
发表于 2012-3-10 17:36:34
|
显示全部楼层
assume cs:code,ds:data,ss:stack
data segment
db 'Welcome To Masm!'
dw 0,0
data ends
stack segment
db 16 dup(0)
stack ends
code segment
start:mov ax,data ;这一大段都是初始化
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov ax,0b800h
mov es,ax
mov si,0
mov di,0
mov dh,10;行所在位置可以改变
mov dl,2;列所在位置可以改变
mov bl,9;颜色控制字
mov ds:[16],dh
mov cx,ds:[16] ;通过内存把DH赋给CX用于控制循环
mov ax,0
call hang ;计算行
mov ds:[17],dl; push ip
mov cx,ds:[17];通过内存把DH赋给CX用于控制循
mov ax,0
call lie ;计算列
;push mov cx,16的ip值
mov cx,16 ;用于控制16个字符循环否则在最后只显示!
call show_str
mov ax,4c00h ;push ip
int 21h
show_str: push cx ;push cx
mov al,[si]
mov es:[bp+di],al
mov es:[bp+di+1],bl
inc si
add di,2 ;这个指令非常重要
pop cx ;出栈执行(cx)=(cx)-1
loop show_str
ret ;pop ip
hang: add ax,0a0h;用加法表示乘法
loop hang
mov bp,ax
ret ;pop ip
lie: add ax,2 ;用加法表示乘法
loop lie
sub ax,2
mov di,ax
ret ;pop ip
code ends
end start
|
|