首页 > 其他 > 详细

(六)计算机指令是个啥

时间:2020-04-26 17:19:57      阅读:60      评论:0      收藏:0      [点我收藏+]

前言:

很久很久以前,由于那时的计算机不具备识别高级语言的能力,因此人们通过往纸带上打孔的方式编程,然后再将纸带交给计算机去读取执行,此时纸带固定位置上是否打孔就表示二进制的1与0.

一、软硬件接口中的CPU

        我们都知道在硬件层面CPU是超大规模集成电路,用意实现加法、乘法这样的算数运算和其他很多类型的逻辑运算;而在软件工程师看来,CPU被用于执行各种各样我们称之为机器语言的计算机指令,因此CPU型号和厂商不同,它们所能执行的指令也不尽相同;此外CPU只是执行程序的设备,它并不具备存储程序的功能,因此我们所谓存储程序型的计算机是借助存储器来存储查询,运行时由CPU读取执行。

二、编译&汇编,将我们的代码编程机器码

        一般我们使用C、java这样的高级语言编程,这些语言写出的代码不能被CPU直接执行,因此需要通过编译器将它们编译汇编代码,再将汇编代码翻译为机器码,最后交给CPU执行,注意!汇编语言的报纸上还是机器码,只不过我们将二进制的机器指令转用一些英文助记符表示了而已,看到没有由于高级语言会最终编译为机器指令,而机器指令的多少直接决定CPU的执行时间,所以有一个牛逼闪闪的编译器相当重要。

 下面是一个编译案例,左侧为C代码与机器码,右侧为对应汇编代码,可以看到C代码行有可能编译为一行多行机器码:

test.o:     file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <main>:
int main()
{
   0:   55                      push   rbp
   1:   48 89 e5                mov    rbp,rsp
  int a = 1; 
   4:   c7 45 fc 01 00 00 00    mov    DWORD PTR [rbp-0x4],0x1
  int b = 2;
   b:   c7 45 f8 02 00 00 00    mov    DWORD PTR [rbp-0x8],0x2
  a = a + b;
  12:   8b 45 f8                mov    eax,DWORD PTR [rbp-0x8]
  15:   01 45 fc                add    DWORD PTR [rbp-0x4],eax
}
  18:   5d                      pop    rbp
  19:   c3                      ret    

C代码 --->汇编代码--->机器码

技术分享图片

三、汇编与指令


常见五种指令:

  1. 算数运算指令,如加法;
  2. 数据传输指令,如内存读取数据;
  3. 无条件跳转指令,如函数或者方法的调用
  4. 逻辑运算指令,如与或非运算;
  5. 条件指令,如if/else;

技术分享图片

MIPS指令集:

MIPS公司于上世纪八十年代开发出的MIPS指令集,目前已经开源,它的每条指令由32位二进制数组成,高6位表示操作码,其余26位分为三种,图示如下:

技术分享图片

以这条指令为例:

add $t0,$s2,$s1

其对应机器码如下:

技术分享图片

最终将这个二进制指令以打孔纸带的形式表示即可

四、扩展:编译型语言与解释型语言

        C这种语言通过直接将源代码编译成机器码的方式执行,所以又称为动态语言,而Python是在程序运行时逐行有Python解释器解释执行,此外Java是通过将源代码转为中间代码然后在虚拟机上解释执行,对于一些热点代码也可以直接编译为机器码去执行,属于解释-编译混合方式执行的。

(六)计算机指令是个啥

原文:https://www.cnblogs.com/rxmind/p/12780596.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!