汇编语言学习笔记03——寄存器(CPU工作原理)

引言

在笔记01和02我们主要学习了CPU的外部通讯,即CPU如何和其他的器件去联系。
而现在呢我们要学习的是内部通讯,即CPU内部是如何工作的。

这一段的内容重点在段寄存器上,包括偏移地址 物理地址等。

由于将基础知识分为第一大块内容,所以我们现在从 2 来命名

2.1 CPU的概述

一个典型的CPU有运算器、控制器、寄存器等器件组成,这些器件需要靠内部总线相连。

那么我们之前学的地址总线等等三种总线又是什么呢?和CPU内部的总线不一样,它们统称为外部总线。 外部总线主要负责的是实现CPU和主板上各个器件之间的联系。

CPU的组成

  • 运算器进行信息处理。主要有一些算术逻辑单元组成。
  • 寄存器进行信息存储。CPU内部用于存储数据的单元
  • 控制器协调各种器件进行工作。

2.2 寄存器

寄存器是CPU内部的信息存储单元

还是以8086CPU来举例,其共有14个寄存器:

  • 通用寄存器:AX, BX, CX, DX。一般用于存储运算过程中的临时数据。
  • 变址寄存器:SI, DI
  • 指针寄存器:SP, BP
  • 指令指针寄存器:IP
  • 段寄存器:CS, SS, DS, ES
  • 标志寄存器:PSW

共性:8086CPU所有的寄存器都是16位的,可以存放两个字节

2.2.1 通用寄存器

我们以AX为例。

这是一个16位的寄存器,用来存储一个16位的数据,它所能存储的最大值显然是2的16次方-1(因为都是二进制存储),用16位表示最大值则是FFFFH。

那我们现在来存储18D(D是十进制)这个数据。
在这里插入图片描述

以上是这些通用寄存器的存储形式,BX,CX等都是一样的。

现在来想一个问题,8086是16位的,那我们现在都是64位的,再往前8088是8位的,这样就导致后代的CPU编写出来的程序,在前代没法用,那又如何去保证程序的兼容性呢?

方法是:将通用寄存器分为两个独立的8位寄存器。即我们上次说过的高低位——AX分为AH(high)和AL(low),这样就可以和上一代的8位寄存器适配了。

在这里插入图片描述
我们不难发现,十六进制的4E20很容易对应出来其二进制,而十进制在分开后就不是很直观,所以我们在学习汇编语言的时候,要习惯用过十六进制。

AX可以分为AH和AL,其他的通用寄存器也是同样的。

2.22 变址寄存器——SI DI

由于网课的安排并没有一下子就讲完所有的寄存器,所以这里等讲到了我会补上。

2.23 指针寄存器——SP BP

指针寄存器要跟SS堆栈寄存器一起使用。
SP是一个一直指向栈顶的指针,比如存一个0123H在栈里,SP就会自动+2.
而BP是用来协助SP去找到我们需要的地址,由于SP只能指向栈顶,所以我们必须再找一个BP去找到操作数对应的地址。

2.24 指令指针寄存器——IP

IP寄存器常常和CS段寄存器一起使用,用CS:IP来作为一个地址,指向的内容作为指令被CPU执行。

由于汇编指令翻译成机器指令后一般由三个内存单元存储,比如把mov ax,0123H这个指令放到物理地址为CS:IP=2000:0000的地方,其实是20002存储01,20001存储23,20000存储B8.
这样一来,执行完这条指令后,IP寄存器就会自动+3,变为0003。
在这里插入图片描述
可以看到执行完之后IP加了3(图中指令没有完全按照文字说的来,但IP都是一样的)

2.25 段寄存器——CS SS DS ES

段寄存器是专门用来存放段地址的寄存器。

8086CPU中一共有4个段寄存器——

  • CS(Code Segment)代码段寄存器:
    存放当前正在运行的程序代码所在段的基地址,表示当前使用的指令代码可以从该段寄存器指定的存储器段中取得,相应的偏移量则由IP提供。
  • DS(Data Segment)数据段寄存器:
    指出当前程序使用的数据所存放段的最低地址,即存放数据段的基地址。
  • SS(Stack Segment)堆栈段寄存器:
    指出当前堆栈的底部地址,即存放堆栈段的基地址。
    堆栈和push以及pop等指令有关,可以看之后的指令相关博客去更加深入了解SS和SP和BP
  • ES(Extra Segment)附加段寄存器:
    指出当前程序使用附加数据段的段基址,该段是串操作指令中目的串所在的段。

2.26 标志寄存器——PSW

由于网课的安排并没有一下子就讲完所有的寄存器,所以这里等讲到了我会补上。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值