百科问答小站 logo
百科问答小站 font logo



为什么英特尔x86等多数中央处理器不支持源操作数和目标操作数同时为内存的指令? 第1页

  

user avatar   bei-ji-85 网友的相关建议: 
      

如果只是问为什么没有mov mem, mem这种指令的话,我觉得只是因为指令长度不够,8086里没有mov mem, mem指令,也没有双立即数操作。

下图是8086指令集里寄存器和内存的描述信息编码,长度是一个字节。

8086时代,CPU的指令缓冲队列是6字节,同时代的8088,指令集是相同的,但指令缓冲队列只有4字节,能了解到的最长的8086时代的指令是3字节,加上段描述编码的话,就正好是4字节,而双内存操作或者双立即数操作,指令编码自身可能就需要4字节,就没办法添加段描述编码了。80286以后指令长度上限调整了,但这个时候指令的编码都已经定型了,再引入这么一种新的编码意义不大。

另外,数据暂存器是有的,8086的ALU那是有一个暂存寄存器的,可以用来临时存储一些东西,所以应该不是暂存器的问题。

而且movs和push/pop(比如push [si])/dec/inc(比如inc [bx])实际上都可以完成mem到mem的操作。mov指令的问题是,如果加了mov,那么对应的各种mov的变体也叫增加,这样的组合就太大了,比如mov [esi * 4 + 2], [0x12345678],这种编码,在目前的ModR/SIB的模式下是组合不出来的。

一些其它的猜测:

1. mov mem, mem这种用法,可能会对cache一致性设计产生一些干扰,要同时维护两个cache line,太复杂,读写延迟太大。
2. 数据暂存器需要两个甚至多个,早期CPU里暂存器只有一个,电路上不够用。
3. 要么就是历史设计问题,8008的指令集延续下来的习惯。
4. 世界上应该存在着双mem操作的指令集。




  

相关话题

  12代英特尔cpu不带f和带f的为什么差价这么低?核显的不值钱吗?还是清库存? 
  将近十年后,如何评价AMD收购ATi? 
  超威半导体(AMD)的超线程技术和英特尔(Intel)的超线程技术有差别吗? 
  CPU 的指令集存放在什么地方? 
  一颗现代处理器,每秒大概可以执行多少条简单的MOV指令,有哪些主要的影响因素? 
  什么是指令集?CPU的指令集是怎么运作的?X86、ARM、MIPS、Alpha、RISC等有什么区别? 
  有详细完整的纸面资料,制作出8086级别的CPU和1M内存、软盘,最少需要相当于哪个年代的科技水平? 
  现在手机 SoC 性能大概相当于哪个时代的 PC? 
  如何评价外媒曝 PS5 采用 AMD8 核 Zen 处理器? 
  如何理解龙芯中科副总裁杜安利说国产 CPU 发展应自主研发核心技术,建立自主生态? 

前一个讨论
为什英特尔(Intel)的标准深深的影响个人电脑市场?
下一个讨论
掌握很多门计算机语言的人不会记串吗?





© 2024-12-26 - tinynew.org. All Rights Reserved.
© 2024-12-26 - tinynew.org. 保留所有权利