Assembly 组装功能不会停止
我试图显示3条消息,其中一条使用函数。但该函数从未停止显示消息。 代码如下: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
.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
返回操作系统。将功能
移动到代码部分的末尾。