5 assembly operating-system nasm osdev
这是一个低级系统问题.
我需要混合32位和16位代码,因为我试图从保护模式返回实模式.作为一些背景信息,我的代码是在GRUB引导之后这样做的,所以我没有任何讨厌的操作系统来告诉我我能做什么和不能做什么.
无论如何,我使用[BITS 32]和[BITS 16]与我的程序集告诉nasm它应该使用哪种类型的操作,但是当我测试我的代码时使用bochs看起来像某些操作bochs没有执行代码那样我写.看起来汇编程序正在坚持使用额外的东西0x66,0x67这使得bochs感到困惑.
那么,如何在同一个文件中混合32位和16位代码的情况下成功组合代码?有什么诡计吗?
你不是开玩笑说这是低水平的!
您是否检查了生成的操作码/操作数以确保 nasm 正确遵循您的 BITS 指令?还要检查以确保跳转目标正确 - 也许 nasm 使用了错误的偏移量。
如果这不是 nasm 中的错误,那么也许 bochs 中存在错误。我无法想象人们会经常从 32 位模式切换回 16 位模式。