1、介绍

一个典型的CPU,由运算器、控制器、寄存器等器件组成,对于游戏修改者来说,重点学习寄存器,其它不必管。
不同的CPU,寄存器的个数、结构是不相同的,8086CPU有14个寄存器,每个寄存器有一个名称,我们对它进行分类:

1.通用寄存器:AX、BX、CX、DX

2.段寄存器:CS、SS、DS、ES

3.指针寄存器:SP、BP

4.变址寄存器:SI、DI

5.指令指针寄存器:IP

6.标志寄存器:FR

2、通用寄存器

AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,被称为通用寄存器。
以AX为例,寄存器的逻辑结构图如下:

字在寄存器中的存储字在寄存器中的存储

3 字在寄存器中的存储

4、物理地址

存储单元又叫内存单元,以后我们多数用内存单元这一名称。
所有的内存单元构成的存储空间是一个一维的线性空间,每一个内存单元在这个空间中都有唯一的地址,我们将这个唯一的地
址称为物理地址。
CPU通过地址总线送入内存的,必须是一个内存单元的物理地址,在CPU向地址总线上发出物理地址之前,必须要在内部先
形成这个物理地址,不同的CPU可以有不同的形成物理地址的方式,我们现在讨论8086CPU是如何在内部形成内存单元的物理
地址的。

5、 8086CPU给出物理地址的方法

8086CPU有20位地址总线,可以传送20位地址,而8086CPU内部结构是16位的,一次性只能传送16位的地址,怎么

解决20位地址与16位地址不一致的问题呢?8086CPU采用一种在内部用2个16位地址合成的方法来形成一个20位的物理地

址。

当8086CPU要读写内存时,怎样在CPU内部形成物理地址的呢?

1:CPU中的相关部件提供2个16位的地址,一个称为段地址,另一个称为偏移地址。

2:段地址和偏移地址通过内部总线送入一个称为地址加法器的部件。

3:地址加法器将这两个16位地址合成为1个20位的物理地址。

地址加法器采用“段地址×16+偏移地址”的方法合成物理地址。即:段地址×16+偏移地址=物理地址。

“段地址×16”可以理解为段地址的16倍,以下这个说法更好理解。

我们把16转化为十六进制10,然后计算一下。假设段地址=2A7,2A7×10=2A70,计算结果2A70相对于段地址2A7左

移了一位,所以,段地址×16可以理解为:段地址左移一位。

问答题:如果段地址=A100,偏移地址=42B,那么,物理地址=?

答:段地址×16=段地址左移一位,即A100左移一位=A1000,A1000+42B=A142B,所以,物理地址是:A142B。

8086CPU要访问地址为123C8H的内存单元,此时,地址加法器的工作过程如下图所示(图中数据皆为十六进制表示):

6  CS和IP

8086CPU在访问内存时,要由相关部件提供内存单元的段地址和偏移地址,然后送入地址加法器合成物理地址,那么,是什

么部件提供段地址呢?是段寄存器提供段地址。8086CPU有4个段寄存器:CS、DS、SS、ES,本章先讲解CS。

CS和IP是8086CPU中2个最为关键的寄存器,它们指示了CPU当前要读取指令的地址,我们看一下CE,可以看出在游

戏中,什么是CPU要读取的指令地址,见下图:

上图指令执行后,AX中的数值为0123H。那么,接下来就是读取、执行下一条指令 BB 03 00(mov bx,0003h)了。

CS和IP的重要性在于它们的数值提供了CPU要执行指令的地址。

在1.5节中,我们说过,在内存中指令和数据没有任何区别,都是二进制信息,CPU在工作的时候,把有的信息看作指令,

把有的信息看作数据,那么,CPU在什么时候把它看作指令?在什么时候把它看作数据呢?现在我们可以回答第一个问题了。

答:只要内存单元(二进制信息)被CS:IP指向,那么,这些内存单元就会被CPU看作指令执行。

7  修改CS和IP的指令

Mov被称为传送指令,可以修改大部分寄存器的值。如:mov ax,123H,将ax中的值设为123H,同样地,我们可以mov
bx,2a4H  mov cx,5f0H  mov dx,b29H 等等。但是,mov不能修改CS和IP这两个寄存器的值,因为8086CPU没有提

供这样的功能。

要修改CS和IP的值,可以用jmp指令,事实上,还有一些指令是可以修改CS和IP的,这些指令被统称为转移指令,这

个在后面的课程会讲到,现在先学习这个最简单的转移指令:jmp。

若想同时修改CS和IP的值,可用形如“jmp 段地址:偏移地址”的指令完成。如:jmp 2ae3:9,执行后:CS=2ae3H,

IP=9H,CPU将从2ae39H处读取指令。

“jmp 段地址:偏移地址”指令的功能为:用指令中给出的段地址修改CS,偏移地址修改IP。

若想仅修改IP的值,可用形如“jmp 某一合法寄存器”的指令完成。如:jmp ax,执行前ax=437aH,CS=17f0H,IP=

423cH,执行后,CS不变,IP=437aH。

“jmp 某一合法寄存器”指令的功能为:用寄存器中的值修改IP。为什么叫“某一合法寄存器”?因为不是所有寄存器都可

以修改IP。

8 代码段

在编程时,可以根据需要,将一组内存单元定义为一个段。段分3种类型:代码段、数据段、栈段。

对于8086PC机,我们可以将长度为N(N≤64KB)的一组代码(机器指令和汇编指令),存在一组地址连续、起始地址为

16的倍数的内存单元中,我们将这一组内存单元定义为代码段。

比如,将:  机器指令        汇编指令

B8 00 00       mov ax,0000H

05 23 01       add ax,0123H

8B D8          mov bx,ax

