汇编第一章--基础知识梳理与总结

闲谈汇编之初,先说说计算机的硬件组成:运算器,控制器,存储器,输入设备,输出设备。

下图就是计算机的硬件组成框架:

  在早期,机器语言是直接对硬件进行操作,但是机器语言是0和1的字符串,这就是的早期程序员的工作十分繁杂,如果0或者1有一位出错,那么整个程序就会崩掉了,那么如何解决这个问题呢?

汇编语言就应运而生了。

  汇编语言的主体是汇编指令,汇编指令和机器指令的差别在于指令的表示方法上,汇编指令是机器指令便于记忆的书写格式。

  程序员运用汇编语言书写指令提升了效率,可是计算机只能读懂机器指令,那么怎么解决该问题呢?

  不要急,还有编译器呢,编译器的作用就是讲汇编语言写的源程序翻译成计算机可以理解的机器码,这样计算机既可以执行程序员的命令啦!

也就是:

  程序员------>汇编指令------>编译器-------->机器码------->计算机

 

  可能屏幕前面的你又要问了,汇编语言节省了程序员们的宝贵时间,那么汇编语言的组成又是什么呢?

  别急,下面听我一一道来:

汇编语言的组成:(1):汇编指令:这是机器码的助记符,有对应的机器码。

        (2):伪指令:没有对应的机器码,由编译器执行,计算机并不执行

        (3):其他符号:如 + - * / 等,由编译器识别,没有对应的机器码

汇编语言的核心是汇编指令,它决定了汇编语言的特性!!

汇编程序写好了,那么它是怎么控制计算机让计算机执行的呢?

  这就要说到计算机中的CPU了,CPU控制整个计算机的工作,要想控制计算机,就要向CPU提供指令,向他提供指令,这些指令得有地方存放吧,所有又要谈到计算机的存储器了

这些指令都在计算机的存储器中存放,离开了内存再好的CPU也无法工作,那呢可能会问,不是还有磁盘吗?磁盘??开玩笑,磁盘是不同于CPU的,磁盘中的数据如果不读入内存,CPU

压根识别不出来!!

  在内存中,指令和数据没啥区别,都是二进制信息,CPU把有的信息看做指令,有的信息看做数据,为不同的信息附上不同的意义,就象棋盘中的棋子,在盒子中没什么区别,

但是下在棋盘上就不一样了。

  其实,存储器被划分成了若干个存储单元,每个单元都是从0开始的,,计算机最小的信息单位是bit,就是一个二进制位,8个bit组成一个byte,也就是一个字节,比如,一个存储器

有128个存储单元,他就可以存储128个Byte。

  对于一些大的存储器,下面的换算是这样的:1KB==1024B   1MB==1024KB  1GB==1024MB  1TB==1024GB

  前面说到,CPU从寄存器中读取数据,那么CPU是怎么知道数据在存储器中的什么位置的呢?存储器被划分了许多内存单元,这些就象门牌号一样,直接找到

CPU要是想进行数据的读写必须与外部器件进行3类的信息交互:

  存储单元的地址信息(地址信息); 期间的选择,读或写的命令(控制信息); 读或写的数据(数据信息)

  好,既然CPU要读取数据,那么数据怎么传输呢?科学家就解决了这个问题:计算机中有专门连接CPU和其他芯片的导线,通常称为总线,总线从逻辑上又分为3类:

地址总线,控制总线和数据总线;下图就是图片,很好懂。

  下面就先从地址总线开始说:由于CPU是通过地址总线来指定存储单元的,那么地址总线上能床送多少不同的信息,CPU就可以对多少个存储单元进行寻址,比如说CPU有10根地址总线

那么他就可以表示2^10的数据,最小是0,最大是1023,如果有N个地址总线,那么就可以有2^N个内存单元

  那么数据总线又是有什么用的呢?数据总线,顾名思义,就是用来传输数据的线路,数据总线的宽度直接决定了,CPU与外界传输数据的速度,8根数据总线一次可以传送8位2进制数据(即是一个字节)

