ARM的RISC指令集是x86的子集吗?如果是这样,那么x86为什么不能在本地运行ARM软件?

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)> insert overwrite table dwd_trade_cart_add_inc > select data.id, > data.user_id, > data.course_id, > date_format(
错误1 hive (edu)> insert into huanhuan values(1,'haoge'); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive> show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 <configuration> <property> <name>yarn.nodemanager.res