汇编语言(部分)

汇编指令就是机器指令的助记符而已,一句汇编语言,对应CPU的一条指令集

计算机是有许多逻辑门电路和一些电子元件组成的,不同硬件组成的计算机有不同的指令集,这一指令集可以用助记符表示的,也就是汇编语言,早期汇编语言可以有专业人士人工翻译成机器语言的,然后把这些机器语言输到计算机的,最后计算机执行输出结果,

后来计算机可以自动翻译这些助记符也就是汇编语言,我想知道计算机是怎么自动翻译的,这个过程是怎么回事的,(我知道有编译器的)?


我们的计算机能够执行的是一条一条用二进制数字写成的指令,在CPU读取这些指令时会用其内部的译码部件把这些数字翻译成一定的操作,从而指导计算机完成该做什么,怎么做的问题.

在同一架构的CPU中,机器指令是相同的,或是向下兼容的.硬件工程师们在设计CPU时,综合考虑各方面的情况,最终形成了若干条指令(就像我们所写的程序都可以用三种基本结构写成一样),然后再把这若干条指令镌刻在CPU中,用硬件部分予以实现(电子电路中能够讲到).

由于每种CPU的设计者和设计理念不同,因此,形成了各种各样的CPU或单片机品牌,像我们常用的pentium和amd都是属于80x86架构的,此外还有mcs51单片,arm芯片,motorola的680X00系列等.

再说下汇编语言:

由于机器指令是一串可执行的数字代码,因而我们一般人是不会记也很难记住的,为了解决这个问题,所以才发明了汇编语言,用助记符来代替相应的机器语言.所以汇编语言与机器语言是一一对应的,CPU内部有多少条机器指令,就会相应有多少条汇编指令.

高级语言:

由于汇编语言只是机器语言的符号化,虽说相对简单了,但是还是得要求人们学习相应的内部结构,对于复杂的内部结构,有很大一部分人还是无从着手的.所以就出现了高级语言,当程序员用高级语言指令写完源程序后,只需用编译器编译就可运行了.此时编译器所做的工作就是把高级语言指令翻译成汇编语言(机器语言).由于每种机器对应的指令不同,所以在不同架构的机器下,就会有着不同的编译器.

从上我们可以知道,机器语言 汇编语言是基于机器的,在80x86下能够运行的程序,放到arm下肯定没法运行,为什么?因为其机器结构不同,内部的硬件实现不同.所以说其移植性差.

那为什么说高级语言移植性就好呢?是因为他不是用汇编语言写的.在80x86下用c写了一个程序,我们可以用mcs51下用mcs51的c编译器进行编译,将关键字翻译成mcs51的汇编指令就可以了.



机器语言是硬件工作的物理语言,只有0和1,不是给人看的,比如cpu的内部工作指令。

汇编语言是给开发人员看的,但不同与其他高级语言(c,basic,c++)

汇编语言不像高级语言有跨平台性,首先,CPU的的工作是靠机器语言的(就是指令集,ISA),而这些指令有些是cpu独占的,而有些是必须要被外界访问的,比如让cpu做加法运算,谁加谁是cpu无法决定的,就必须通过外界指定才可以运算。于是问题出现了,用机器码控制cpu太难了,只有0和1,编程人员要费很大劲!于是汇编语言应邀而生。它是文字形式的,程序员写完程序后通过汇编器(类似于高级语言的编译器)将文字转化为机器码,于是程序就可以控制cpu了,因此汇编语言很依赖cpu,i386的汇编程序只能运行在支持i386体系的cpu上,苹果PowerPC汇编程序只能运行在苹果机上。这也就是为什么Windows程序不能运行在苹果机上,就是一位互相的汇编指令集不同,从而机器码不同。

当然计算机程序的运行最终还是以机器码运行的,但编程语言是无比重要的,比如用c语言写一个最简单的程序,首先c语言编译器(compiler)将程序转化为对应的汇编,汇编器(assembler)将汇编代码转换为机器码才可运行。

之所以高级语言可以跨平台,就是因为同一种高级语言在不同平台的不同编译器,可以调用相对平台的汇编器来在对应平台运行。因此,有人把高级语言和汇编语言分为一类,是不对的。。。。。


机器语言用来编汇编语言的编译器

然后用汇编语言编 C 语言的编译器(比如 TC)

然后用 C 语言和很少的汇编语言编操作系统(比如 Windows)


你可能感兴趣的:(汇编语言(部分))