,16根数据总线就是两个字节啦,8088CPU的数据总线的宽度是8,8086CPU的数据总线宽度是16,下图就是展示了数据的传输情况

  那么控制总线又是什么情况呢?控制总线决定了CPU对外界部件的控制能力,然后就没有然后了。

  下面开始一个新的概念:内存地址空间,这又是何方妖怪?比如说,一个CPU的地址总线宽度为10,那么可以寻址1024个内存单元,这1024个可寻的内存单元就构成了这个CPU的内存地址空间

在说之前要先介绍主板,和接口卡

  主板:上面有核心器件,和一些主要器件,这些通过总线相连,器件有CPU,存储器,外围芯片组,扩展插槽(其中插有RAM内存条和各类接口卡)

  接口卡:就是连接一些外部设备,方便CPU控制,比如显示器,音响·········

PC机中各类存储器的逻辑连接情况为:

下面就开始内存地址空间了:

  上述的存储器在物理上都是独立的器件,但是一下两点是共同点:

1. 都和CPU相连             2.  CPU对他们控制都是通过控制总线发出命令

也就是说CPU操作它们是都是把他们看做内存来对待,把他们看做总的有若干个内存单元组成的逻辑存储器,这些逻辑存储器就是内存地址空间

  在上图中,所有物理存储器被看做一个逻辑存储器,每个物理存储器在逻辑存储器中都有一个地址段,即是一段地址空间(注意:存储器并不是一段一段的)

CPU在这段地址上读写数据,实际上就是在相应的物理存储器中读写数据。

  内存空间的大小受到地址总线宽度的限制,比如:8086CPU地址总线宽度为20,则寻址能力为2^20 即是1MB,80836CPU是32 则内存地址空间最大为4GB

所以我们在基于计算机硬件编程时,要知道他的第一个单元地址,和最后一个单元的地址。

  OVER,谢谢观赏!!

原文地址:https://www.cnblogs.com/acmblog/p/9707592.html

时间: 2024-08-24 09:14:25

汇编第一章--基础知识梳理与总结的相关文章

汇编第二章--基础知识梳理与总结

第一章,我们介绍了有关汇编语言的基础知识,在第二章我们主要介绍寄存器. CPU的主要部件是寄存器,在8086CPU有14个寄存器,它们分别是:AX.BX.CX.DX.SI.DI.SP.BP.IP.CS.SS.DS.ES.PSW.8086CPU的所有寄存器都是16位的,可以存放两个字节.AX.BX.CX.DX这4个寄存器通常用来存放一般性的数据,称为通用寄存器.由于8086CPU的上一代CPU中的寄存器都是8位的,为了保持兼容,8086CPU的AX.BX.CX.DX这4个寄存器都可分为两个独立使用

wpf(第一章 基础知识)

wpf第一章基础知识:通过vs2015创建wpf程序会在引用里面多出3个核心程序集PresentationCore.PresentationFramework.WindowsBase.并且会在解决方案中生成如下的结构: 1.程序起始相关的资源:2.与整个wpf相关的后台代码:3.窗体界面:4.窗体界面的后台代码. 在app.xaml中 1.Application的后台类:2.启动窗体:3.系统资源区域 除此之外可以在MainWindow.xaml中自定义窗体设置属性,拖拉控件在里面.

【读书笔记】《Python基础教程》第一章 基础知识

