第一章


1.1 机器语言

电子计算机的机器指令是一列二进制数字。计算机将之转变成一列高低电平,以使计算机的电子器件受到驱动,进行运算。


1.2 汇编语言的产生

在这里我们发现一个问题:用0和1来描述程序,很难辨别和记忆。于是汇编语言产生了。
我们用汇编指令代替机器指令,汇编指令由编译器翻译成机器指令。
编译过程:


1.3 汇编语言的组成


第一点,比如我们之前所看到的的汇编指令mov ax,bx等同于机器指令1000100111011000
第二点,后面的课程会得到体现。比如:loop h,由编译器来执行,将h翻译成h所在的地址
第三点,有与你们相同的疑问。


1.4 存储器

硬盘、内存、CPU之间的关系。
内存中存放着指令和数据。CPU通过总线读写内存,内存可以读写硬盘。


1.5 指令和数据

指令和数据是应用上的概念。CPU该如何区分一列机器码是指令还是数据呢?


1.6 存储单元

一个存储器有多个存储单元,存储单元从0开始编号
一个存储单元可以存储一个字节(Byte)
1Byte = 8bit (一个字节等于8个比特)


1.7 CPU对存储器的读写

CPU想要进行数据的读写,必须和外部部件(标准说法是芯片,PS:因为RAM是芯片)进行下面3类的信息的交互。

  • 存储单元的地址(地址信息)
  • 器件的选择,读或写命令(控制信息)
  • 读或写的数据(数据信息)

例如一个读取过程:

上图将读取到 “08” 这个数据到CPU中

对于8086CPU,下面的机器码,能过完成上图过程。
机器码: 101000000000001100000000
含义: 从3号单元读取数据送入寄存器AX

机器码难于记忆,用汇编指令代替。
机器码: 101000000000001100000000
汇编指令: MOV AX,[3]
含义: 传送3号单元的内容到AX


1.8 地址总线

很容易知道,地址总线的根数决定了CPU能够读取存储单元的个数(这是由于二进制可表示的数据范围)。
比如:10根地址,则可以读取1024个存储单元。它的数据范围在0~1023。
公式显而易见:可读取存储单元个数 = 2的地址总线根数次方

上图指向内存中为(1101000000)2的地址,对应十进制832


1.9 数据总线

数据总线若为8根,则一次可传送8位二进制数据,也就是1个字节数据。
数据总线若为16根,则一次可传送16位二进制数据,也就是2个字节数据。

8根地址总线如下:

16根地址总线如下:

上图所做的都是传送D8和89。两者的区别在于,前者用了2次传送,后者只用了1次传送。


1.10 控制总线

CPU对外部部件的控制是由控制总线来进行的。它是一些不同控制线的集合比如读写控制线属于控制总线中的一条。而读写控制线只进行读写操作。0代表读,1代表写。


小结

  1. 汇编指令是机器指令的助记符,同机器指令一一对应。
  2. 每一种CPU都有自己的汇编指令集。
  3. CPU可以直接使用的信息在存储器中存放。(换句话说就是CPU将信息存储在内存中)
  4. 在存储器中指令和数据没有区别,都是二进制信息。(存在相同二进制信息,它既是指令又是数据)
  5. 存储单元从0开始顺序编号。
  6. 一个存储单元可以存储8bit,即8位二进制数。
  7. 1Byte=8bit 1KB=1024B 1MB=1024KB 1GB=1024MB。
  8. 每一个CPU芯片都有多个管脚,这些管脚和总线相连。一个CPU可以与3种总线相连,3种总线的宽度标志了这个CPU不同方面的性能。(PS:可以将内存看做“以下的”其他器件)
    1. 地址总线,决定了CPU的寻址能力
    2. 数据总线,决定了CPU与其他器件进行数据传输时的一次数据传送量
    3. 控制总线,决定了CPU对系统中其他器件控制能力

检测点 1.1

