【汇编语言/底层开发】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

目录
相关文章
|
6月前
|
存储 程序员 存储控制器
【读书笔记】汇编语言(第四版)第二章 寄存器
【读书笔记】汇编语言(第四版)第二章 寄存器
|
6月前
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
汇编语言(第四版) 实验一 查看CPU和内存,用机器指令和汇编指令编程
105 1
8086 汇编笔记(十):标志寄存器
8086 汇编笔记(十):标志寄存器
|
7月前
|
存储
8086 汇编笔记(二):寄存器(内存访问)
8086 汇编笔记(二):寄存器(内存访问)
|
7月前
|
存储
8086 汇编笔记(一):寄存器
8086 汇编笔记(一):寄存器
|
7月前
|
索引 存储 C语言
【汇编】[bx+idata]的寻址方式、SI和DI寄存器
【汇编】[bx+idata]的寻址方式、SI和DI寄存器
291 0
【汇编】[bx+idata]的寻址方式、SI和DI寄存器
|
7月前
|
编译器 存储 网络协议
【汇编】CS、IP寄存器与代码段,用汇编语言写的源程序,jmp指令
【汇编】CS、IP寄存器与代码段,用汇编语言写的源程序,jmp指令
417 1
【汇编】CS、IP寄存器与代码段,用汇编语言写的源程序,jmp指令
|
7月前
|
存储 程序员
【汇编】内存的读写与地址空间、寄存器及数据存储
【汇编】内存的读写与地址空间、寄存器及数据存储
668 1
【汇编】内存的读写与地址空间、寄存器及数据存储
|
7月前
|
XML Java API
Android App开发之创建JNI接口获取CPU指令集讲解及实战(附源码 简单易懂)
Android App开发之创建JNI接口获取CPU指令集讲解及实战(附源码 简单易懂)
222 0
|
存储 IDE Java
二进制到汇编:进制,原码反码补码,位运算,通用寄存器,内存一套打通
二进制到汇编:进制,原码反码补码,位运算,通用寄存器,内存一套打通
194 1