寄存器(CPU的工作原理)

本文详细介绍了8086CPU的寄存器结构,包括通用寄存器的拆分和使用,以及汇编指令示例。同时阐述了物理地址的概念,8086如何通过段地址和偏移地址合成20位物理地址。讨论了段的概念,段寄存器的作用,特别是CS和IP寄存器在确定指令地址中的关键角色,并举例说明了转移指令的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通用寄存器

8086CPU有14个寄存器,他们的名字称为诶:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
8086CPU所有的寄存器都是16位的,可以存放两个字节。
为了保证兼容性,这四个寄存器都可以分为两个独立的8位寄存器使用。
AX可以分为 AH还有AL; AH还有AL寄存器是可以独立使用的8位寄存器。
BX可以分为BH还有BL;
CX可以分为CH还有CL;
DX可以分为DH还有DL;

字在寄存器中的存储

一个字可以存在一个16位的寄存器中,这个字的高位字节和低位字节自然就存在这个寄存器的高8位寄存器和低8位寄存器中。

几条汇编指令

汇编指令是不区分大小写的
mov AX,BX 的意思是将BX中的数据放在AX中
add AX,BX 的意思是将BX与AX相加,放在AX中

如果超过数据的存储范围,就会有数据的丢失
这里的丢失,指的就是进位制不能在8位寄存器中保存,但是CPU不是真的丢弃这个进位值。

物理地址

CPU访问内存单元的时候要给出内存单元的地址,所有的内存单元构成的存储空间是一个一维的线性空间。
我们将这个唯一的地址称为物理地址。
决定一个CPU是多少位的,有以下三方面的特点

  • 运算器一次最多可以处理16位的数据。

  • 寄存器的最大宽度为16位。

  • 寄存器和运算器之间的通路是16位的。
    8086CPU在读写内存的时候,发生了一些事情:

  • CPU中的相关部件提供两个16位的地址,一个称为段地址,另一称为偏移地址

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

  • 地址加法器将两个16位地址合并成一个20位的地址。
    地址加法器合成物理地址的方法:
    物理地址=段地址×16+偏移地址

段的概念

内存并没有分段,段的划分来自于CPU,由于8086CPU用“段地址*16”+偏移地址=物理地址的方式。实际上,内存并没有划分成一个一个的段。
以后在编程的时候,根据需要将若干个地址连续的内存单元看作一个段,用段地址X16定位段的起始地址(基础地址),用偏移地址定位段中的内存单元。
段的起始地址一定是16的倍数。
偏移地址为16位,所以一个段的长度最大为64k。

CPU可以用不同的段地址还有偏移地址来形成同一个物理地址。

段寄存器

段寄存器就是用来提供段地址的。8086CPU有4个段寄存器:CS、DS、SS、ES
当8086CPU要访问内存的时候,由这4个段寄存器提供内存单元的段地址。

CS和IP

CS和IP是8086CPU中最关键的寄存器,他们指示了CPU当前要读取的指令的地址。
CS为代码段寄存器。用来存放指令的段地址。
IP为指令指针寄存器。用来存放指令的偏移地址。
转移指令
修改CS、IP的内容不能使用MOV指令,而是通过使用 JMP进行的。
jmp 段地址:偏移地址
功能:用指令中给出的段地址修改CS,偏移地址修改IP
jmp 1000:3 表示CS= 1000,IP=3

代码段

可以将长度为N(N<=64KB)的一组代码,存在一组地址连续、起始地址为16的倍数的内存单元中,这段内存是用来存放代码的,从而定义了一个代码段。
CPU只认被CS:IP指向的内存单元中的内容为指令。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值