【汇编】CPU——CPU组成、寄存器、通用寄存器、段寄存器字在寄存器中的存储、MOV,ADD,16位结构CPU,物理地址的组成、CS:IP的作用,代码段、DEBUG基本指令操作

CPU

  • 第二章 CPU
    • CPU概述
      • 寄存器概述
    • 2.1 通用寄存器
    • 2.2 字在寄存器中的存储
    • 2.3 简单汇编指令(MOV,ADD)
      • 练习
    • 2.4 物理地址
    • 2.5 16位结构的CPU
      • 问题:那么如何用16位数据转换成20位地址呢?
    • 2.7 段地址*16+偏移地址=物理地址
    • 2.8 段的概念
      • 两个问题
    • 2.9 段寄存器
    • 2.10 CS:IP
    • 2.11 修改CS、IP的指令
      • 例题
    • 2.12 代码段
      • 问题:如何使代码段中的指令执行呢?
    • 2.13 DEBUG模式(重要)
      • 实例

第二章 CPU

CPU概述

一个典型的CPU由运算器、控制器、寄存器等器件组成,这些器件靠内部总线相连。
内部总线;内部总线实现CPU内部各个期间之间的联系。
外部总线:外部总线实现CPU和主板上其他器件之间的联系

寄存器概述

在这里插入图片描述

2.1 通用寄存器

AX,BX,CX,DX通常用来存放一半性的数据被称为通用寄存器。
在这里插入图片描述
16位的寄存器可以存放一个16位的数据。
在这里插入图片描述
例:
在这里插入图片描述
AX的低8位0-7位构成了AL寄存器高8位8-15位构成了AH寄存器。AH和AL寄存器是可以独立使用的8位寄存器,且单独在AL或AH运行的运算不进行进位
在这里插入图片描述
在这里插入图片描述

2.2 字在寄存器中的存储

1字=2字节=2B=2内存单元
而高低位寄存器ALAH组合出来的AX正好为一个字的数据。

2.3 简单汇编指令(MOV,ADD)

在这里插入图片描述

在这里插入图片描述

练习

那下面这个最后一步应该是多少呢?0158H吗?
但其实并不是这样,上面说过,因为单独看为一个al寄存器,所以不向上进位,为0058H
在这里插入图片描述
但这里的丢失并不是真的丢弃这个进位值,只是表示其不能在八位寄存器中保存,会存储在别的地方,在后面会有谈论。

2.4 物理地址

在这里插入图片描述

2.5 16位结构的CPU

特征:

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

8086有20位地址总线,可以传送20位地址,寻址能力为2^20B=1MB
但8086内部为16位的结构,只能传送16位地址,寻址能力只有64K。

问题:那么如何用16位数据转换成20位地址呢?

可以使用两个16位的地址合成一个20位物理地址。
CPU中提供两个相关部件分别提供两个16位地址,一个称为段地址,另一个称为偏移地址
具体实现就是将段地址*16,也就是左移一位与偏移地址进行相加。

通过地址加法器对段地址和偏移地址进行相加。
在这里插入图片描述
地址加法器合成物理地址方法(极其重要):
物理地址=段地址16+偏移地址
因为是16进制,所以
16等于左移一位。1230*16=12300。

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

2.7 段地址*16+偏移地址=物理地址

这一个实际意义其实相当于我们只能通过纸条来通信,来告诉CPU要执行命令的所在地址,我们需要四位数据的纸条来传播信息,但不巧只有三位数据的纸条,那么我们只能通过用两张三位数的方法来告诉CPU相应的地址了,三位数的第一个条数据进行左移再相加,就达成了和四位数据纸条一样的效果。
在这里插入图片描述
在这里插入图片描述

2.8 段的概念

实际上内存并没有被划分为段,段的划分是由CPU来划分的,通过段地址16+偏移地址=物理地址的方式来给出物理地址,使得我们可以用分段的方式管理内存。
通过段地址
16定位起始地址,用偏移地址定位内存单元。
偏移地址为16位,16位地址寻址能力为64KB,所以一个段的最大长度也为64KB。

在这里插入图片描述

两个问题

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

2.9 段寄存器

段寄存器就是提供段地址的。
8086CPU有四个段寄存器:CS,DS,SS,ES,其具体作用和区别在后面会详解。
当CPU要访问内存是,由这四个段寄存器来提供内存单元的段地址。

2.10 CS:IP

CS是代码段寄存器,IP为指令指针寄存器
他们指示了CPU下一步要执行命令的地址在什么地方。
执行命令的流程:
在这里插入图片描述
在这里插入图片描述
CS,IP中的内容分别当成指令的段地址偏移地址

2.11 修改CS、IP的指令

语法:JMP 段地址:偏移地址 即 JMP CS:IP

要修改IP的值,可以先mov ax,数值,然后jmp ax,利用寄存器中的值来修改IP,这种方法只修改IP不修改CS。
在这里插入图片描述

例题

先别看答案,写一下CPU正常运行的顺序流程。
在这里插入图片描述
正确执行顺序:
mov ax,6622H
Jmp 1000:3
Mov ax,0000
Mov bx,ax
Jmp bx
Mov ax,0123H

2.12 代码段

在这里插入图片描述

在这里插入图片描述

问题:如何使代码段中的指令执行呢?

CPU只认被CS:IP指向的内存单元中的内容为指令。
所以要将CS:IP指向第一条指令的首地址

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

2.13 DEBUG模式(重要)

debug可以用WIN+R输入debug使用debug模式。或者使用doxbox小型虚拟机来进行练习。
在这里插入图片描述

实例

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

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

在这里插入图片描述
在这里插入图片描述
无法进行修改是因为,这部分是直接写在主板BIOS中ROM存储器的,相当于只读存储,无法进行修改。
底下两行代码这是修改了显存地址空间中的数据,所以在显示器上进行了显示。
在这里插入图片描述
在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部