寄存器(8086CPU)概述与作用

这篇具有很好参考价值的文章主要介绍了寄存器(8086CPU)概述与作用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

寄存器(8086CPU)概述与作用

0 概述

所有寄存器均为16位,可以存放两个字节。8086CPU共有14个寄存器,分别是:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、FLAG

这 14 个寄存器按照一定方式又分为了通用寄存器控制寄存器段寄存器

  • 通用寄存器:
    • 数据寄存器:AX、BX、CX、DX
    • 指针寄存器:SP、BP
    • 变址寄存器:SI、DI
  • 段寄存器:CS、SS、DS、ES
  • 控制寄存器:IP、FLAG
寄存器 英文名 分类 具体名称 常用关联
AX Accumulator 数据寄存器 累加寄存器 div除法指令和mul乘法指令会调用;端口的输入输出只能用ax、al存放
BX Base 数据寄存器 基地址寄存器 经常与ds, es 连用;[bx] 默认调用ds:[bx]
CX Count 数据寄存器 计数器寄存器 储存循环次数,loop, jcxz指令会调用cx
DX Data 数据寄存器 数据寄存器 常用来储存数据
SP Stack Pointer 指针寄存器 堆栈指针寄存器 存放栈顶的偏移地址
BP Base Pointer 指针寄存器 基指针寄存器 默认与ss相关联,比如 [bp] 默认调用 ss:[bp]
SI Source Index 变址寄存器 源变址寄存器 常用于 ds:[si],存放偏移地址,数据从哪里来
DI Destination Index 变址寄存器 目的地址寄存器 常用于 es:[di],存放偏移地址,数据到哪里去
DS Data Segment 段寄存器 数据段寄存器 常用于 ds:[si],存放段地址,数据从哪里来
ES Extra Segment 段寄存器 附加段寄存器 常用于 es:[di],存放偏移地址,数据到哪里去
SS Stack Segment 段寄存器 堆栈段寄存器 存放栈的段地址
CS Code Segment 段寄存器 代码段寄存器 存放执行指令的段地址
IP Instruction Pointer 控制寄存器 指令指针寄存器 存放执行指令的偏移地址
FLAG Flag 控制寄存器 标志寄存器 按位作用,详见正文

寄存器(8086CPU)概述与作用

1 通用寄存器

AX、BX、CX、DX用于存放一般性数据,被统称为通用寄存器。

以AX为例,寄存器的逻辑结构如图:

寄存器(8086CPU)概述与作用

AX、BX、CX、DX这4个寄存器均可分为两个可独立使用的8位寄存器来使用,仍以AX为例,16位寄存器分为两个8位寄存器的情况如图:

寄存器(8086CPU)概述与作用

寄存器(8086CPU)概述与作用

1.1 数据寄存器

1.1.1 累加寄存器(AX)

AX寄存器又被称为累加寄存器或简称为累加器,除其暂存数据的作用外,还有一些特殊作用,即在使用MUL指令和DIV指令时。

  • 在使用MUL做乘法运算时,两个相乘的数要么都是8位,要么都是16位。如果两个相乘的数都是8位的话,则一个存放在AL,另一个位于其他寄存器或内存字节单元,默认乘法结果保存在AX当中;如果两个相乘的数都是16位的话,一个默认存放在AX中,另一个位于其他寄存器或内存字单元,默认乘法结果有32位,高位默认保存在 DX 中,而低位则默认保存在 AX 中。
  • 在使用MUL做除法运算时,除数有两种情况,即除数可以是8位或者是16位的,且除数可以存放在寄存器中或者是内存单元中,被除数则由AX负责。当除数为8位时,被除数一定是16位的,并默认放在AX寄存器中;当除数位16位时,被除数一定是32位的,此时被除数高16位存放在DX中,低16位存放在AX中。
1.1.2 基地址寄存器(BX)

