Assembly ASM:在真实机器上使用int21h时出现问题

Assembly ASM:在真实机器上使用int21h时出现问题,assembly,x86,bootloader,Assembly,X86,Bootloader,我想在ASM中输入一个字符,将其与已定义的字符进行比较,如果它们相同,则打印一条消息;如果它们不相同,则重试 问题是我的代码在emu8086上工作,但在VM上不工作: mdp DB 'c$' equal : mov ah, 1h int 21h cmp al,mdp jne equal 在emu8086上,它等待用户按键并按enter键,在VM(作为引导加载程序)上,我不能按任何键。在引导加载程序中不能使用MS-DOS服务(INT 21h)。MS-DOS是一种

我想在ASM中输入一个字符,将其与已定义的字符进行比较,如果它们相同,则打印一条消息;如果它们不相同,则重试

问题是我的代码在emu8086上工作,但在VM上不工作:

mdp DB 'c$'
equal : 

       mov ah, 1h
       int 21h

cmp al,mdp
jne equal

在emu8086上,它等待用户按键并按enter键,在VM(作为引导加载程序)上,我不能按任何键。

在引导加载程序中不能使用MS-DOS服务(INT 21h)。MS-DOS是一种操作系统,如Linux或Windows。就像在Linux加载之前不能使用Linux服务一样,在加载之前也不能使用MS-DOS服务


在引导加载程序中,您只能使用BIOS服务(或直接访问硬件)。您可以使用BIOS服务INT 16h,AH=00h读取键盘。

询问原始作者(即Sebatian Plotz本人)
INT 21h
是DOS API的一部分(也在Windows中实现)。你不能在操作系统还没有加载的引导加载程序中使用它。谢谢,我5分钟前发现了它。我的问题解决了,谢谢!