我最近开始编写装配程序。我的问题是我不知道如何结束程序。我写了下面的代码,在我添加之前,它没有显示所需的输出
jmp finish
在第二个函数调用之后。我不明白为什么这个程序没有完成它自己的工作。我真的很感激你的解释。
Data_segment_name segment para
Data_segment_name ends
Stack_segment_name segment para stack
dw 16 dup(0) ;define your stack segment
Stack_segment_name ends
Code_segment_name segment
Main_prog proc far
assume SS:Stack_segment_name,CS:Code_segment_name,DS:Data_segment_name
mov AX,Data_segment_name ;load the starting address of the data
mov DS,AX ; segment into DS reg.
call cls
call draw1
;jmp finish
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cls proc near
mov ax,0b800h
mov es,ax
mov ax,0720h
mov di,0
mov cx,2000
rep stosw
ret
cls endp
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
draw1 proc near
push ax
mov di,160*9+40*2
mov ax,0b800h
mov es,ax
mov ax, 1f2ah
stosw
cld
pop ax
ret
draw1 endp
finish:
mov ax,4c00h ; exit program
int 21h
Main_prog endp
Code_segment_name ends
end Main_prog
答案 0 :(得分:0)
可能最好的解决方案是将finish
代码放在主模块中,这样就可以从主模块中设置初始值,调用子程序和退出。
否则,当第一个子程序“返回”时,你的代码只会从主模块“掉进”到子程序中并丢失,或者是段错误。