除了暂存一般性数据的功能外,BX主要还是用于其专属功能——寻址(寻找物理内存地址)上,BX寄存器中存放的数据一般是用来作为偏移地址使用的。在 8086 CPU 中,CPU 是根据 <段地址:偏移地址> 来进行寻址操作,经常与DS、ES连用,如DS:[BX][BX] 默认调用DS:[BX]

1.1.3 计数器寄存器(CX)

除了暂存一般性数据的功能外,CX也有其专门用途——储存循环次数,loop, jcxz指令会调用cx。

当使用LOOP循环指令时,可以通过CX指定需要循环的次数,CPU每一次执行LOOP指令时,都会做两件事:

  1. CX=CX-1,即令CX计数器减去一
  2. 判断CX中的值,如果CX中的值为0则跳出循环
1.1.4 数据寄存器(DX)

除了暂存一般性数据的功能外,DX在其他方面也具有用途,已在介绍AX寄存器时有所介绍过了。

1.2 指针寄存器

1.2.1 BP寄存器

BP为基指针寄存器,与其他几个用来寻址操作所使用的寄存器(BX,SI,DI)没有太大区别。

它作为通用寄存器的一种,其可以暂存数据,而BP又不是数据寄存器,意味着其不能分割成为两个8位寄存器使用。

以 […] 的方式访问内存单元而且在 […] 中使用了寄存器 BP 的话,那么如果在指令中没有明确或者说是显示的给出段地址时,段地址则使用默认的 SS 寄存器中的值(BX,SI,DI 会默认使用 DS 段寄存器),比如DS:[BP]中明确给出了段地址位于DS中。

1.2.2 SP寄存器

SP寄存器必须与SS段寄存器一起使用,所以SP寄存器将在后文中与SS段寄存器一起作介绍

1.3 变址寄存器

SI (Source Index) 是源变址寄存器,DI (Destination Index) 即是目的变址寄存器。

8086 CPU 中的 SI 寄存器和 DI 寄存器其实和 BX 寄存器的功能是差不多的,即寻址操作和暂存一般性数据,只不过 SI 寄存器和 DI 寄存器均不是数据寄存器,所以它们不能够拆分为 2 个独立的 8 位寄存器。

SI:常用于 DS:[SI],存放偏移地址,数据从哪里来

DI:常用于 ES:[DI],存放段地址,数据到哪里来

示例:

MOV SI,0		    ;初始化偏移地址为 0
MOV AX,[SI]		    ;将段地址为 DS 偏移地址为 SI 的内存单元中的值移入 AX 中
MOV AX,DS:[SI]		;将段地址为 DS 偏移地址为 SI 的内存单元中的值移入 AX 中
MOV AX,SS:[SI]		;将段地址为 SS 偏移地址为 SI 的内存单元中的值移入 AX 中

MOV DI,0    		;初始化偏移地址为 0
MOV AX,[DI]		    ;将段地址为 DS 偏移地址为 DI 的内存单元中的值移入 AX 中
MOV AX,DS:[DI]		;将段地址为 DS 偏移地址为 DI 的内存单元中的值移入 AX 中
MOV AX,SS:[DI]		;将段地址为 SS 偏移地址为 DI 的内存单元中的值移入 AX 中

2 段寄存器

2.1 代码段寄存器(CS)

CS:IP 两个寄存器指示了 CPU 当前将要读取的指令的地址,其中 CS 为代码段寄存器,而 IP 为指令指针寄存器 。

当我们运行一个可执行文件时,我们需要另外一个程序来将这个可执行文件加载到内存当中,一般是通过操作系统的外壳程序( Shell 程序)将可执行文件加载到内存中以后,就会设置 CPU 中的两个寄存器,即设置 CS:IP 两个寄存器指向可执行文件的起始地址,此后 CPU 便从这个起始地址开始读取内存中的指令,并且执行。

我们在写汇编程序时,通常会使用 START 标记,其实这个标记就是用来标记起始地址的,当将一个汇编程序编译,连接成可执行文件以后,再通过操作系统的 Shell 程序将可执行文件加载到内存中以后,这个 START 所标记处的地址就是整个可执行文件的起始地址了 。