(1) 1个CPU的寻址能力为8KB,那么它的地址总线的宽度为 13
(2) 1KB的存储器有 1024 个存储单元。存储单元的编号从 01023
(3) 1KB的存储器可以存储 8096 个bit,1024 个Byte。
(4) 1GB、1MB、1KB分别是 1073741824 Byte、 1048576 Byte、1024 Byte。
(5) 8080、8088、80286、80386的地址总线宽度分别为16根、20根、24根、32根,则它们的寻址能力分别为:64(KB)、1(MB)、16(MB)、4(GB)。
(6) 8080、8088、8086、80286、80386的数据总线宽度分别为8根、8根、16根、16根、32根。则它们一次可以传送的数据为:1(B)、1(B)、2(B)、2(B)、4(B)。
(7) 从内存中读取1024字节的数据,8086至少要读512次,80386至少要读256次。
(8) 在存储器中,数据和程序以二进制形式存放。


1.11 内存地址空间(概述)

什么是内存空间呢?
比如,一个CPU的地址总线宽度为10,那么可以寻址1024个内存单元(或者说存储单元),这1024个可寻的内存单元就构成这个CPU的内存地址空间


1.12 主板

每台PC都有一个主板。
主板上有核心器件和一些主要器件。这些器件通过总线相连。(总线包括三种:地址总线、数据总线、控制总线)
这些器件有CPU、存储器、外围芯片组、扩展插槽等。(PS:扩展插槽一般插有RAM内存条和各类接口卡)


1.13 接口卡

CPU对外设不能直接控制。直接控制这些设备进行工作的是插在扩展插槽上的接口卡。
扩展插槽通过总线和CPU相连,所以接口卡也通过总线同CPU相连。CPU直接控制这些接口卡,从而实现CPU对外设的间接控制。
也就是CPU通过总线想接口卡发送命令,接口卡根据CPU的命令控制着外设


1.14 各类存储器芯片

从读写属性上可以分为两类:随机存储器(RAM)只读存储器(ROM)

随机存储器(RAM):可读可写,必须带电存储,关机后存储内容丢失
只读存储器(ROM):只读无法写,关机后内容不丢失

随机存储器
用于存放供CPU使用的绝大部分程序和数据,主随机存储器一般由两个位置上的RAM组成,装在主板上RAM和插在扩展插槽上的RAM

装有BIOS(Basic Input/Output System,基本输入输出系统)的ROM
BIOS是由主板和各类接口卡(显卡、网卡等)厂商提供的软件系统,可以通过BIOS进行硬件设备最基本的输入输出。主板和某些接口卡上存储相应的BIOS的ROM。(PS:也就是主板的ROM上有属于主板的BIOS、显卡的ROM上有属于显卡BIOS。有BIOS我们就可以驱动主板和显卡等其他设备)

接口卡上的RAM
某些接口卡需要对大批量输入、输出数据进行暂时存储,在其上装有RAM。最典型的的是显卡上的RAM,一般称为显存。显示卡随时将显存中的数据向显示器上输出。换句话说,我们将需要显示的内容写入显存,就会出现在显示器上。(PS:这也是为什么游戏那么吃显卡的原因,所以要学游戏的小伙伴,该好好学怎么驱动显卡跟数字图形学哦~)

用一张图描述上面所讲(图中可以知道网卡也有BIOS):


1.15 内存地址空间

前面的那些存储器,在物理上是独立的器件,但是在以下两点上相同。

  • 都和CPU的总线相连
  • CPU对他们进行读或写的时候都是通过控制线发出内存读写命令。

也就是说,CPU控制它们的时候,把它们都当作内存来对待,把它们总的看作一个“由若干个存储单元”组成的“逻辑存储器”,这个逻辑存储器就是我们所说的内存地址空间

逻辑存储器概念图:

我们在基于一个计算机硬件系统编程的时候,必须知道这个系统中的内存地址空间分配情况。(PS:比如我们要在显示器上面显示一些东西,可以改显存地址空间的内容实现,而不是用高级语言封装起来的图形库编程来实现。)

8086PC机内存地址空间分配的基本情况:

最终运行程序的是CPU,我们用汇编语言编程的时候,必须要从CPU的角度考虑问题。对CPU来讲,系统中的所有存储单元都处于一个统一的逻辑存储器中,它的容量受CPU寻址能力的限制。这个逻辑存储器即是我们所说的内存地址空间。

