如何解决ARM的RISC指令集是x86的子集吗?如果是这样,那么x86为什么不能在本地运行ARM软件?
从我对指令集的有限了解来看,ARM是一种RISC架构,这意味着比基于x86的处理器要少得多/简单得多的指令。如果是这种情况,我希望ARM的指令集是x86指令的子集,因为我还听说过“ x86指令可以完成ARM可以做的所有工作,甚至更多。”
如果确实是这样,由于x86具有所有必要的说明,x86是否应该不能在本地运行ARM软件?
解决方法
不,不。与x86指令集相比,ARM指令集可能受到更多限制,但这与处理器的体系结构无关。 ARM指令集不是x86指令的子集。它们的编码方式不同,处理器以不同的方式执行它们。寄存器不一样,甚至指令指针的工作方式也不一样。
因此:指令在两种体系结构上都不同,仅因为ARM指令较少,并不意味着ARM处理器支持的指令是intel支持的指令的子集。 兼容性还比编码之类的指令要多。 您既不能在x86上运行ARM软件,也不能将arm Assembly组装到x86。
,不,ARM和x86具有完全不同的机器代码格式,并且在asm源级别也不兼容。完全没有。
1,2,3是一个比11,12,13,14,15,16,17小的集合,但是它不是子集,因此您的类推推理不会成立。以不同的方式做同样的事情意味着为ARM编译高级代码与为x86编译相似,而不是兼容。
x86使用的指令长度在1到15个字节之间。 ARM使用固定长度(4字节),或在拇指模式下使用2或4字节指令。而且即使您碰巧拥有2字节x86 add eax,ecx
与Thumb模式ARM 2字节adds r0,r1
,编码也会有所不同。
另外,将RISC视为简化指令集复杂性-每条指令必须足够简单才能通过管道并在一个执行单元中执行(例如,将其发送到ALU ,或加载或存储单位),但可能会有很多不同的说明。当然,用于乘法或除法的ALU不可能在一个周期内完成,因此执行单元可能会被流水线化。
即使那样,ARM也不是很危险。它以增加代码密度和性能的方式偏离RISC哲学,例如push {r4,r5,lr,pc}
进行4次压入,对要压入位图的寄存器进行编码。这与存储单元中可变数量的内部操作有关。或pop
多个寄存器必须写入可变数量的寄存器,以及进行可变数量的加载。因此,它的流水线并不那么容易(为了支持加载/存储对而被AArch64放弃了),但仍然不算太糟,特别是对于ISA围绕其设计的早期简单ARM流水线。
此外,借助NEON SIMD和各种其他指令集扩展,以及紧凑的Thumb2编码,ARM拥有很多指令。
,与x86和mips,mips和risc,pdp11和x86等无关。
处理器非常笨拙,可以执行基本操作,读取/写入(存储/加载)某些alu函数,进行加法,减法等。某些逻辑运算是xor,or和and等。
当时的CISC很有意义,而内存相对来说要昂贵得多,因此具有更多步骤的指令也很有意义,到那时,他们对像我们现在这样的处理器没有太多的经验。随着事情的发展,RISC变得更有意义,整体性能更高,因为开销减少了(将苹果与我们仍在等待的苹果进行比较),功耗更低,执行相同任务的逻辑更少等。可能会有更大的二进制文件,但是由于并不是真的需要cisc指令的每个部分,因此需要进行权衡。 x86基本上是8位指令集,而arm是32/16,那么二进制文件会更大。因此,这是尺寸的权衡,但具有对齐的性能优势。
这有点像在说,因为半卡车具有引擎,轮胎和座椅,所以本田思域是半卡车的子集,因为它具有相似的零件并且可以在相同的道路上行驶。
pdp11可以运行unix,然后运行x86,这是否意味着x86是pdp11的子集?从pdp11衍生而来吗?不。真正的英特尔最终购买了DEC。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。