汇编 (2)寄存器 (cpu工作原理)

一. CPU概述

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

  • 内部总线实现CPU内部各个器件之间的联系
  • 外部总线实现CPU和主板上其它器件的联系

二. 寄存器概述

拿8086cpu为例,他有14个寄存器 它们的名称为:
AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW

2.1 通用寄存器
  • 8086CPU所有的寄存器都是16位的,可以存放两个字节
  • AX、BX、CX、DX 通常用来存放一般性数据被称为通用寄存器
  • 一个16位寄存器可以存储一个16位的数据
  • 一个16位寄存器所能存储的数据的最大值为2的16次方-1
    在这里插入图片描述

一个二进制数据10010 在16位寄存器存放
在这里插入图片描述
8086上一代CPU中的寄存器都是8位的,为保证兼容性,这四个通用寄存器都可以分为两个独立的8位寄存器使用:

  • AX可以分为AH和AL
  • BX可以分为BH和BL
  • CX可以分为CH和CL
  • DX可以分为DH和DL

以AX通用寄存器为例,8086CPU的16位寄存器分为两个8位寄存器的情况:
在这里插入图片描述

  • AX的低8位(0位~7位)构成了AL寄存器,高8位(8位~15位)构成了AH寄存器。
  • AH和AL寄存器是可以独立使用的8位寄存器

一个 十进制值 20000在两个8位寄存器中存放:

在这里插入图片描述
在这里插入图片描述

2.2 字在寄存器中的存储

说明
每个寄存器是一个字,每个字占16位二进制位,每个字节占8个二进制位,一个字占两个字节,这个字的高位字节和低位字节自然就存在这个寄存器的高8位寄存器和低8位寄存器中
在这里插入图片描述

三. 简单的汇编指令

在这里插入图片描述

注意:汇编指令不区分大小写!!

四. 物理地址

CPU访问内存单元时要给出内存单元的地址。所有的内存单元构成的存储空间是一个一维的线性空间,我们将这个唯一的地址称为物理地址
概括的讲,16位结构描述了一个CPU具有以下几个方面特征

  1. 运算器一次最多可以处理16位的数据。
  2. 寄存器的最大宽度为16位
  3. 寄存器和运算器之间的通路是16位的

8086CPU有20位地址总线,他的可传送20位地址,寻址能力为1M,他的内部为16位结构,它只能传送16位的地址,表现出的寻址能力却只有64K。
问题来了,8086CPU如何用内部16位的数据转换成20位的地址呢?

答:CPU采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址~

在这里插入图片描述
8086CPU读写内存时:

  1. CPU中的相关部件提供两个16位的地址,一个称为段地址,另一个称为偏移地址
  2. 段地址和偏移地址通过内部总线送入一个称为地址加法器的部件
  3. 地址加法器将两个16位地址合并成一个20位的地址
  4. 地址加法器合成物理地址的方法 -> 物理地址 = 段地址×16 + 偏移地址

例如:
8086CPU访问地址为123C8H的内存单元
在这里插入图片描述

五. 地址加法器实现 段地址x16

“段地址×16”有一个更为常用的说法就是 段地址的二进制位左移4位
在这里插入图片描述

七. 段

7.1 段的概念

错误认识:

  • 内存被划分成了一个一个的段,每一个段有一个段地址

其实,内存并没有分段,段的划分来自于CPU,由于8086CPU用 “段地址×16+偏移地址=物理地址” 的方式给出内存单元的物理地址,使得我们可以用分段的方式来管理内存

在这里插入图片描述
编程时可以根据需要,将若干地址连续的内存单元看作一个段,用 段地址×16定位段的起始地址(基础地址)加偏移地址定位段中的内存单元

  • 段地址×16 必然是 16的倍数,所以一个段的起始地址也一定是16的倍数;
  • 偏移地址为16位,16 位地址的寻址能力为 64K,所以一个段的长度最大为64K

学到这里得到两个公式 设 段地址为 SA 偏移地址为EA

  • (SA x 16) + EA = 物理地址
  • 0 ≤ EA ≤ 16位 (二进制)
  • 0 ≤ EA ≤ 64K (十进制)
  • 0 ≤ EA ≤ ffff(十六进制)

题目1:给定段地址为0001H,仅通过变化偏移地址寻址,CPU的寻址范围为___到___

  • 根据公式 可以得出 段地址的内存范围为(0001h*16+0h)~(0001h*16+ffffh) 即=0010h ~1000fh 之间

题目2:有一数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为___,最大为 ___

  • 公式:20000h=SA*16+EA,SA=(20000h-EA)/16
  • EA取最大值时SA就是 最小值: SA=2000h-ffffh/16=1001h
  • EA取最小值时SA就是 最大值: SA=2000h-0h/16=2000h
7.2 段寄存器

段内存地址是存放在段寄存器中的

拿8086CPU来举例,他有有4个段寄存器:
CS、DS、SS、ES

当8086CPU要访问内存时,由这4个段寄存器提供内存单元的段地址

CS寄存器和IP寄存器是8086CPU中最关键的两个寄存器,它们指示了CPU当前要读取指令的地址:

  • CS为代码段寄存器;

  • IP为指令指针寄存器 (偏移地址)

  • 在 8086CPU 加电启动或复位后( 即 CPU刚开始工作时)CS和IP被设置为CS=FFFFH,IP=0000H

  • CPU从何处执行指令是由CS、IP中的内容决定的,程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值