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。
之前在大学里曾学习过汇编语言,但是现在基本已经都还给老师了,所以对于汇编的学习我基本也是从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。
相关文章推荐
- X86学习笔记——汇编基础知识
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-01-CNN基础知识点
- C++ 学习笔记---零散的基础知识
- linux网络编程学习笔记之一 -----各种基础知识小结
- matlab学习笔记之基础知识(一)
- [Golong]学习笔记(一) 基础知识
- 黑马学习笔记_java基础知识总结
- Android Map开发基础知识学习笔记
- [学习笔记] Java核心技术 卷一:基础知识 异常、断言和曰志(四)
- Android Map开发基础知识学习笔记
- JavaScript学习笔记(一)——JS基础知识介绍
- Fortran学习笔记1——基础知识(数据基本类型及其运算)
- java学习笔记1-基础知识
- 黑马程序员_java基础学习笔记03_函数以及数组知识
- 【知了堂学习笔记】_Jquery基础知识之DOM操作(二)
- 前端学习笔记--jQuery--基础知识--动画篇
- Object-C学习笔记之基础知识一
- 【二】Gradle 基础知识学习笔记
- Opengl ES 学习笔记 1:基础知识
- 【Java学习笔记】基础知识学习14【文件】