基础知识---汇编学习笔记相关推荐

  1. Python基础知识_学习笔记(20200629更新)

    Python学习笔记 本人跟随pythonav武老师视频课学习 侵权删! 瞎哔哔区: 2020-04-19:跟随武老师视频整理了第一版笔记,计划每周末都将这一周的学习笔记整理出来,供大家分享讨论 20 ...

  2. linux基础知识复习学习笔记

    其实有些东西长久不用就会忘记 疫情期间被隔离在家,把一些基础再复习一下,希望自己能够加深记忆. #20220108-RPM 20220109-yum包管理 20220110-用户组 20220111- ...

  3. html表单基础知识,【学习笔记】html基础知识第四更/与用户交互!(表单标签)...

    使用表单标签--与用户交互 网站怎样与用户进行交互? 答案是使用HTML表单(form). 表单可以把浏览者输入的数据传送到服务器端,这样服务器端程序就可以处理表单传过来的数据. 语法: 讲解: 1. ...

  4. CGAL 基础知识(学习笔记)

    文章目录 一.简介 二.鲁棒性 三.内核表示 四.谓语与构造 五.小结 参考资料 一.简介 CGAL,是一个C++计算几何算法库,其由三个主要部分组成.第一部分是内核(kernal),它由不变大小不可 ...

  5. python---pandas基础知识(学习笔记)

    pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入 了大量库和一些标准的数据模型,提供了高效地操作大型结构化数据集所需的工具. import panda ...

  6. 《uniapp基础知识》学习笔记Day38-(Period2)全局文件一些常用的配置

    如果进行开发的话,首先要配置路由页面 page.json 页面路由 pages.json 文件用来对 uni-app 进行全局配置,决定页面文件的路径.窗口样式.原生的导航栏.底部的原生tabbar ...

  7. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  8. 基础知识的学习,来自十年程序员的经验分享

    本文转载自微信公众号<大飞码字> 前面分享过一篇算法学习的文章 : 不懂算法,还想进大厂?做梦吧. 虽然有点标题党,但内容还是不错的. 后来就想能不能对计算机学习方法和学习心得写个系列的文 ...

  9. AI Studio 飞桨 零基础入门深度学习笔记1-深度学习的定义

    AI Studio 飞桨 零基础入门深度学习-笔记 人工智能.机器学习.深度学习的关系 机器学习 机器学习的实现 机器学习的方法论 案例:牛顿第二定律 确定模型参数 模型结构介绍 深度学习 神经网络的 ...

最新文章

  1. android 计算执行时间
  2. jQuery工具方法
  3. Android开发指南(42) —— Adding Custom Suggestions
  4. ubuntu16.04 apt-get 报错:E: Unable to locate package update(E: Unable to locate package upgrade)(没解决)
  5. linux+4.4+android,Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法
  6. 北工大 研究生 计算机 导师,北京工业大学
  7. Ineedle驱动方式dpdk测试性能
  8. 精灵说科技 java,Java动画动画(精灵)
  9. 数据可视化—如何利用”奶牛“,把图组合起来
  10. python滑动验证_Python实现图片滑动式验证识别方法
  11. 谷尼国际软件-企业竞争情报系统
  12. 六年如逆旅,我亦是行人 ——一个顾问的六年安全从业经历
  13. SpringMVC——MVC思想、前端控制器、SpringMVC概述、编写第一个SpringMVC程序
  14. Webpack的加载器
  15. 07 linux 一个完整的shell脚本调试工具
  16. SYN6288中文语音合成 程序
  17. 牛顿下山法(Python实现)
  18. 重磅 | GitHub私有仓库从此免费,微软要赢开发者的心
  19. android 应用同时装_ARC Welder怎样同时安装或者运行多个安卓应用?
  20. Linux中的update和upgrade的区别

热门文章

  1. 压力测试工具Jemeter安装及使用
  2. 【bzoj2038】[国家集训队2010]小Z的袜子 莫队
  3. python--paramiko模块
  4. sqlite3API函数
  5. HtmlAgilityPack 之 HtmlNode类
  6. Java代码性能优化技巧
  7. ORACLE_LOADER加载外部数据
  8. 机器学习之生成学习算法
  9. Qt中ui文件的使用
  10. 【Leetcode】二分法左侧边界右侧边界模板