码迷,mamicode.com
首页 > 其他好文 > 详细

Computer Language

时间:2018-04-03 10:58:42      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:CPU Heap Stack

汇编语言

计算机是人类创造出来的一种高级工具,有着简单的智能,但是还并不能向人与人一样直接交流;而人们通常控制计算机的程序也都是高级语言编写,计算机不能直接识别高级语言,必须通过编译器转成二进制代码才能识别运行。
计算机真正能够理解的都是低级语言,来控制硬件设备。而汇编语言就是低级语言,直接描述控制CPU的运行。
因此,在了解计算机语言之前,先弄明白汇编语言是怎么回事;一定会事半功倍!
1: What is assembly language?
在计算机里最核心的就是CPU,CPU虽然负责计算,却本身不具备智能。你给它一个指令它就运行一次,运行完就等待下一个指令。而这些指令都是二进制的,我们都称之为操作码 (opcode);如: 00000000
00000001
00000010
这三行数字就是二进制的指令分别代表为数字:0,1,2
对于人类来说,这样的代码程序是不能识别的,也就不知道机器到底在干啥了。而计算机可以通过编译器把人类能识别的高级语言编写的程序,翻译成二进制指令解读给自己。因此,人们为了解决对二进制程序的识别问题,以及简单的编辑需求,就诞生了汇编语言 。
(汇编语言是二进制指令的文本形式,与指令是对应的关系。只要还原成二进制,汇编语言就可以被CPU直接执行,所以汇编语言就是最基础的低级语言。)
2:The origin of assembly language
在早期,编写程序就是手工写二进制指令,然后通过各种开关输入计算机,比如要做加法了,就按一下加法开关。后来,发明了纸带打孔机,通过在纸带上打孔,将二进制指令自动输入计算机。
而为了解决对二进制指令的解读识别问题, 工程师将那些指令写成了八进制。二进制转成八进制是简单的很,但是八进制与二进制都差不多,可读性并没有提高。到最后,还是用文字表达。内存地址也不再直接引用,而是 用标签表示。
如此,就变得复杂了点。多了一个步骤,要把这些指令翻译成二进制,就称之为assembling,完成这个步骤的程序就叫做assembler。它处理的文本,就叫做assembly code。标准化以后,称之为assembly language,缩写为asm,中文就叫汇编语言。
(每一种CPU的机器指令都是不一样的,因此对应的汇编语言也是不一样的,而接下来要说的是目前最流行的X86 汇编语言,也就是因特尔的CPU。)
3:Register and memory model.
寄存器和内存模型是认识汇编语言必须了解的两大知识点。

首先说说寄存器。
说到寄存器就得先说一下CPU了,计算机的核心硬件CPU是有两大部分组成:运算器和控制器;因此CPU本身只负责运算,不负责存储数据。数据一般都是储存在内存中,CPU要是运作是就去内存里调用数据。而CPU的运算速度要远远高于内存的读写速度的;因此,为了避免内存速度拖累CPU,就在CPU上设置了缓存,分为一级和二级。而缓存也是一种内存,要快过普通内存的读写速度。
但是,随着CPU的进步,缓存还是不够快,另外数据在缓存里面的地址是不固定的,CPU每次读写都要寻址也会拖慢速度。为此,在CPU里就又有了寄存器的出现,用来储存最常用的数据。也就是说,那些最频繁读写的数据(比如循环变量),都会放在寄存器里面,CPU会优先读取寄存器,再由寄存器跟内存交换数据。
(寄存器不依靠地区分区数据,而是依靠名称。每一个寄存器都有自己的名称,我们告诉CPU去具体的哪一个寄存器拿数据,这样的速度是最快的。很多人都称之为CPU的零级缓存。)

Computer Language

标签:CPU Heap Stack

原文地址:http://blog.51cto.com/13570199/2094040

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!