即,当一个可执行文件加载到内存中以后,CS:IP 两个寄存器便指向了这个可执行文件的起始地址,然后 CPU 就可以从这个起始地址开始往下读取指令,当读取完指令后,CS:IP 将会自动的改变(基本上是改变 IP) ,从而指向下一条要读取的指令,这样就可以执行这个可执行文件了 。

2.2 堆栈段寄存器(SS)

在任何时刻,SS:SP 都是指向栈顶元素,要注意8086 CPU 并不会保证我们对栈的操作会不会越界,所以我们在使用栈的时候需要特别注意栈的越界问题 。

  • 当使用 PUSH 指令向栈中压入 1 个字节单元时,SP = SP - 1;即栈顶元素会发生变化;

  • 当使用 PUSH 指令向栈中压入 2 个字节的字单元时,SP = SP – 2 ;即栈顶元素也要发生变化;

  • 当使用 POP 指令从栈中弹出 1 个字节单元时, SP = SP + 1;即栈顶元素会发生变化;

  • 当使用 POP 指令从栈中弹出 2 个字节单元的字单元时, SP = SP + 2 ;即栈顶元素会发生变化;

2.3 数据段寄存器(DS)及附件段寄存器(ES)

DS 段寄存器来存放要访问的数据的段地址;ES段寄存器是一个附加段寄存器,当其他段寄存器不够用时,可以考虑使用ES段寄存器。

3 控制寄存器

3.1 FLAG寄存器

FLAG寄存器与其他寄存器不同,其他寄存器都是用来存放数据的,而FLAG寄存器按位起作用。

8086CPU的FLAG寄存器结构如图所示:

寄存器(8086CPU)概述与作用

  • ZF标志:零标志位,记录相关指令执行后,其结果是否为0。结果为0,则zf=1;结果不为0,则zf=0。
  • PF标志:奇偶标志位,记录相关指令执行后,其结果的所有bit位中1的个数是否为偶数。如果1的个数为偶数,则pf=1;如果为奇数,则pf=0。
  • SF标志:符号标志位。记录相关指令执行后,其结果是否为负。如果结果为负,则sf=1;如果非负,则sf=0。
  • CF标志:进位标志位,一般情况下,在进行无符号数运算时,记录运算结果的最高有效位是否向更高位进位,或从更高位借位。
  • OF标志:溢出标志位,一般情况下,记录了有符号数运算的结果是否溢出。如果发生溢出,OF=1;如果没有,OF=0;
  • DF标志:方向标志位,在串处理指令中,控制每次操作后si、di的增减。df=0,si、di递增;df=1,si、di递减。

3.2 IP寄存器

通常与CS寄存器配合使用,已在前文的CS介绍中介绍过。

4 巨人的肩膀

王爽. 汇编语言.第3版[M]. 清华大学出版社, 2013.

https://blog.csdn.net/ulan420/article/details/126329586文章来源地址https://www.toymoban.com/news/detail-487840.html

