0%

第二章 寄存器(CPU工作原理)

通用寄存器

8086 CPU内部寄存器都是16位
将AX,BX,CX,DX四个寄存器称为通用寄存器
通用寄存器可以拆分为两个8位寄存器来用:AX -> AH & AL

字在寄存器中的存储

字:两个字节组成,高位字节和低位字节

一个十六位寄存器的数据可以看成一个字型数据,也可以看成两个字节型数据

几条汇编指令

汇编语言中英文字母不区分大小写

汇编指令 操作 描述
MOV AX, 18 将18送入AX AX = 18
MOV AH, 78 将78送入AH AH =78
ADD AX, 8 将AX值加8 AX = AX + 8
MOV AX, BX 将BX中数据送入AX AX = BX
ADD AX, BX 将AX和BX中数相加,保存在AX中 AX = AX + BX

当所保存的数据位数大于寄存器的位数时,高位的数据会丢失,称为数据溢出
当通用寄存器作为8位寄存器使用时,低8位和高8位相当于两个独立的寄存器,它们之间没有直接关系,不能产生进位

在进行数据传送或运算时,要注意指令的操作数的位数要匹配。
mov AX BL位数不匹配会报错

物理地址

存储单元按序编号,即为其物理地址

8086/8088 CPU对外有20根地址线寻址,所以其系统中的内存单元物理地址编号为20位

寻址:将输入的 20 位二进制地址,转换为输出的 8 位或 16 位二进制数值。
第二章-寄存器-2025-10-22-17-05-49

16位结构CPU

16位机:

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

物理地址=段地址×16+偏移地址=段地址<<4+偏移地址

8086CPU给出物理地址的方法

第二章-寄存器-2025-10-22-17-15-23

  1. CPU中的段寄存器(CS)提供段地址,指令指针寄存器(IP)提供偏移地址
  2. 段地址和偏移地址通过内部总线送入地址加法器
  3. 地址加法器将两个16位地址合成一个20位的物理地址;
  4. 地址加法器将20位的物理地址送输入输出控制电路
  5. 输入输出控制电路将20位物理地址送上外部地址总线
  6. 地址总线将20位物理地址送入内存,寻址

“段地址×16+偏移地址=物理地址”本质含义

CPU在访问内存时,用一个基础地址(段地址× 16)和一个相对于基础地址的偏移地址相加,给出了内存单元的物理地址。

段的概念

段是为管理内存引入的虚拟概念,将内存地址连续、起始地址为16的倍数的一组内存单元看作一个段来管理,但事实上,内存并没有被真正划分成段

段地址× 16必然是16的倍数,所以一个段的起始地址一定是16的倍数;
偏移地址为16位,所以一个段的长度最大为64KB。

第二章-寄存器-2025-10-22-17-28-38

CPU可以用不同的段地址和偏移地址形成同一个物理地址。
从这里可看出,分段仅仅是一个虚拟的概念。

段寄存器

在CPU中提供段地址的寄存器

段寄存器(DS,SS,ES)不能直接用立即数赋值,必须用寄存器中转,CS只能JMP/CALL等间接改变

CS和IP

CS—代码段:提供当前要执行的指令的段地址。
IP—指令指针寄存器:指向当前要执行的指令的偏移地址。

地址加法器合成一个20位的物理地址,该地址为当前要执行的指令所在的位置(CS:IP)

  1. 从CS:IP指向内存单元读取指令,读取的指令进入指令缓冲器;
  2. IP=IP+N,从而指向下一条指令;
  3. 执行和处理取到的指令,重复步骤(1)

修改CS、IP的指令

若想同时修改CS、IP的内容,可用
jmp 段地址:偏移地址
jmp 2AE3:3CS=2AE3H,IP=0003H

若单独修改IP地址
若只修改IP的内容,可用
jmp 某一合法寄存器jmp AX

注意:CS和IP不允许直接赋值,即MOV CS 1000H时错误的

代码段

用来存放指令的段称为代码段,代码段由CS:IP来确定