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字节