第一章 基础知识 实现两个数整除:使用命令开关 -Qnew (?): 使用双斜线. from future import division 执行向计算器那样的普通除法. 幂(乘方)运算符: 2 ** 3 (8),用函数代替 pow(2,3),内建函数 长整数型:在数字结尾加L.eg:10000000000000L 获取用户输入 input("提示信息 :") eg: x = input("x: ") .输入的是合法的python表达式 raw_input("

Kubernetes 第一章 基础知识

Kubernetes 第一章 基础知识 Kubernetes是一个开源容器编排引擎,用于自动化容器化应用程序的部署,扩展和管理.开源项目由Cloud Native Computing Foundation(CNCF)托管. Kubernetes是一个可移植,可扩展的开源平台,用于管理容器化工作负载和服务,有助于声明性配置和自动化.它拥有庞大,快速发展的生态系统.Kubernetes服务,具有广泛的工具和支持可用. 发展历程 传统部署时代: 早期,组织在物理服务器上运行应用程序.无法为物理服务器中

汇编语言--第一章--基础知识

基础知识 D(decimal)10 B(binary)2 H(hexadecimal)16 O(octal)8 二进制数和十进制数的转换 十进制转换为二进制: 1.降幂法 2.除法:多用除法 把要转换的十进制数的整数部分不断除以2,并记下余数,知道商为0为止.从下向上写. 对于被转换的十进制数的小数部分则应不断乘以2,并记下其整数部分,直到结果的小数部分为0为止.从上向下写. 为了便于对二进制数的描述,应该选择一种易于与二进制数相互转换的数制. 计算机中常用的字符是采用8位二进制数组成的一个字节

汇编随笔(第一章 基础知识)

至今,我们已经学了两门高级语言C和C++. 刚开始,还是有很多疑问的.我写这个程序,电脑是怎么看懂得?是怎么在系统里定义的?每个老师在讲语言之前都会先讲二维码,说电脑只认识二维码,可是我至今除了做进制转换的题目,就没发现二进制有什么好处.直到我认识了汇编,一切都迎刃而解 汇编没有其他程序那么高级,是一种低级语言,但是不得不说,了解了汇编,才能真正了解机器是如何运转的,才能更深层次地理解高级语言,学好高级语言.我们才上课两节课,说实话,我自认为自己C语言学得不差,但我是真的没法看懂汇编.也许将C语

汇编语言课堂总结1——第一章 基础知识

什么是汇编语言: 汇编语言是比机器语言高级,但依旧偏向于硬件的一种编程语言.比起C.C++.Java这些偏向于人的语言,在编写汇编程序时需要考虑更全面,要写的代码也要更多,但汇编程序的运行速度却是这些语言所不能比的.不同的CPU也有不同的汇编语言. 汇编语言的组成 and 指令vs.数据: 汇编语言由3类指令组成:汇编指令.伪指令和其他符号(注释.变量.标号.段等).其中,汇编指令有对应的机器码,而伪指令和其他符号则没有对应的机器码. 在内存中,不管是指令还是数据,都是以二进制的形式存储,两者的

汇编语言 第一章基础知识

计算机语言的进化演变起源于机器语言 机器语言 (1) 是机器指令的集合.机器指令是0和1构成的二进制信息. (2) 直接面向机器,与机器的硬件操作一一对应.计算机可以直接识别.执行,使用机器语言可以充分发挥计算机的硬件功能. (3) 缺点: 依赖机器硬件,机器指令很难记忆,直接使用机器语言编制程序极易出错,并且难以调试. 由于机器语言非常难于辨别和记忆,以至于给整个产业的发展带来了障碍,于是产生了汇编语言. 汇编语言 1) 汇编语言的主体是汇编指令. (2) 汇编指令和机器指令的差别在于指令的表

第一章 基础知识

一.计算机语言 1.计算机语言的演进: 计算机语言不断发展,由产生的先后次序可以分为三种:机器语言.汇编语言.高级语言 2.各语言的特点: 机器语言:是0和1构成的二进制信息,可以直接被计算机识别.执行,但是依赖机器硬件且难以记忆和调试 汇编语言:汇编指令的合集,为机器指令的助记符,比机器语言容易记忆.对于不同的CPU有不同的汇编指令.能够直接有效地控制硬件,因此速度快.效率高. 组成:汇编指令.伪指令.其他符号 高级语言:语法易学易记,不依赖具体计算机,但是代码量相比前两者大得多,执行所需时间