ASM:在真机上使用 int21h 时遇到问题

ASM : Trouble using int21h on real machine

我想在 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 来读取键盘。