Assembly 组装功能不会停止

Assembly 组装功能不会停止,assembly,infinite,Assembly,Infinite,我试图显示3条消息,其中一条使用函数。但该函数从未停止显示消息。 代码如下: .model small .data message db "Hello from function!$" message1 db "Hello from the court!$" message2 db "Hello from the second court!$" .code function proc mov dx,offset message; mov ah,9; int 21h; endp

我试图显示3条消息,其中一条使用函数。但该函数从未停止显示消息。 代码如下:

.model small
.data
message db "Hello from function!$"  
message1 db "Hello from the court!$" 
message2 db "Hello from the second court!$" 
.code
function proc
  mov dx,offset message;
  mov ah,9; 
int 21h;
endp


mov ax,@data;
mov ds,ax;

call function

lea dx,message1;
mov ah,9;
int 21;

call function

lea dx,message2;
mov ah,9;
int 21;

call function

mov ax,4c00h;
int 21h;

您错过了
功能结束时的
RET

function proc
  mov dx,offset message
  mov ah,9
  int 21h
  RET
endp

如果你不把
RET
放在这里,你会发现递归发生在多次调用
函数时(而堆栈没有超出)。

你错过了
函数末尾的
RET

function proc
  mov dx,offset message
  mov ah,9
  int 21h
  RET
endp

如果您不将
RET
放在这里,您会发现递归发生在多次调用
函数时(而堆栈没有超出)。

在调试器中逐步检查代码。它只有几行,所以不会花太长时间。在函数输出“Hello from function”消息后,会处理ret指令,并且执行不会从mov ax继续,@data会查找空的内存位置(NULL)。我正在使用emu8086进行模拟和执行。在调试器中逐步完成代码。它只有几行,所以不会花太长时间。函数输出“Hello from function”消息后,会处理ret指令,执行不会从mov ax继续,@data会查找空的内存位置(NULL)。我正在使用emu8086进行模拟和执行。您的代码从
函数开始。因此,
RET
返回操作系统。将
函数
移动到代码部分的末尾。您的代码从
函数
开始。因此,
RET
返回操作系统。将
功能
移动到代码部分的末尾。