1、机器语言和汇编语言

机器语言是机器指令的集合。机器指令展开来说就是一个可以正确执行的命令,电子计算机的机器指令是一列二进制数字,计算机将之转变为一列高低电平,以使计算机的电子器件受到驱动,进行计算。

在我们通常的PC中,有一个芯片来完成上面的计算机的功能。这个芯片就是我们常说的CPU(Central Processing Unit,中央处理单元)。

每一种微处理器,由于硬件设计和内部结构的不同,就需要用不同的电平脉冲来控制,使它工作。所以每一种微处理器都有自己的机器指令集,也就是机器语言。

由于机器语言书写和记忆都比较麻烦,所以产生了汇编语言。汇编语言的主体是汇编指令。汇编指令和机器指令的差别在于指令的表示方法上。汇编指令是机器指令便于记忆的书写格式。

//操作:寄存器BX的内容送到AX中
机器指令:    1000100111011000
汇编指令:    mov ax,bx

汇编语言出现以后,程序员使用汇编指令编写程序。但是计算机能读懂的只有机器指令,所以需要有一个能够将汇编指令转换成机器指令的翻译程序,我们称之为编译器。程序员用汇编语言写出源程序,再用汇编编译器将其编译为机器码,由计算机最终执行。过程如下图。

那么,汇编语言的指令有哪些呢?一共有三类:

(1)汇编指令: 机器码的助记符,有对应的机器码。

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

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

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

2、CPU是怎么工作的

CPU是计算机的核心部件,控制整个计算机的运作并进行运算。要想让一个CPU工作,就必须向它提供指令和数据。指令和数据在存储器中存放,也就是常说的内存,离开了内存,性能再好的CPU也无法工作。磁盘不同于内存,磁盘上的数据或程序如果不读到内存,就无法被CPU使用。所以我们首先需要了解CPU如何从内存中读取信息和写入信息。

存储器被划分为若干个存储单元,每个存储单元从0开始顺序编号。一个存储单元是一个Byte,一个Byte是8个bit,就是8位,也就是8个0/1值,例如10001111就是一个Byte。

在内存和磁盘上,数据和指令没有任何区别,都是0/1二进制信息,关键是CPU在工作的时候把有的信息看作指令,有的信息看作数据,为同样的信息赋予了不同的意义。

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

a) 存储单元的地址(地址信息)

b) 器件的选择,读或写的命令(控制信息)

c) 读或写的数据(数据信息)

CPU从内存中读取数据,就要将地址、数据和控制信息传到内存芯片中。在计算机中专门有连接CPU和其他芯片的导线,通常称为总线,根据传送信息的不同,从逻辑上分为地址总线、控制总线和数据总线3类。

例如CPU从3号单元中读取数据的过程如下。

1) CPU通过地址线将地址信息3发出。

2) CPU通过控制线发出内存读命令,选中存储区芯片,并通知它,将要从中读取数据。

3) 存储器将3号单元中的数据8通过数据线送入CPU。

写操作与读操作类似,例如向3号单元写入数据26。

1)CPU通过地址线将地址信息3发出。

2)CPU通过控制线发出内存读命令,选中存储区芯片,并通知它,将要从中写入数据。

3)CPU通过数据线将数据26送入内存的3号单元中。

到此我们知道了CPU是如何进行数据读写的,那么如何命令计算机进行数据读写呢?答案就是向CPU输入能够驱动它进行工作的电平信息(机器码)。

例如对于8086CPU,下面的机器码能够完成从3号单元读数据

机器码:                  101000010000001100000000对应的汇编指令             MOV AX,[3]
含义:                    从3号单元读取数据送入寄存器AX

一个CPU有N根地址线,则可以说这个CPU的地址总线的宽度为N。这样的CPU最多可以寻找2的N次方个内存单元。

数据总线的宽度决定了CPU和外界的数据传送速度。8根数据总线一次可传送一个8位二进制数据,16根数据总线一次可传送两个字节。

控制总线是一些不同控制线的集合,有多少根控制总线,就意味着CPU提供了对外部器件的多少种控制。所以控制总线的宽度决定了CPU对外部器件的控制能力。

计算机系统中,所有可以用程序控制其工作的设备,必须受到CPU的控制。CPU对外部设备不能直接控制,直接控制这些设备进行工作的是插在扩展插槽上的接口卡。扩展插槽通过总线和CPU相连,所以接口卡也通过总线同CPU相连。CPU可以直接控制这些接口卡,从而实现CPU对外设的间接控制。简言之,就是CPU通过总线向接口卡发送命令,接口卡根据CPU的命令控制外设进行工作。

一台PC机装有多个存储器芯片,它们从读写属性上分为随机存储器(RAM)和只读存储器(ROM),RAM可读可写,但必须带电存储,关机后存储的内容丢失,ROM只能读取不能写入,关机后其中的内容不丢失。这些存储器从功能和连接上可分为以下几类。

1)随机存储器

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

2)装有BIOS(Basic Input/Output System,基本输入输出系统)的ROM

  BIOS是由主板和各类接口卡厂商提供的软件系统,可以通过它利用该硬件设备进行最基本的输入输出。

3)接口卡上的RAM

  某些接口卡需要对大批量输入输出数据进行暂时存储,在其上装有RAM。最典型的是显示卡上的RAM,一般称为显存。

                PC机中各类存储器的逻辑连接

上述的存储器,在物理上是独立的器件,但是都是和CPU的总线相连,CPU对它们进行读写的时候都通过控制线发出内存读写命令。也就是说,CPU在操控它们的时候,把它们都当作内存对待。也就是说,对于CPU而言,系统中的所有存储器中的存储单元处于一个统一的逻辑存储器中,它的容量受CPU寻址能力的限制。如下图所示。

