您的位置:首页 > 其它

X86 ASM学习笔记(基础知识)

2011-05-28 14:45 621 查看
学习汇编语言之前,我们应该先了解汇编语言,以及为什么要学习它。我学习汇编语言的目的很简单,我想了解所谓的“底层”的一些工作机制。我本人是一名java程序员,几年的工作经验让我认识到,了解底层的一些工作机制有助于我们更好的认识和解决问题,所以我想有必要花费一些时间来学习汇编语言。

之前在大学里曾学习过汇编语言,但是现在基本已经都还给老师了,所以对于汇编的学习我基本也是从0开始的。我所学习的汇编参考教材是王爽的《汇编语言》,推荐想学习的朋友也看这本书,这本书讲的很通俗易懂。

这一系列的学习笔记中,我记录的都是我的学习心得,都是我自己的意见和想法,如果有什么地方不对,还请看到文章的朋友不吝指正。OK,不多废话了,下面进入正文。

汇编语言的发展历史

说到汇编语言,不得不提到机器语言,机器语言是计算机认识的语言,不是我们人类所认识的语言。我们都知道计算机只认识0和1,在运算的时候计算机将0和1转换成一系列的高低电平,是构成计算机的电子器件收到影响,从而能达到运算的功能。我们程序员在编程的时候不能拿0和1去编程啊,他们组成的意思我们根本不懂。所以这个时候汇编语言出现了,汇编语言其实就是一系列的助记符,而这一系列的助记符就是我们人类所熟悉一些指令集合。我们使用汇编指令编写程序,通过编译器生成计算机认识的二进制代码,让计算机可以工作。由此我们可以看到,汇编语言是很接近机器语言的。同样,汇编语言的指令给了我们很大的方便,我们在代码中可以直接使用寄存器,使用内存而不受任何限制,这一点是其他任何语言无法比拟的,而且也可以很好的了解CPU是如何工作的等等。

计算机硬件的一些知识

在汇编编程中,我们要了解的是CPU、寄存器和内存,大部分时间我们需要打交道的就是这三个东西。

CPU是计算机运算的核心部件,一切运算等操作都离不开它的指挥。

寄存器是CPU中的一些临时存储器,他们的容量很小,但是速度是最快的。

内存就是我们大家所熟知的内存,用来存储正在运行的一些程序数据等等。

那么这三个核心部件的关系其实很好理解,当计算机启动后,内存中存放数据和指令,寄存器中存放CPU要执行的指令的地址。比如寄存器A(指令寄存器)的功能是告诉CPU你应该运行的指令在哪?那么CPU就会到A中来取得这个指令的位置,假如读取到的这个位置是B,那么CPU知道B位置后就会去内存中找到B的位置,读取其内容,然后将这个内容看做是一条指令,执行这个内容。

除了知道以上三个重要部件之外,我们在了解一下总线的做用。

总线分为三种,地址总线、数据总线和指令总线,先来说地址总线,8086地址总线有20根,所以CPU可以寻址1M的空间。什么是寻址呢?寻址就是说CPU可以找到的内存空间,我们将内存空间都排号,从0开始到X,如果有20根地址总线,那么能找到的地址空间是00000000000000000000------11111111111111111111(记住只有0和1)这么多,也就是2的20次方个内存地址空间,但是由于一个内存单元(组成内存的基本单位)是一个字节大小,所以20跟地址线的寻址能力为1MB的内存地址空间,但是CPU的寄存器是16位的,这也就限制了寻址能力,所以X86的寻址方式比较特别,物理地址的寻址方式由段地址X16+偏移地址。

同样,数据总线和控制总线的宽度也代表了其寻址的能力。

知识点

1,计算机只认识0和1。

2,汇编语言速度快,能直接操纵硬件,这是其它语言所部能的。

3,1Byte(字节)=8个bit(比特),bit是计算机中最小单位,代表一个二进制位,不是0就是1。

4,2^10=1K 2^20=1M 2^30=1G 2^40=1T

5,地址总线的宽度决定了CPU的寻址能力。

6,一个内存空间可以存储1Byte。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: