在现代x86处理器上运行boot-loader程序时,处理器将以实地址模式运行。其指令流水线功能是否会在实模式下运行?在真实模式下运行时,现代x86处理器上是否提供流水线/ OoOE?
回答
是的,现代微体系结构中的乱序核心运行基本相同,无论模式为。大部分的区别在于解码器。请参阅Agner Fog's microarch pdf和x86标记wiki中的其他链接,了解现代CPU实际在内部工作的详细信息。
它可能需要额外的硅在16位模式下表现不同,因为它非常类似于32位模式寻呼禁用,但使用不同的默认地址尺寸和操作数大小。
我读过,AMD的CPU是稍微慢一些,当段具有非零基地。 (或者我想在16位模式:当段寄存器本身设置为非零值,因为在16位模式,他们直接使用,而不是被选择用于描述符)
记住many common 16bit idioms like loop
are terrible 。
此外,局部寄存器放缓可以轻松地与乱序执行干扰,如果你不小心。英特尔P6系列和SnB系列CPU分别对部分寄存器进行重命名,因此写入AX不会错误地依赖EAX/RAX的全部内容。在SnB之前在CPU上稍后合并时可能会出现停顿,或者在Haswell之前仅在SnB上出现轻微减速。
所有其他微体系结构的治疗mov ax, 5
为eax
读 - 修改 - 写,所以它不会打破的ax
旧值依赖链。如果你不小心,这可能是无序执行的一个大问题。
阅读昂纳雾手册,以了解更多信息。
16位寻址模式可能表现不好,我忘了。 32位代码不需要它们很快,64位代码根本不能使用16位地址。 (在64位代码中的地址大小前缀意味着地址大小= 32位。)
VEX编码指令(包括BMI2整数指令like pext
)不是在实模式下可用。 This Intel forum topic表明可能是由于现有软件(NTVDM)使用机器码作为陷阱进入保护模式。 (即与VEX使用的LDS/LES相同的非法操作数)。使VEX编码的指令仍然生成#UD
因此对于向后兼容性是重要的。
SSE仍处于实模式下可用,不过,if you enable it with the right CR setting。
时,即使我已经知道这个问题的答案,我总是会从阅读你的答案中学到很多东西。 :)例如,我不知道VEX编码指令在实模式下不可用。 –
@CodyGray:如果答案没有超出相关信息的范围,那么这将是一个相当无聊的地方:D。我一直想深入了解为什么一些指令在实时模式下暂时不可用。指令集手册记录了某些BMI/BMI2整数指令的事实,但不适用于像“VPBLENDD”这样的AVX2指令。直到在写这个答案时终于搜索,我才确定。我想知道它是否与16位操作数大小无关,忽略操作数大小前缀与需要晶体管。 –
0xc4 0xc4 0x60(Vm版本号)和0xc4,0xc4,0x58在NTVDM之前在90年代中期在16位代码中很常见。他们通常被我们这些人用来确定我们是否在SoftPC中运行。当时他们被稀疏地记录为BOP代码。在90年代中期,微软用NT设备驱动程序套件半记录了它们。这并不令人惊讶,因为NTVDM基于SoftPC。我拿出旧的NT DDK CD,可以在文件ISVBOP.h中找到它们。 –
- 1. 在不同的处理器上运行代码(x86汇编)
- 2. 批处理活动是否在流水上添加触发器?
- 3. 实现提供者模式?
- 4. MPI是否提供预处理器宏?
- 5. openGL纹理运行在模拟器上,但不是在真实设备上
- 6. 在处理时进行流式处理
- 7. 在x86上运行在内核模式下W7
- 8. 缓存如何提高流水线处理器的性能?
- 9. 如何确定apk是否在模拟器或真实设备上运行?
- 10. 在Linux shell中实现流水线
- 11. 当我在模拟器上运行此代码时,它运行完美,但它在真实设备上崩溃?
- 12. Java VM是否提供自定义流处理程序,如PHP
- 13. python中的线程模块是否提供了真正的并行性?
- 14. Spring批处理不会在并行模式下执行流。
- 15. 在流水线执行中采用并行处理
- 16. 如何测试wcf是否真的处于流模式?
- 17. 是否提供yaml2xml/xml2yaml实现?
- 18. 在真机上运行MIPS指令[不是在模拟器上]
- 19. 实际英特尔x86处理器为了流水线而需要多少开销?
- 20. NoClassDefFoundError在真实设备上运行应用程序但在仿真器上运行时无法运行
- 21. 在多处理模式下迭代powerset
- 22. Redis流水线,处理缓存丢失
- 23. 为什么下面的代码提供了运行时错误现在
- 24. 在JAVA中为运行时处理提供数据库中的数学公式
- 25. 如何在Apache Wicket中请求流水线处理器?
- 26. 了Netty 4:在不同的流水线份额处理器
- 27. 在运行时提供ServiceKnownType?
- 28. 是否有可能判断它是否在模拟器或应用程序中的真实设备上运行
- 29. 需要在x86处理器
- 30. 模拟器上的处理时间比真实设备上的多吗?(android,eclipse)
我问在实模式下是否有流水线可用;当启动一个系统 –