所以,我们在基于一个计算机硬件系统编程的时候,必须知道这个系统中的内存地址空间分配情况。因为当我们想在某类存储器中读写数据的时候,必须知道它的第一个单元的地址和最后一个单元的地址,才能保证读写操作是在预期的存储器中进行。

不同计算机系统的内存地址空间的分配情况是不同的,下图展示了8086PC机内存地址空间分配的基本情况。

上图表示,从地址0~9FFFF的内存单元读取数据,实际上就是在读取主随机存储器中的数据;向地址A0000~BFFFF的内存单元写数据,就是想显存中写入数据,这些数据会被显示卡输出到显示器上;向地址C0000~FFFFF的内存单元中写入数据的操作是无效的,因为这等于改写只读存储器中的内容。

转载于:https://www.cnblogs.com/gkp307/p/9907950.html

汇编语言介绍,内存和总线的初步认识相关推荐

  1. solidity 汇编语言问题——内存数据mload时为什么从第32位开始

    问题:内存数据mload时为什么从第32位开始 代码出处:https://gist.github.com/axic/5b33912c6f61ae6fd96d6c4a47afde6d pragma so ...

  2. CAN总线的初步认识

    1.概述: CAN(Controller Area Network)即控制器局域网,是一种能够实现分布式实时控制的串行通信网络.一般形式是一个pc端(包括嵌入式系统.单片机系统)与多个设备(传感器.仪 ...

  3. 汇编语言 修改内存中的过时数据

    题目要求 编程,修改内存中的过时数据 运行过程 改之前 改数字之后 改字母之后 代码 ;编程,修改内存中的过时数据 ;存放ascii码用db,存放数据用dw assume cs:codesg,ds:d ...

  4. 汇编语言 向内存0:200~0:23f依次传送数据0~63(3fh)

    题目要求 向内存0:200~0:23f依次传送数据0~63(3fh) 分析 0:200~0:23f也就是0000:0200~00000:023f 运行结果 代码 ;向内存0:200~0:23f依次传送 ...

  5. 实训汇编语言设计——内存多字节10进制数相加

    将内存first区多字节10进制数与second区相同10进制数相加,结果保存到dest区 DATA   SEGMENT FIRST  DB 11H, 22H, 33H, 44H, 55H, 66H, ...

  6. 微服务项目之电商--9.商城架构图及商城管理系统前端页面介绍及电商项目初步搭建(1)

    目录 一.商城架构图 前端: 二.商城管理系统前端页面 1.SPA介绍 2.webpack 四个核心概念 3.vue-cli 安装 4.项目测试 三.电商项目搭建 创建父模块管理 创建子模板注册中心l ...

  7. 介绍内存一致性(Memory Consistency)和缓存一致性(Cache Coherence)

    为了追求PPA(高性能.低功耗和低成本),许多现代计算机系统和多核(处理器)芯片都支持共享硬件内存.在存在共享内存的存储器系统中,每个处理器都可以读写某个共享地址空间. 在支持共享内存之前最重要的是保 ...

  8. 初步判断内存泄漏方法

    有时候,内存泄漏不明显,或者怀疑系统有内存泄漏,我们可以通过下面介绍的方法初步确认系统是否存在内存泄漏. 首先在Java命令行中增加-verbose:gc参数, 然后重新启动java进程. 当系统运行 ...

  9. AMBA、AHB、APB、AXI总线介绍和对比

    一.引出 研究STM32H7的总线系统,对AXI.AHB.APB.ASB有点兴趣,于是去简单了解了一下,总结如下: 说到AXI.AHB.APB.ASB就得先说AMBA(Advanced Microco ...

最新文章

  1. 利用runtime实现KVO
  2. everything每次打开都会扫描_每次启动车,转方向盘都会咔一下,咋回事?
  3. ESP8266的网状网络(Mesh Network)
  4. Spring MVC Hibernate验证器使用示例
  5. 理解微信小程序Wepy框架的三个事件交互$broadcast,$emit,$invoke
  6. .NET Core on K8S学习实践系列文章索引(持续更新)
  7. ssh连接不上linux虚拟机
  8. LeetCode 708. 循环有序列表的插入
  9. 使用计算机六年级,二十年后的电子计算机六年级作文
  10. PHP的OB缓存(输出缓存)
  11. php debug pit,start.php
  12. 现在需要在input框输入年月yyyymm的正则_税务师报名时间、考试报名官网2021年安排_税务师...
  13. 自己研发的系统给rtx发消息
  14. 佳能Canon MF4700 一体机驱动
  15. Mac 系统安装Chromedriver
  16. list(map(tokenizer.tokenize, text))
  17. YTU OJ-1329: 手机尾号评分
  18. CentOS6.5挂载大于2TB的磁盘使用parted和GPT类型
  19. 【人工智能】机器学习:岭回归与LASSO回归(Ridge/LASSO Regression)
  20. Spherical harmonics 和 cubemap 的关系

热门文章

  1. 基础补充:使用xlrd模块读取excel文件
  2. jQuery练习---- 超简单的表格悬停变色Demo
  3. 在struts2中訪问servletAPI
  4. iis启动默认页无法访问错误类型500的解决
  5. filebeat6.2.3收集多个日志源 多个topic输出
  6. Java初学者福音——自动设置环境变量
  7. Win64 驱动内核编程-14.回调监控文件
  8. 解决Cesium无法加载出地球的问题
  9. 【C 语言】字符串操作 ( strlen 与 sizeof 函数 | 计算 字符串长度 与 内存块大小 )
  10. 【Android 安装包优化】Android 中使用 7zr 可执行程序 解压缩文件