x86指令集疑问

发布于 2022-09-23 12:43:42 字数 295 浏览 21 评论 0

1.看了mik的指令格式介绍,发现x86竟然是变长编码?
最长码长是15byte,
现在有个问题,如果是这样,那么以内存位宽来说(不太了解是多少位,32bit?64?128?)
2.如果一次可以读取64bit,那么对这些长指令,读取就需要2次读取了?
3.不清楚ddr内存的读取位宽是多少,待会查下。
若如此,那么一次内存读取,对短指令来说,就是多条指令读取,
于是乎指令集并行就可以开始了。
惭愧,原来印象一直以为x86是定长指令集,一次读取一条指令。
恩,估计我还停留在当年8086的认识中

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

梦与时光遇 2022-09-30 12:43:42

x86一开始是按照CISC设计的,变长指令很正常。
8086也是变长指令。

浪荡不羁 2022-09-30 12:43:42

x86内存一次读取都是64bit的。不过有cache这东西。所以我感觉影响应该不大吧。

一身软味 2022-09-30 12:43:42

确实,x86是64位数据FSB.其单条指令执行最少也得10多个cycle吧。分两次读cache拼一条指令也可以理解。
以前版上有个x86指令cycle数的表,怎么撤下了

网名女生简单气质 2022-09-30 12:43:42

原帖由 fineamy 于 2008-12-7 17:35 发表
确实,x86是64位数据FSB.其单条指令执行最少也得10多个cycle吧。分两次读cache拼一条指令也可以理解。
以前版上有个x86指令cycle数的表,怎么撤下了

随着CPU越来越复杂,架构越来越多样,周期数已经不太能说明问题了

时光病人 2022-09-30 12:43:42

8086从开始设计的时候就是标准的CISC样式,变长指令。

不过自从Pentium Pro之后,内部已经变成RISC化,由一个翻译模块把变长指令翻译成一条或多条定长的微指令,然后这些微指令再乱序执行。

豆芽 2022-09-30 12:43:42

原帖由 fineamy 于 2008-12-7 10:41 发表
1.看了mik的指令格式介绍,发现x86竟然是变长编码?
最长码长是15byte,
现在有个问题,如果是这样,那么以内存位宽来说(不太了解是多少位,32bit?64?128?)
2.如果一次可以读取64bit,那么对这些长指令,读取就 ...

其他就不说了,我就跟你说一说指令 fetch(取指过程)

AMD 方面:

  AMD 的 L1 instrction cache 是 64K,2-way set 结构,cache line size 是 64 bytes,cache 的装载是以 cache line 为单位的,也就是每次 L1  instrction cache 会从 L2 cache 从加载 64 bytes 字节,如果 L2 cache miss 再到 L3 cache,L3 cache miss 最后到 main memory 加载。
  那么:每次 L1 instrction cache line fill (装载),这就是一个 prefetch 预取指过程。 随之而来一系列的 pre 动作就会同时产生:predecode (预解码)、branch  prediction(分支预测)等,这一系列动作都是在 cache line fill 时同时产生。
  然后,到从 L1 instrction cache 真 fecth 、真decode(解码) 送到指令控制单元,分派指令执行。

Intel 方面:
  Intel 的部件工作分工比较细,prefecth、predecode、branch predication 都有相应的部件进行。L1 instrction cache line 同样是 64 bytes。
  从 L1 instrction cache 及 ITLB prefecth  到 prefecth buffer,作相应的 predecode 和 branch predication。结果送到指令队列 buffer(Instruction Queue)。再从 instrction Queue fetch 和 decode,经过指令融和操作后,送调度单元分派指令。

[ 本帖最后由 mik 于 2008-12-8 02:35 编辑 ]

满地尘埃落定 2022-09-30 12:43:42

这些CPU的流水线都搞的很长。
CPU的发展史不是很清楚,
既然X86属于CISC
当年那场CSIC与RISC,变长与定长指令集之争,演变到现在好像二者
之间已经开始互相融合了。

扮仙女 2022-09-30 12:43:42

在以取指过程说明这个时,最好不涉及cache。
当CPU内的控制器部件从内存里取指令时,是一字节一字节(或一字一字)取的。
当取出指令的第一字节(字)放入控制器内的指令寄存器时,译码器就能判断出许多信息,其中肯定包括这条指令是由几个字节组成的。这就是变长指令的最基本机制。
除了最早期的计算机,后来的以及现在的所有种类的计算机,它们的内存存储单元都是八个bit。我们常说的“字节”,其真正的含义,就是内存存储单元的数据宽度。现在,早就统一为8个bit。
加上了cache,那就变成了“宏观的”取指了,它变成是一次提取几条、几十条、几百条指令。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文