gpt4 book ai didi

assembly - x86-64 和远程调用/跳转

转载 作者:行者123 更新时间:2023-12-02 20:15:36 25 4
gpt4 key购买 nike

快速总结:在 x86-64 模式下,远跳是否与 x86-32 模式下一样慢?

在 x86 处理器上,跳转分为三种类型:

  • 短,PC 偏移量为 +/-127 字节(2 字节指令)
  • 附近,具有 +/- 32k 偏移量,“滚动”当前段(3 字节指令)
  • far,可以跳转到任何地方(5字节指令)

短跳转和近跳转需要 1-2 个时钟周期,而远跳转需要 50-80 个时钟周期,具体取决于处理器。从我对文档的阅读来看,这是因为它们“超出了当前代码段的 CS 范围。”

在 x86-64 模式下,不使用代码段 - 该段实际上始终为 0..无穷大。因此,超出分割范围不应受到惩罚。

因此,问题是:如果处理器处于 x86-64 模式,时钟周期数是否会因远跳而改变?

相关奖励问题:大多数在 32 位保护模式下运行的类似 *nix 的操作系统显式地将段大小设置为 0..infinity,并完全通过页表管理线性 -> 物理转换。他们是否从远调用时间(更少的时钟周期)方面受益,或者惩罚实际上是自 8086 以来大小段寄存器的内部 CPU 遗留问题?

最佳答案

CS不仅用于基础和限制,还用于权限。 CPL 以及其他字段都在那里编码:

  • D 位 - 32 位或 16 位默认段大小
  • L 位 - 选择段的兼容性或 64 位模式(在这种情况下,基数和限制很重要)

远跳也可以通过任务门,远调用也可以通过调用门。无论 64 位模式如何,所有这些都必须处理。

总而言之,64 位模式下的远跳转并不比 32 位模式下快。事实上,考虑到启用 64 位模式时,段描述符是禁用 64 位模式时的两倍,所有描述符表访问都会加倍,这可能会延长跳转时间。

关于assembly - x86-64 和远程调用/跳转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3167954/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com