【汇编语言/底层开发】2、CPU的寄存器

简介: 寄存器是CPU中用于高速存取暂存数据的存储部件。通过改变寄存器中的数据,可以对CPU的行为进行控制。对于8086CPU,内部共有14个寄存器,位宽均为16位,分别是AX, BX, CX, DX, SI, DI, SP, BP, IP, CS, SS, DS, ES, PSW。

寄存器是CPU中用于高速存取暂存数据的存储部件。通过改变寄存器中的数据,可以对CPU的行为进行控制。对于8086CPU,内部共有14个寄存器,位宽均为16位,分别是AX, BX, CX, DX, SI, DI, SP, BP, IP, CS, SS, DS, ES, PSW。不同的寄存器所起到的作用不同。


1、通用寄存器

      通用寄存器指的是AX, BX, CX, DX四个寄存器,可以用于存放通用数据。每一个通用寄存器可以存放16位数据,而由于上一代CPU的寄存器为8位,考虑到兼容性,每一个通用寄存器可以按照高八位和低八位分成两个8为寄存器,名称分别为xH和xL(如AH/AL等)。这分割出来的8位寄存器在使用中都是独立的寄存器。,在数据超过8位的时候会产生溢出。比如AL中的数据如果超过了8位,那么多余出来的位数并不会影响到AH中的数据。通过这样的寄存器结构,CPU可以一次性处理字节Byte和字Word(2字节)两种尺寸的数据。


2、简单汇编指令

      汇编语言的指令和寄存器名称不区分大小写。较常用的例如:

mov ax, 18 //将18H存入寄存器ax
add ax, bx //将寄存器bx的值与ax相加,存入ax
其实只需明白一点就是,操作的结果储存于两个操作数的前者就好了。另外需要注意的是, 两个操作对象的位数必须一致,例如mov ax, bl这样的指令就是错的。


3、CPU位数与物理地址

    现在的CPU主流已经是64位,部分老式机器是32位,而8086CPU是16位。对于8086而言,所谓16位CPU指的是,运算器的宽度为16位,即一次可以计算16位的数据,寄存器最大宽度是16位,二者之间的内部总线宽度也是16位。对于32位、64位机器则是同样的道理。

    8086的外部地址总线的宽度为20位,寻址能力为1M,因此在实际操作中,需要CPU用16位的数据表示20位的地址。为了实现这样的功能,8086通过提供了两个16位的地址:段地址和偏移地址,由地址加法器将短地址左移四位并与偏移地址相加来合成物理地址。通过这样的方式,CPU将内存地址看做一个整段+一个偏移量的方式来表示,也是因为这样的缘故,一个段的起始地址一定是16的倍数,长度最大是64KB。


4、段寄存器和指令指针寄存器

      8086包含四个段寄存器:CS, DS, SS, ES,分别作为代码段寄存器、数据段寄存器、堆栈段寄存器和额外段寄存器。另外IP寄存器作为指令指针寄存器。在任意时刻,CPU从CS×16+IP的内存地址中获取指令并执行,地址可以记为CS:IP。读取完成一条指令后,IP中的值可以根据刚刚读取指令的长度自动增加,使CPU可以轻易读取下一条指令。在刚刚启动时,CS和IP的初始状态为CS = FFFFH,IP = 0000H。

      8086的工作流程如:

  1. 从CS:IP中读取指令,进入指令缓冲器;
  2. IP向下移动指令长度,指向下一条指令;
  3. 执行,循环这个过程。

      修改CS和IP寄存器采用jmp命令:

jmp MMM:NN //将CS修改为MMM,将IP修改为NN
jmp NN //不改动CS,将IP修改为NN

目录
相关文章
|
5月前
|
XML Java API
Android App开发之创建JNI接口获取CPU指令集讲解及实战(附源码 简单易懂)
Android App开发之创建JNI接口获取CPU指令集讲解及实战(附源码 简单易懂)
46 0
|
10月前
|
JSON 数据可视化 定位技术
python数据可视化开发(3):使用psutil和socket模块获取电脑系统信息(Mac地址、IP地址、主机名、系统用户、硬盘、CPU、内存、网络)
python数据可视化开发(3):使用psutil和socket模块获取电脑系统信息(Mac地址、IP地址、主机名、系统用户、硬盘、CPU、内存、网络)
205 0
|
11月前
|
缓存
CPU、处理器、内存、外存、寄存器、缓存的区别
CPU、处理器、内存、外存、寄存器、缓存的区别
1269 0
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第六章:移位寄存器
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第六章:移位寄存器
131 0
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第五章:触发器和寄存器
基于Verilog HDL与虚拟实验平台的计算机组成与CPU实验第五章:触发器和寄存器
96 0
|
Linux 调度 Android开发
RK3399平台开发系列讲解(进程调度篇)14.8、CPU 上下文切换
RK3399平台开发系列讲解(进程调度篇)14.8、CPU 上下文切换
75 0
RK3399平台开发系列讲解(进程调度篇)14.8、CPU 上下文切换
|
存储 安全 程序员
鲲鹏开发重点––ARM CPU的推测执行
MMU,内存管理单元,顾名思义就是用于管理内存的部件,这是CPU内部模块名,需要操作系统来进行空间配置和管理,所以,有时提到的MMU并不完全指硬件部分,也包括软件部分。其作用就是完成VA虚拟地址到PA物理地址的转换,页面大小管理,同时配置地址空间的访问属性,包括Normal(乱序访问)和Device(定序访问)进行区分,cache写回,cache写透,关闭cache等等,配置地址空间的访问权限。
411 0
鲲鹏开发重点––ARM CPU的推测执行
|
架构师 Unix 编译器
[oeasy]python0022_ python虚拟机_反编译_cpu架构_二进制字节码_汇编语言
[oeasy]python0022_ python虚拟机_反编译_cpu架构_二进制字节码_汇编语言
169 0
[oeasy]python0022_ python虚拟机_反编译_cpu架构_二进制字节码_汇编语言
|
数据采集 缓存 自然语言处理
[oeasy]python0011 - python虚拟机的本质_cpu架构_二进制字节码_汇编语言
[oeasy]python0011 - python虚拟机的本质_cpu架构_二进制字节码_汇编语言
132 0
[oeasy]python0011 - python虚拟机的本质_cpu架构_二进制字节码_汇编语言
第六周 睡眠CPU 电源管理特殊功能寄存器 PCON
第六周 睡眠CPU 电源管理特殊功能寄存器 PCON