x86|说说x86架构的怪异之处


x86|说说x86架构的怪异之处
这事儿我得说说 。
x86架构做了一些大多数现代处理器架构都没有做的奇怪事情 , 但是因为这一架构十分流行 , 广泛被使用在各行各业中 , 以至于人们觉得这些事情本来就是正常的 , 没什么好大惊小怪的 。
那我想说的是:x86架构十分怪异 。
x86架构只有8个通用计算寄存器 , 而其他的现代处理器所携带的寄存器都远远超过它 。 例如PPC , MIPS和Alpha处理器都自带有32个寄存器 , 而IA64架构则拥有128个 。
x86使用栈进行函数参数传递 , 而其他处理器架构使用寄存器来传递 。
x86允许非对齐的内存访问 , 如果出现了这种情况 , 没有异常发生 , 它会默默地修复这个未对齐错误 。 其他处理器则会激发出一个未对齐异常 , 从而可以选择由supervisor以巨大性能损失来模拟 。
x86带有变长指令集 。 而其他处理器都是固定长度的指令集 。 (PPC MIPS和Alpha都是一个固定32位长的指令集 , IA64则是固定41位 , 是的 , 你没看错 , 是41位定长指令)
x86有一个十分严格的内存模型 , 其中外部内存访问与代码流发出内存访问的顺序相匹配 。 其他的内存模型较弱 , 需要明确的内存屏障来确保以特定顺序向总线发出(和完成)问题 。
x86架构支持原子性的load-modify-store操作 , 而其他处理器则不支持 。
x86在栈上传递函数返回地址 , 而其他处理器使用链接寄存器(Link Register) 。
总结当你编写你认为是可移植的代码时 , 请记住这一点 。 像许多事情一样 , 你可能觉得在正常不过 , 但是如果以一种更加宏观的角度来看 , 可能就不那么正常了 。
最后Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一 , 里面有很多关于Windows的小知识 , 对于广大Windows平台开发者来说 , 确实十分有帮助 。
本文来自:《The x86 architecture is the weirdo》
【x86|说说x86架构的怪异之处】