『期末复习』16_32位微处理器(8086)基本寄存器

简介: 8086具有16位的微处理器,16根数据线和20根地址线。因为可用20位地址,所以可寻址的地址空间可达到2^20字节即(1MB)从功能上,8086分为两部分,即总线接口部件(BIU bus interface unit)和执行部件(EU execution unit )


1.8086的编程结构(留个悬念)

8086具有16位的微处理器,16根数据线和20根地址线。因为可用20位地址,所以可寻址的地址空间可达到2^20字节即(1MB)

从功能上,8086分为两部分,即总线接口部件(BIU bus interface unit)执行部件(EU execution unit )

在学习8086的编程结构的编程结构时先了解16/32位微处理器基本寄存器

2.16/32位微处理器基本寄存器

总体上分为3类:

  • 通用寄存器(8个)
  • 段寄存器 (4个)
  • 指令指针和标志寄存器(2个)

2.1通用寄存器

通用寄存器功能: 可以存放逻辑操作和算术运算用的操作数和地址。

指针与变址寄存器功能: 参与地址运算的主要是指针与变址寄存器组中的4个寄存器SP/BP/SI/DI,一般用来存放地址的偏移量。

32位寄存器在16位寄存器名称前加E,如EAX,扩展了16~31位

通用寄存器为什么分为高8位和低8位?

 

比如数据存储是从低位开始的,而我们的计算只用到低8位时,高8位也可以参与计算,而不是闲置浪费,这样精细划分提高了内存利用率;这样一个16位的寄存器可以当成2个8位寄存器使用

(速记:ABCDX  BSP  SDI  )

  1. AX称为累加器(Accumulator)  
    使用频度最高,用于算术、逻辑运算以及与外设传送信息等
  2. BX称为基址寄存器(Base address Register)      
    常用做存放地址的偏移地址,在间接寻址中用于存放基地址
  3. CX称为计数器(Counter)      
    作为循环和串操作等指令中的计数器,存放循环次数或重复次数
  4. DX称为数据寄存器(Data register)    
    常用来存放双字长数据的高16位,或在间接寻址的I/O指令中存放I/O端口地址。
  5. SP/ESP堆栈指针寄存器
    用以指出在堆栈段中当前栈顶的地址。入栈(PUSH)和出栈(POP)指令由SP给出栈顶的偏移地址。因此要与堆栈段寄存器SS配合使用,以指向栈顶的存储单元。
  6. BP/EBP基址指针寄存器
    指出要处理的数据在堆栈段中的基地址,故称为基址指针寄存器。也可以存放堆栈顶部地址的偏移量,此时的默认段为堆栈段SS。

SP和BP寄存器与SS段寄存器联合使用以确定堆栈段中的存储单元地址

  1. BX与BP在应用上的异同

作为通用寄存器,二者均可用于存放数据;

作为基址寄存器,BX通常用于寻址数据段DS;

BP则通常用于寻址堆栈段SS。 BX基址寄存器一般与DS或

  1. SI是源地址寄存器(Source Index)
    指向源数据所在单元
  2. DI是目的地址寄存器(Destination Index)
    可与SI/ESI(源变址寄存器)配合使用,指向目的数据所在单元;

堆栈指针寄存器SP/ESP不能作为变址寄存器使用外,其余七个通用寄存器在进行地址计算时都可用来存放参与运算的操作数

2.2段寄存器

别名:段选择符,也有的称其为段选择子

存放高位地址的寄存器叫段寄存器,低16位地址称为偏移量,放在通用寄存器,如基址寄存器BX

4个基本的段寄存器,用于把内存空间分成不同的段

其中ES,FS,GS,都称为附加数据段寄存器,FS,GS是32位微处理器中新增加的

为什么有了通用寄存器,还要设计段寄存器?

段寄存器的设计是为了方便CPU二次寻址,因为内存的空间很大,如果只有通用寄存器,当数据量很多时,CPU在存取数据时效率会下降,用段寄存器对空间分段,CPU在寻址时可以先找到段寄存器,再去找存放在通用寄存器中的数据

  1. 代码段CS(code segment)
    用于存放当前正在运行的程序。存放当前执行程序所在段的段地址,将其内容左移4位再加上IP指针的内容即为下一条执行指令的地址。
  2. 数据段DS(data segment)
    用于存放程序中用到的数据(如数值、字符、地址)。存放当前数据段的段地址,将其内容左移4为再加上计算所得的偏移地址即为对数据段指定单元进行读/写的地址。
  3. 堆栈段SS(stack segment)
    是内存中开辟的专用存储区,用来暂时保存寄存器中的数据。存放当前堆栈段的段地址,将其内容左移4位再加上SP的内容即为栈顶地址
  4. 附加段ES(extra segment)
    是附加的数据,在串操作指令中用于存放目的操作数

