Assembly 我的装配程序没有';他似乎没有回来

Assembly 我的装配程序没有';他似乎没有回来,assembly,x86,stack,interrupt,real-mode,Assembly,X86,Stack,Interrupt,Real Mode,我正在尝试编写一个作为引导加载程序运行的代码。它应该打印“输入您的姓名”,然后读取用户名,然后继续执行其他操作,但我无法打印“输入您的姓名!” 当我运行此代码时,它会打印“输入您的姓名!”,但无论我在say_hello标签下的下一条指令是什么,似乎都不起作用。在本例中,我尝试下一步打印“测试消息”,但只打印“输入您的姓名!”在启动时打印 我检查了print过程没有陷入无限循环。在ret指令之前,我试着从ret\p标签打印一个字符,结果成功了。所以我猜我在堆栈上有一些我不知道的东西?但我不知道这是

我正在尝试编写一个作为引导加载程序运行的代码。它应该打印
“输入您的姓名”
,然后读取用户名,然后继续执行其他操作,但我无法打印
“输入您的姓名!”

当我运行此代码时,它会打印“输入您的姓名!”,但无论我在
say_hello
标签下的下一条指令是什么,似乎都不起作用。在本例中,我尝试下一步打印
“测试消息”
,但只打印
“输入您的姓名!”在启动时打印

我检查了
print
过程没有陷入无限循环。在
ret
指令之前,我试着从
ret\p
标签打印一个字符,结果成功了。所以我猜我在堆栈上有一些我不知道的东西?但我不知道这是从哪里来的

org 0x7c00


jmp 0:start ;zero the cs register

start:
  mov ax, cs
  mov ds, ax
  mov es, ax
  mov ss, ax
  mov sp, 0x8000 ;initialize stack

jmp 0:say_hello

; in register al procedure expects argument - character to print
print_char:
  mov ah, 0xe
  int 0x10
  hlt
  ret

; in register ax procedure expects argument - buffer text to print
print:
  mov bx, ax
  mov al, [bx]
  cmp al, 0x0
  je ret_p
  call 0:print_char
  inc bx
  mov ax, bx
  jmp 0:print
ret_p:
  ret

say_hello:
  mov ax, WELCOME_MSG
  call 0:print
  mov ax, TEST_MSG
  call 0:print

section .data

WELCOME_MSG: db 'Enter your name!', 0xd, 0xa, 0x0
TEST_MSG: db 'Test message', 0x0;, 0xd, 0xa, 0x0
BUFFER: times 64 db 0x0
另外,我用minix3在qemu上运行代码

p.S.2不要担心我的引导加载程序缺少分区表和
0xaa55
结束,我将编译后的代码写入磁盘的前446字节