汇编基础 - 咬文嚼字之什么是汇编

网上搜索了一大堆资料,没有一个答案能够很好的回答这个问题。根据我自己的理解,其本质原因在于——中文太过于灵活,容易引起歧义。

(接下来可能我的理解有偏差,如有错误,请大神指正 :P)

汇编其实有两个含义:

1. 指的是计算机编程语言,汇编语言(Assembly Language)。比如写汇编,指的是用汇编语言编写程序。

2. 指的是“一个程序”,这个程序将汇编程序集转化为CPU的基础指令集合,这样计算机CPU才能明白并执行我们程序。这个“程序”,我们也叫做汇编(Assembler),个人感觉可以叫做汇编编译器。

这是汇编程序如何工作的:

  • 大多数计算机有一套确定的,非常基础的汇编指令集,这些汇编指令对应于CPU能够执行的CPU指令或CPU指令集合序列。比如,一个“Load”汇编指令让CPU从内存移动一串位(Bit)到一个特殊的存储位置,这个位置叫做寄存器。假如这个CPU至少有8个寄存器,这些寄存器都是编好号的,下面的汇编指令会移动内存编号(3000)中的值(一个特定长度的位串),到一个编号为8的寄存器:L 8,3000
  • 程序员可以用一序列这样的汇编指令来编写一个计算机程序
  • 这个汇编指令集序列,就是汇编源代码,当程序开始运行时,这些源代码就会被送到指定的汇编编译器(Assembler Program)
  • 这个汇编编译器(Assembler Program)将源代码抽取出来并生成一序列对应的CPU指令集(由0和1构成的序列)
  • 这个汇编编译器生成的东西叫做结果代码(Object Code)或结果程序(Object Program); 这些由0和1构成的序列的结果代码(结果程序)有时候也被叫做机器码(Machine Code)
  • 这样这个结果程序在任何需要的时候就能被CPU执行

在早期的时候,程序员是可以用机器语言写程序的,也就是0,1,0,1,0,1,很牛也很无聊也很费时间。然后,大神就出现了,David J. Wheeler 第一个创造了汇编语言。汇编语言的诞生使得程序开发变得更加高效。在今天呢,汇编语言主要用来写对程序性能要求比较高的程序。现在我们用的很多程序是用更加高级的语言编写的,例如COBOL, FORTRAN, PL/I, 还有C语言。这些高级语言比汇编语言更加容易学习跟使用。那些用来把这些语言生成结果代码的被叫做编译器(Compiler),就是类似Assembler啦,跟汇编编译器一样,这些高级语言的编译器把高级语言编译成机器码。

关于编译器一个更加先进的概念是虚拟机,例如Jave语言,Jave源码被编译成字节码(Bytecode),而不是直接变成机器码(Machine Code)。那这些字节码计算机可以执行吗?不可以,只能由Java虚拟机执行,因此需要Java运行环境。有了前面的知识,就很好理解Java虚拟机干什么的了,最为主要的功能就是把字节码转化为机器码给CPU执行。

为了学习汇编,还需要很多计算机的基础知识需要铺垫,让我有空的时候写写其他基础知识让知识树能够生根发芽。

猜你喜欢

转载自www.cnblogs.com/Kengyen/p/9724059.html