汇编语言 实验10 子程序1.显示字符串
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start: mov dh,12
mov dl,30
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: mov al,0a0h
mul dh
add dl,dl
mov dh,0
add ax,dx
push ax
mov ax,0b800h
mov es,ax
pop ax
copy: push cx
mov bx,si
add bx,bx
add bx,ax
mov cl,ds:[si]
mov ch,0
jcxz sss
mov es:[bx],cl
inc bx
pop cx
mov es:[bx],cl
inc bx
inc si
jmp short copy
sss: pop cx
ret
code ends
end start
一开始总是无法退回DOS状态,后来发现是少了sss:处一个pop,ret的时候会把原来栈里CX的值弹回到IP中。因此一定要注意,子程序里压栈一定要循序全部出栈,不然无法正确返回。