想法很好,意义不大。
首先,CPU硬件的视角上,根本没有汇编指令,都是一个一个微指令,对于像call/push这类指令,在CPU内部都是被打散的状态,call是push+jmp,然后再继续拆散成内存访问和寄存器修改。所以你把多个指令打包,最后到CPU里面还是要拆散的,从效率上说,没什么影响。
那么打包的意义在哪?节约汇编指令编码?现在x86的指令编码可用的空间已经很有限了,再发明一个指令,想找一个地方塞进去很困难,况且有没有用到的编码,去做点别的比如科学计算的指令不是更好吗?
ARM上能打包,是因为ARM汇编设计的时候就预留了编码空间,x86设计的时候没有预留,现在要加指令就很困难。
push ebp/push ebp,esp一共只有三个字节,而新增一条指令,多一级编码,就可能还需要额外一个字节,那么你的CALLX执行也就在每个函数调用的地方节约两个字节的长度,并且实际执行效率上没有提升,微指令没编码。所以这样做的意义不大。
况且,另外有一个问题是,ABI上要求用ebp/esp做栈帧,但这种要求不是强制的,对于那些不想用ebp/esp做栈帧的代码,你的这条指令就没什么用处了,除非你要设计一套:对任意两个寄存器做栈帧的CALLX指令,考虑到寄存器组合的话,这条指令的编码已经很大的了,要知道一条pop也就一个字节,你的新的指令要组合任意两个寄存器的话,至少需要16*16的编码空间,这就已经一个字节了,况且你不考虑点预留空间去扩展吗?
所以算下来,这样做的意义不大,x86体系已经很少去在编码上优化传统指令了,这样的优化得不偿失。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有