我并不真正理解 EBX 寄存器的用途。我通过搜索 EBX 的目的得到了不同的答案,但最普遍的共识是 EBX 没有像 EAX、ECX 或 EDX 那样的特殊目的。为什么我需要使用 EBX?我已经从简单的教程中删除了 EBX,该程序仍然有效。那么使用EBX的原因是什么?如果没有它我也能工作,我为什么要关心它?
有一个额外的寄存器意味着你可以在寄存器中保存更多的东西,而不必存储/重新加载它。这就是 x86-64 添加 R8..R15 的原因,尽管它们几乎没有任何特殊用途。
你几乎完全倒退着看这件事。所有通用寄存器都有一些隐含的用途,但这不是原因它们存在。x86 可以在没有“字符串”指令和 EDI 或 ESI 寄存器的情况下设计,或者没有很多东西,但是编写高效的代码会更困难。
(对“为什么存在 x86 寄存器”的更基本答案是 8086 的原始设计,它旨在使从 8080 移植 asm 源代码足够简单,可以机械地完成 。https://retrocomputing.stackexchange.com/questions/5121/为什么是第一个四 x86-gprs-以这种不直观的顺序命名- 这就是为什么在 x86 机器代码中,寄存器号是 EAX、ECX、EDX,然后是 EBX)
但是是的,EBX 确实有一些隐含的用途。在现代代码中,特别是对于cpuid
4 个输出之一和cmpxchg8b
/cmpxchg16b
。在历史 x86 中,作为 的基址寄存器xlatb
,在 16 位寻址模式中作为可用于寻址模式的少数寄存器之一。
请参阅为什么 rbp 和 rsp 称为通用寄存器?其中包括对所有 8 个“传统”寄存器和 R11 的隐式使用。
在 i386 Linux 系统调用调用约定中,EAX 保存调用号,EBX 保存第一个 arg,然后是 ECX、EDX 等。但是如果 EBX 不存在,调用约定显然会被设计成不同的。
归档时间: |
|
查看次数: |
57 次 |
最近记录: |