通俗解释什么是指令集

简介: 通过简单案例来通俗的解释指令集的作用

计算机语言经过不断发展分为三个层次,高级语言、汇编语言和机器语言。

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指令集对于加法的指令格式如下:
image.png

这里忽略位移量这个参数,按照指令格式将1+2填入此表:

高级语言:1+2

image.png

汇编语言:ADD X9(存放结果),X10(存放1),X11(存放2)

image.png

机器语言:

image.png
最终根据ARMv8指令集,1+2的机器语言指令为10001011000010110000000101001001。

由于机器语言是最底层并且计算机唯一能读懂的语言,指令集的改变就涉及所有的上层程序的重写,重中之重就是操作系统。无法要求同一个操作系统适应不同的指令集,所以相对技术,芯片的市场占有率是指令集能否成为公认标准的唯一指标。

目录
相关文章
|
6月前
|
存储 物联网 数据中心
拒绝玄学炼丹:大模型微调显存需求精确计算指南,全参数微调与LoRA对比全解析
本文揭秘大模型微调显存消耗的本质,系统拆解模型权重、梯度、优化器状态、激活值四大组成部分的计算逻辑,推导可复用的显存估算公式;对比全量微调、LoRA、QLoRA等方案的显存需求,提供实用工具与配置建议,助开发者告别“玄学估算”,精准规划GPU资源。
|
数据采集 定位技术 数据安全/隐私保护
ESP8266调用NTP服务器进行时间校准
NTP服务器通常连接到具有高度精确时间源的设备,例如:GPS接收器或原子钟,以确保提供准确如一的时间。网络上的计算机可以通过连接到NTP服务器来同步其时间,并确保它们在同一时刻进行操作。
2682 0
|
5月前
|
IDE 编译器 开发工具
STM32CubeMX (FreeRTOS) 导入 VSCode EIDE 开发实战笔记
本文记录STM32F407ZET6平台下,用STM32CubeMX配置FreeRTOS并生成工程,再导入VSCode+EIDE插件开发的完整实践。重点解析链接脚本(.ld)四大语法错误——栈地址计算缺RAM参数、.data/.bss/堆栈段内存区域缺失等,并给出精准修复方案,助你快速打通VSCode嵌入式开发流程。(239字)
890 5
|
域名解析 存储 Linux
在CentOS 8 上安装和使用 Composer
Composer是一个 PHP 依赖管理器(类似于 Node.js 的 npm,或者 Python 的 pip),会拉取你的项目所依赖的所有 PHP 软件包,并且为你管理它们。它被所有现代化的 PHP 框架和平台所使用,例如: Laravel, Symfony, Drupal, 和 Magento 2。本文将为大家介绍在 CentOS 8 上安装 Composer 的几个步骤。
3823 0
在CentOS 8 上安装和使用 Composer
|
存储 Serverless C语言
【C语言】时间函数详解
在C语言中,时间处理功能由标准库 `time.h` 提供。使用这些函数时,需要包含 `#include <time.h>` 头文件。以下是一些常用的时间函数的详细讲解,包括函数原型、参数说明、返回值说明以及示例代码和表格汇总。
919 9
STM32(HAL库)驱动GY30光照传感器通过串口进行打印
STM32(HAL库)驱动GY30光照传感器通过串口进行打印
|
前端开发 Java
【Java项目】SpringBoot项目的多文件兼多线程上传下载
【Java项目】SpringBoot项目的多文件兼多线程上传下载
1067 0
|
Linux C语言 C++
vsCode远程执行c和c++代码并操控linux服务器完整教程
这篇文章提供了一个完整的教程,介绍如何在Visual Studio Code中配置和使用插件来远程执行C和C++代码,并操控Linux服务器,包括安装VSCode、安装插件、配置插件、配置编译工具、升级glibc和编写代码进行调试的步骤。
4420 0
vsCode远程执行c和c++代码并操控linux服务器完整教程
|
虚拟化
VMware Workstation 无法连接到虚拟机。请确保...【解决办法】
VMware Workstation 无法连接到虚拟机。请确保...【解决办法】
9340 0
VMware Workstation 无法连接到虚拟机。请确保...【解决办法】
|
Java Linux
如何实现无锁并发:深入理解CAS原理
如何实现无锁并发:深入理解CAS原理
819 2