到了这里,关于寄存器(8086CPU)概述与作用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 实验二 CPU 部件实现之 ALU 和寄存器堆

     1.1设计要求 理解和掌握 CPU 中的算术逻辑运算部件(ALU)和寄存器堆(Register File)的工作原理,并使用 Verilog 和 ModelSim 进行设计和仿真。 1. 使用 Verilog 完成 ALU 的设计,并编写测试仿真文件验证其正确性。要求: ALU 支持 16 位的加、减、与、或以及移位运算。 2. 使用 Veril

    2024年02月01日
    浏览(23)
  • 单片机中PSW寄存器的功能和作用

    在单片机中,PSW(Program Status Word)寄存器是一个重要的系统寄存器,它用于存储和控制程序的运行状态和系统的各种标志位。PSW寄存器通常是一个8位的寄存器,其中的每一位都有特定的含义和作用。下面将详细介绍PSW寄存器的各个位的功能和作用。 CY(Carry)位: CY位是进位

    2024年02月02日
    浏览(32)
  • stm32影子寄存器、预装载寄存器,TIM_OC1PreloadConfig和TIM_ARRPreloadConfig的作用

    一直没搞清楚stm32定时器的TIM_OC1PreloadConfig、TIM_ARRPreloadConfig函数的作用,影子寄存器、预装载寄存器、重载寄存器的概念。今天来研究一下:         首先看定时器的框图: 图中有阴影的小方框,代表该功能对应的寄存器有影子寄存器,也就是:PSC预分频器、自动重装载寄

    2024年02月09日
    浏览(31)
  • 【单周期CPU】LoongArch | 32位寄存器DR | 32位的程序计数器PC | 通用寄存器堆Registers | 32位RAM存储器

    前言: 本章内容主要是演示在vivado下利用Verilog语言进行单周期简易CPU的设计。一步一步自己实现模型机的设计。本章先介绍单周期简易CPU中基本时序逻辑部件设计。 💻环境:一台内存4GB以上,装有64位Windows操作系统和Vivado 2017.4以上版本软件的PC机。 💎本章所采用的指令为

    2024年02月12日
    浏览(34)
  • 硬盘、内存、缓存(CPU)和寄存器 空间大小与存取速度的区别及设计原理

    很多人会将 寄存器 与 存储器 二者混淆,认为它们是同一个东西。但并不是!! 寄存器是CPU上的一个模块 存储器是 内存+硬盘的统称 CPU(包含寄存器,缓存)    内存    硬盘 内存和硬盘之间的速度,差 3~4 个数量级;寄存器和内存之间的速度也差了 3~4 个数量级。       

    2024年03月22日
    浏览(34)
  • 【汇编中的寄存器分类与不同寄存器的用途】

    寄存器分类 在计算机体系结构中,8086CPU,寄存器可以分为以下几类: 1. 通用寄存器: 通用寄存器是用于存储数据和执行算术运算的寄存器。在 x86 架构中,这些通用寄存器通常包括 AX、BX、CX、DX、SI、DI、BP 和 SP。其中,AX、BX、CX 和 DX 寄存器可以分别作为累加器(accumulat

    2024年02月09日
    浏览(41)
  • stm32的BRR寄存器和BSRR寄存器

    1、BRR---   bit   RESET(置0)  register   //高16位无,低16位置1为0,不能写1 2 、BSRR---   bit   SET(设置1或0)       register   //低16位设置1为0 BSRR:用于低16位的作用是让指定的IO口置1;而高16位的作用是让指定的IO口置0。  

    2024年02月11日
    浏览(35)
  • 寄存器内存读写指令(二) —— 多寄存器读写 LDM / STM

    有的时候,CPU可能会遇到 a++; b++; c++,这个时候为了提升效率,CPU可能会一次将多个寄存器里的变量保存到内存中。这个时候之前介绍的 LDR / STR 指令虽然也能实现,但只能操作一个寄存器的读写。 因此,考虑到这点,下面介绍多个寄存器的读写指令 将 多个寄存器 的数据写

    2024年02月07日
    浏览(48)
  • FPGA之 寄存器、触发器、锁存器

    每个slice有8个存储元素,每个存储元素如下图所示:  其中四个为DFF/LATCH,可以配置为边沿触发D型触发器或电平敏感锁存器输入上图。D输入可以通过AFFMUX, BFFMUX, CFFMUX或DFFMUX的LUT输出直接驱动,也可以通过AX, BX, CX或DX输入绕过函数发生器的 BYPASS slice输入直接驱动。当配置为锁存

    2024年01月18日
    浏览(43)
  • 锁存器、D触发器、寄存器理解

    1、锁存器        锁存器对脉冲的电平敏感,也就是电平触发,在有效的电平下,锁存器处于使能状态,输出随着输入发生变化,此时它不锁存信号,就像一个缓冲器一样;在锁存器没有使能时,则数据被锁住,输入信号不起作用,此时输出一直为锁存的状态信息(锁存最后

    2024年02月09日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包