堆栈堆栈,堆和栈有什么区别???堆是运行时确定内存大小,而栈在编译时即可确定内存大小

堆和栈的区别 - 胖毛 - 博客园 (cnblogs.com)

段寄存器的使用规则:

2.3标志和指令指针寄存器

  1. EIP/IP指令指针寄存器
    用于存放指令所在单元地址的偏移量,与代码段寄存器CS配合使用,以便得到指令所在单元地址。IP地址是不断变化的,直到程序运行结束。(cs和ip是好兄弟)
  2. EFR/FR(EFLAGS/FLAGS)标志寄存器
    16位只用了其中9位, 用于存放系统的状态标志控制标志
    状态标志:是CPU在执行指令的过程中产生的。

1)符号标志SF(sign flag)值与运算结果的最高位相等

2)零标志ZF      (zero flag)   运算结果为0,值为1;否则值为0

3)奇偶标志PF  (parity flag)   运算结果低8位有偶数个1则值为1

4)进位标志CF  (carry flag)   加法运算使最高位有进位或减法运算使最高位有借位,则值为1

5)辅助进位标志AF   (auxiliary flag)    8位二进制加法运算使第3位向第4位有进位或减法运算使第3位向第4位有借位,则值为1;也叫半进位标志

6)溢出标志OF   (overflow flag)  运算过程中有溢出,则值为1:使用双符号位异或求值

  1. 控制标志:用于控制微处理器的操作和系统所处的工作方式

1)方向标志DF   (direction flag)  :如果IF置“1”,则CPU可以接受可屏蔽中断请求;反之,则CPU不能接受可屏蔽中断请求。

2)中断允许标志IF   (interrupt enable flag)  

3)跟踪标志TF   (trap flag)  也称陷阱标志

例题:这里可能会出考题,所以要识记各个符号位及含义

3.问答环节

段寄存器的使用规则?

8086CPU有20根地址线,最大可寻址内存空间为1MB。而8086的寄存器只有16位。用16位的地址寻址1MB空间是不可能的。所以就要把内存分段,也就是把1MB空间分为24 ,即16个段,每段不超过64KB(2^16,16位数据线就可以寻址)。

不过段寄存器仍然是16位的,它的内容代表了段基址的高16位,这个16位的地址后面再加上4个0就构成20位的段基址。而原来的16位地址只是段内的偏移量。这样,一个完整的物理内存地址就由两部分组成,高16位的段基址和低16位的段内偏移量,当然它们有12位是重叠的,它们两部分相加在一起,才构成完整的物理地址。

4.温故知新

1.请说出计算机中三种总线及各自功能?

  • 数据总线:数据总线是CPU与存储器CPU与I/O接口设备之间传送 各种指令数据信息的总线,这些信号通过数据总线往返,因此,数据总线上的信息是双向传输的。
  • 地址总线:地址总线上传送的是CPU向存储器I/O接口设备发出的地址信息,寻址能力是CPU特有的功能,地址信息仅由CPU发出,因此,地址总线上的信息是单向传输的。
  • 控制总线:控制总线传送的是各种控制信号,有CPU至存储器、I/O接口设备的控制信号,有I/O接口送向CPU的应答信号、请求信号,因此,控制总线是上的信息是双向传输的。

2.说出微处理器中寄存器的使用规则?

CS和IP搭配使用:CS用于存放当前正在运行的程序。存放当前执行程序所在段的段地址,IP用于存放指令所在单元地址的偏移量将CS其内容左移4位再加上IP指针的内容即为下一条执行指令的地址。IP地址是不断变化的,直到程序运行结束。(cs和ip是好兄弟)

SS和SP搭配使用:SS是内存中开辟的专用存储区,用来暂时保存寄存器中的数据存放当前堆栈段的段地址SP给出栈顶的偏移地址,将SS内容左移4位再加上SP的内容即为栈顶地址

3.已知逻辑地址为1F02H:38A0H如何计算出其对应的物理地址?

  1F020H

+   38A0H

---------------

  228C0H

4.请画出Pentium处理器的寄存器及名称(通用寄存器、段寄存器、指令指针和标志寄存器)