FF E3          jmp bx

这段长度为10字节的指令,存放在123B0H~123B9H的一组内存单元中,我们就可以认为这是一个代码段。若要让CPU

执行这些指令,必须要将CS:IP指向代码段中第一条指令的首地址(123B0H)

汇编语言之寄存器(CPU工作原理)相关推荐

  1. 汇编语言学习-寄存器(CPU工作原理)

    寄存器概述: 1,一个典型的CPU由运算器,控制器,寄存器等器件组成,这些器件靠内部总线相连. 内部总线实现CPU内部各个器件之间的联系.外部总线实现CPU和主板上其它器件的联系. 2,8086CPU ...

  2. 寄存器(CPU工作原理)04 - 零基础入门学习汇编语言09

    第二章:寄存器(CPU工作原理)04 让编程改变世界 Change the world by program 段的概念 错误认识: 内存被划分成了一个一个的段,每一个段有一个段地址. 其实是: 内存并 ...

  3. 计算机CPU工作原理及汇编语言简介

    计算机CPU工作原理及汇编语言简介(链接)        从微信公众号把原文直接复制过来,发现图片.表格经常丢失,只有纯文字,所以建议直接点击上述链接阅读. 复制过来的纯文字内容如下(图片.表格丢失, ...

  4. 计算机原理学习(1)-- 冯诺依曼体系和CPU工作原理

    前言 对于我们80后来说,最早接触计算机应该是在95年左右,那个时候最流行的一个词语是多媒体. 依旧记得当时在同学家看同学输入几个DOS命令就成功的打开了一个游戏,当时实在是佩服的五体投地.因为对我来 ...

  5. 一文读懂CPU工作原理、程序是如何在单片机内执行的、指令格式之操作码地址码

    文章较长,大家可选择性阅读,嘎嘎细 计算机结构 CPU的运行原理 CPU的控制单元在时序脉冲的作用下,将指令计数器里所指向的指令地址(这个地址是在内存里的)送到地址总线上去,然后CPU将这个地址里的指 ...

  6. 单核CPU与多核CPU工作原理

    单核CPU与多核CPU工作原理 今天要介绍一下单核CPU和单核(超时间轴)CPU以及多核CPU的工作原理 一.单核CPU 起源: CPU的起源是1971年英特尔公司推出,由此正式宣告计算机的诞生,可以 ...

  7. 计算机多核启动原理,多核cpu工作原理 不进来看看?

    cpu是一个对电脑来说非常重要的配件,所以在关于它的知识上朋友们可千万要注意,所以今天小编想为大家讲的是多核cpu工作原理的相关内容,喜欢的朋友们赶紧收藏,相信对大家会有帮助. 多核cpu工作原理 1 ...

  8. 一文了解二进制和CPU工作原理

    Part 1. 原来,我们是这样记数的 " 本节内容节选自下方 参考资料 1 在讨论「二进制」和「CPU 如何工作」之前,我们先来讨论一下我们生活中最稀疏平常的 数字,我们与之频繁地打交道: ...

  9. 「MoreThanJava」一文了解二进制和CPU工作原理

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」,本系列 Java 基础教程是自己在结合各方面的知识之后,对 Java 基础的一个总回顾,旨在 「帮助新朋友快速高质量的学习」. 当然 ...

  10. cpu工作原理flash动画_cpu的基本结构及其工作原理

    中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Control Unit).它的功能主要是解释计算机指令以 ...

最新文章

  1. 异常处理(try/catch)
  2. C++ 产生0-2之间的随机数
  3. python的编程模式-Python 编程,应该养成哪些好的习惯?
  4. Web文件管理器 elfinder-彩龙社区
  5. Stats mac免费版 2.4.9(支持M1驱动器的mac,最新macOS系统)
  6. 灰度值取值范围_第三章 灰度变换与空间滤波-(三)直方图之直方图均衡
  7. 时间序列趋势分解 seasonal_decompose
  8. 有乳胶枕吗_乳胶枕怎么挑?网传的踩鸡蛋检测法,实际不靠谱
  9. bzoj 4033: [HAOI2015]树上染色(树形DP)
  10. [转载] python创建集合、计算a|b_python之路(集合,深浅copy,基础数据补充)
  11. matlab中平方根法,平方根法和改进的平方根法解线性方程组(Matlab程序)
  12. Jenkins添加注册用户默认权限/Add a default authenticated user role
  13. python爬虫学习之XPath基本语法
  14. Java与微信不得不说的故事——消息的接收与发送
  15. POI设置excle单元格样式
  16. win7如何设置wifi热点_win7台式机如何设置IP地址为固定的IP地址?
  17. android怎么用经纬度定位,android 根据经纬度定位所在城市
  18. 华为董事长不是任正非,而是她
  19. [转]将106键盘布局(日式键盘布局)改为101键盘布局(美式键盘布局)(
  20. 华为鸿蒙系统烤箱,华为鸿蒙OS系统如何支持形态各异的产品?

热门文章

  1. 架构 | 聊聊我心中的架构设计观
  2. WPF Datagrid合并表头的思路
  3. 回顾 | 在 GitHub 上贡献到开源项目
  4. 中国宜坚持发展自主操作系统
  5. 对CORS OPTIONS预检请求的一些思考
  6. EntityFramework Core 迁移忽略主外键关系
  7. 鲲鹏来了,在EulerOS试用.NETCore-3.1
  8. 一个通用数据库操作组件DBUtil(c#)、支持SqlServer、Oracle、Mysql、postgres、SQLITE
  9. corefx 源码学习:SqlClient 是如何同步建立 Socket 连接的
  10. .NET Core微服务之路:基于Ocelot的API网关实现--http/https协议篇