首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NASM -在一个文件中使用多个位指令

NASM -在一个文件中使用多个位指令
EN

Stack Overflow用户
提问于 2014-02-21 18:50:35
回答 2查看 209关注 0票数 0

我正在编写第二阶段引导加载程序,其部分职责将是从16位实际模式进入32位保护模式。

我的代码有一些初始化实模式代码,一些实模式函数,保护模式代码和一些保护模式代码。下面是我所做的工作(实际代码的顺序相同):

  • 在启动第一个实模式函数之前添加了BITS 16
  • 在第一个保护模式函数之前添加了BITS 32
  • 在初始化实模式代码之前添加了BITS 16
  • 在初始化保护模式代码之前添加了BITS 32 (基本上是在mov cr0, eax之后用1对eax进行OR之后)。

这是行不通的,所以我阅读了NASM的手册,它说它没有必要使用这个指令。我把它们都删除了,代码也起作用了!

那么我的做法有什么错误呢?另外,我是不是把bitness和处理器模式搞混了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-28 05:04:37

BITS 32将跟踪mov cr0,因为这仍然是在实际模式下执行的。在执行BITS 32指令之前,不应该切换到JMP 0x08:ProtectedModeMain

票数 1
EN

Stack Overflow用户

发布于 2014-02-21 19:05:54

您的do需要位指令,除了最后一点外,您几乎显示了这一点:那时cpu仍在执行16位代码,直到重新加载CS (通常是远跳)。

如果幸运的话,如果您幸运的话,代码的16位部分可能会意外地作为32位进行组装,这取决于所使用的说明。

我非常肯定,如果NASM手册提到您不需要这个指令,那么它是指在整个过程中使用相同"bitness“的代码,以及在命令行上指定的代码(或由格式选择的代码)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21942784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档