《汇编语言》学习笔记——寄存器
0x02 寄存器
- CPU的组成
- 运算器:信息处理;
- 寄存器:信息存储;
- 控制器:控制各种器件运行;
- 内部总线:连接各种器件,完成数据传输。
内部总线实现CPU内部器件之间的联系,外部总线完成CPU和主板上其他器件的联系。
- 对于汇编程序员来说,CPU的主要部件是寄存器,是可以通过指令读写的。
2.1 通用寄存器
8086CPU的所有寄存器都是16位的,可以存放2个字节。
- AX、BX、CX、DX通常用来存放一般性的数据,称为通用寄存器。
- 由于上一代CPU的寄存器都是8位的,故通用寄存器都可以分为两个独立使用的8位寄存器。
2.2 字在寄存器中的存储
- 8086CPU可以一次性处理两种尺寸的数据。
- 字节:可以存在8位寄存器中。
- 字:可以存在16位寄存器中。
2.3 几条汇编指令
汇编指令 | 控制CPU完成的操作 |
---|---|
mov ax, 18 | 将18送入ax |
mov ah, 78 | 将78送入ah |
add ax, 8 | 将ax中的数据加上8 |
mov ax, bx | 将bx中的数据送入ax |
add ax, bx | 将ax和bx中的数据相加送入ax |
汇编指令和寄存器名称不分大小写。
- 特殊情况
- add到16位寄存器溢出时,只保留16位;
- add到8位寄存器溢出时,只保留8位。
- 即使是低位也不会将溢出部分保留到高位。
- 此时低位寄存器和高位寄存器是独立的,没有关系。
两个操作对象的位数必须相同。
2.4 物理地址
- 所有内存单元构成一维线性空间,每个内存单元在其中有唯一的地址,称其为物理地址。
- CPU通过总线发送物理地址之前,需要先在内部形成这个物理地址。
- 不同的CPU有不同的形成方式。
接下来讨论如何在8086CPU内部形成内存单元的物理地址。
2.5 16位结构的CPU
- 16位结构表示的特性。
- 处理:运算器一次最多处理16位的数据;
- 存储:寄存器最大宽度为16位;
- 传输:寄存器和运算器之间通路为16位。
2.6 8086CPU给出物理地址的方法
-
8086CPU有20位地址总线,但又是16位结构(只能发出16位的地址)。
- 8086CPU内部使用两个16位地址合成的方法来形成一个20位的物理地址。
-
8086CPU读写内存过程。
- CPU的部件提供两个16位的地址:段地址和偏移地址;
- 段地址和偏移地址通过内部总线送入地址加法器。
- 地址加法器将两个16位的地址合成为一个20位的物理地址;
- 地址加法器通过内部总线将物理地址送入输入输出控制电路;
- 输入输出控制电路通过地址总线传送到内存。
- 地址加法器中采用物理地址=段地址*16+偏移地址的方法。
2.7 物理地址=段地址*16+偏移地址 的本质含义
- 本质含义
- CPU在访问内存时,用一个基础地址(段地址*16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。
- 等价于:物理地址=基础地址+偏移地址。
2.8 段的概念
- 内存是没有分段的,分段的概念来自CPU。
基础地址=段地址*16,故一个段的起始地址(不是段地址)一定是16的倍数;
偏移地址只有16位,故一个段最大为64KB。
2.9 段寄存器
- 段地址是放在段寄存器中的。
- 8086CPU中为CS、DS、SS、ES,访问内存时由这4个段寄存器提供内存单元的段地址。
2.10 CS和IP
- CS和IP指示了当前读取指令的地址。
- CS是代码段寄存器,IP是指令指针寄存器。
- 当前指令的物理地址为CS*16+IP。
- 8086CPU的工作过程可以简要概述如下:
- 将CS和IP的值送入地址加法器计算出指令的物理地址;
- 根据物理地址从内存中取出指令,经过输入输出控制电路送入指令缓冲器;
- 此时IP+=所读指令的长度,使得CS:IP指向下一条指令;
- 指令被送入执行控制器执行。
- 8086CPU刚启动时,CS=FFFFH,IP=0000H,即第一条指令在FFFF0H单元中。
内存中的信息是否为指令,取决于其是否被CS:IP指向。
2.11 修改CS、IP的指令
- 程序员可以改变CS、IP的内容,以控制CPU执行目标指令。
- mov指令被称作传送指令,可以修改大部分寄存器的值。
- 但是不能用于修改CS、IP,因为8086CPU没有提供这样的功能。
- 能够修改CS、IP内容的指令被统称为转移指令,例如jmp。
- 若想同时修改CS和IP的内容,可用jmp 段地址:偏移地址;
- 若只想修改IP的内容,可用形如jmp 某一合法寄存器。
2.12 代码段
- 代码段是逻辑意义上用于存放机器码的连续内存单元。
- 逻辑意义意味着CPU并不关心其是否为指令,它只认CS:IP指向的内容。
__EOF__

本文作者:ch3uhx9
本文链接:https://www.cnblogs.com/cheuhxg/p/16015772.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
本文链接:https://www.cnblogs.com/cheuhxg/p/16015772.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~