相关文章
|
开发工具 C++ Windows
帮 vs2019 找回丢失的 SDK
帮 vs2019 找回丢失的 SDK
|
Linux 网络安全 Android开发
振南技术干货集:各大平台串口调试软件大赏(1)
振南技术干货集:各大平台串口调试软件大赏(1)
解决开启子线程,导致request上下文和session信息丢失问题
解决开启子线程,导致request上下文和session信息丢失问题
1510 0
|
4月前
|
机器学习/深度学习 存储 人工智能
智能体的未来:AGI路径上的关键技术突破
作为一名长期关注人工智能发展的技术博主摘星,我深刻感受到当前AI领域正处于一个前所未有的变革时期。从ChatGPT的横空出世到各类智能体(Intelligent Agents)的蓬勃发展,我们正站在通用人工智能(AGI, Artificial General Intelligence)的门槛上。在过去的几年里,我见证了AI技术从单一任务的专用系统向多模态、多任务的智能体系统演进,这种演进不仅仅是技术层面的突破,更是对人工智能本质理解的深化。智能体作为AGI实现的重要载体,其发展轨迹清晰地勾勒出了通向AGI的技术路径。当前的技术局限性主要体现在推理能力的不足、知识整合的困难、以及缺乏真正的自主学
544 0
智能体的未来:AGI路径上的关键技术突破
|
人工智能 前端开发 测试技术
探索软件测试中的自动化框架选择与优化策略####
本文深入剖析了当前主流的自动化测试框架,通过对比分析各自的优势、局限性及适用场景,为读者提供了一套系统性的选择与优化指南。文章首先概述了自动化测试的重要性及其在软件开发生命周期中的位置,接着逐一探讨了Selenium、Appium、Cypress等热门框架的特点,并通过实际案例展示了如何根据项目需求灵活选用与配置框架,以提升测试效率和质量。最后,文章还分享了若干最佳实践和未来趋势预测,旨在帮助测试工程师更好地应对复杂多变的测试环境。 ####
343 4
|
9月前
|
人工智能 算法
DeepSeek过时了?全网刷屏的Manus到底是什么?这样写申请秒过审核
Manus(官网:[https://manus.im/](https://manus.im/))是一个通用AI智能体,能够理解用户需求并主动完成任务,如筛选简历、研究房产和分析股票等复杂工作。其独特之处在于“知行合一”,不仅能思考还能交付成果。目前处于内测阶段,邀请码稀缺,申请需详细说明使用目的和技术背景。通过官方审核后,用户可登录体验这一创新工具。
434 5
|
Ubuntu 数据安全/隐私保护
Ubuntu22.04LTS环境部署实战
这篇文章提供了Ubuntu 22.04 LTS操作系统的详细安装步骤,包括选择语言、键盘布局、网络配置、软件源设置、磁盘分区、安装OpenSSH服务以及完成安装和首次登录系统的过程。
953 6
Ubuntu22.04LTS环境部署实战
|
存储 算法
算法的时间复杂度和空间复杂度
本文详细讨论了算法的时间复杂度和空间复杂度,包括它们的概念、计算方法和常见复杂度的对比,并通过多个实例解释了如何计算算法的时间和空间复杂度。
1007 0
算法的时间复杂度和空间复杂度
|
机器学习/深度学习 存储 人工智能
ONNX 与安全:保护模型免受攻击
【8月更文第27天】随着人工智能和机器学习模型的应用越来越广泛,模型的安全性也成为了人们关注的重点。Open Neural Network Exchange (ONNX) 作为一种开放的标准格式,不仅可以促进不同框架之间的模型共享,还面临着如何保护模型不被恶意攻击的风险。本文将探讨 ONNX 在模型安全方面的考虑,以及如何利用 ONNX 和其他技术来保护模型免受攻击。
912 4
|
弹性计算 固态存储 ice
阿里云服务器ECS内存型r8i、通用算力u1、r7、AMD内存r8a、高主频内存hfr8i价格和性能差异
2024年阿里云提供2核16G、4核32G及8核64G等多种服务器配置,用户可根据需求选择不同实例规格如内存型r8i、通用算力型u1等。以华北2(北京)为例,2核16G月费从286.2元起,4核32G从572.4元起,8核64G则从1144.8元起。公网带宽1Mbps预付费为23元/月,系统盘如ESSD PL1按量计费0.0021元/小时/GiB。具体价格与折扣请参考阿里云官网。