历史上的今天
今天是:2025年07月25日(星期五)
2020年07月25日 | 指令集是什么?ARM封杀对华为有什么影响
2020-07-25 来源:51hei
计算机语言经过不断发展分为三个层次,高级语言、汇编语言和机器语言。
1、机器语言
我们人类在计算数字的时候习惯于用10进制的表示方法,据说是因为人类有10根手指的关系。但是对计算机来说靠的是高低电平来表示所有的信息,在这个前提下要以10进制的方式表示信息就比较复杂,最适合计算机的表示方式就是高电平代表1,低电平代表0,所有的信息都是以0和1的组合方式来表示,不管是简单的加法还是微信还是游戏,本质上就是0和1组成的指令进行计算的结果。因此以0和1组成的指令是计算机最底层的语言,事实上计算机也仅能理解这种沟通方式,这种语言叫机器语言。
2、汇编语言
机器语言的问题在于人类要传递给计算机任何信息都必须以0和1的组合序列表达,不符合人类的沟通习惯,因此有了助记符的概念并在这个基础上产生了汇编语言,通俗来说我们需要将1+2这种信息表达为计算机可接受的0和1的组合,因为人类更能接受1+2这种表达方式,而计算机只能接受0和1的表达方式,汇编语言就是初步解决了人类和计算机的沟通难度,提高了沟通效率。
3、指令集的作用
以下以实际ARMv8指令集举一个最简单的加法例子来说明指令集的作用。
高级语言语句:1+2
汇编语言语句:ADD X9(存放1+2的结果),X10(存放1),X11(存放2)
在编译成机器语言时,需要解决几个问题:
(1) 怎么让计算机明白ADD是什么意思
(2) 怎么让计算机以0和1的组合序列表达1+2这个计算指令
先解决第一个问题,芯片厂商定义一串序列表示加法,根据ARMv8指令集,1112(十进制)代表加法,进一步表示为二进制为10001011000(二进制)。
解决第二个问题分为两个步骤,通俗来说就是单词和语法,单词的翻译结果为ADD=1112(十进制)=10001011000(二进制);X9寄存器=9(十进制)=1001(二进制);X10寄存器=10(十进制)=1010(二进制);X11寄存器=11(十进制)=1011(二进制)。之后是语法也就是按照什么顺序让计算机读懂以及每个二进制字段所占的位数。ARMv8指令集对于加法的指令格式如下:
这里忽略位移量这个参数,按照指令格式将1+2填入此表:
最终根据ARMv8指令集,1+2的机器语言指令为10001011000010110000000101001001。

4、ARM封杀对华为的影响
目前采用发布于2011年的ARMv8指令集的公司有苹果公司、高通、华为等,ARM本身是一家设计公司不生产芯片,采用不同等级的授权方式授权芯片制造厂根据其设计制造芯片,根据其授权生产的芯片就必须采用其指令集。根据以上例子,ARM架构的芯片认为操作码1112代表加法,目前苹果、高通、华为的芯片都认为1112代表加法。封杀华为后,华为采用自己的芯片就有自己的指令集,在新的指令集下,1112未必代表加法并且同样要表示1+2,指令结构也就是语法也会不一样。由于机器语言是最底层并且计算机唯一能读懂的语言,指令集的改变就涉及所有的上层程序的重写,重中之重就是操作系统。无法要求同一个操作系统适应不同的指令集。所以相对技术,芯片的市场占有率是指令集能否成为公认标准的唯一指标,而ARM架构的芯片在目前移动端的市场占有率接近垄断。中国移动设备是一个巨大的市场,客观分析,并不是ARM封杀华为后华为就会倒掉,只要市场足够大,采用华为芯片和指令集的设备足够多,华为芯片就会打破ARM垄断的格局成为和ARM并列的芯片设计方,甚至如果芯片性能能够超越ARM架构的芯片的情况下,华为芯片将会在移动端市场与苹果高通平分秋色。一切还是华为技术是否足够强大,像其5G技术一样位居世界前列并能让市场接受和欢迎。
史海拾趣
|
请高手帮我解决这个疑问: 由于我的笔记本没有并口,然而导师给我的下载线只是并口到JTAG的,所以我就去市场买了根从USB口到并口的转换线,然后连接起来使用,心想就可以下载了。 只是今天我 ...… 查看全部问答> |
|
在通过串口调试工具向modem com3口写AT命令ATDT96169后connect 返回CONNECT后一段时间出现 NO CARRIER 在通过串口调试工具向modem com3口写AT命令ATDT96169后connect 返回CONNECT,接 着下面出现~#}?}#?}!}#} }=}!}$}\'衹\"}&} }*} } }\'}\"}(}\"}%}&7て拀#}%?}%撩~~&nbs ...… 查看全部问答> |
|
这个问题困扰我很久了,面对一大堆的芯片手册,却找不到编写驱动的步骤. 芯片手册里,详细地描述了该芯片支持的特征,端口的描述,工作的信号图,注意事项,结构方块图,物理参数... 却总没找到如何开始写一个驱动的初始化过程,读过程,写过程,状态的获取 ...… 查看全部问答> |
|
手册上说启动ADC校准前,ADC必须处于关电状态超过两个ADC时钟,即ADON = 0。 但是例程上怎么是先使能ADC(ADC_Cmd(ADC1, ENABLE)),然后再校准呢? 而且我改了程序,先校准后使能ADC,程序怎么就不对了呢? 到底应该怎么做… 查看全部问答> |
|
使用TI图形库中的 pnmtoc 将图片转换后c文件太大,keil软件编译通过了 近期,使用TI的LM3S9B92芯片,在用到TI图形库的时候遇到了一个问题,就是使用库提供的tool中的pnmtoc将pnm格式的图片转换为.c文件,把c文件弄到keil上编译,提示文件太大,无法通过编译!应该怎么解决呢! 经过2天的检查和尝试,原来是keil破解的 ...… 查看全部问答> |








