【个人回顾】西安电子科技大学-周佳社-微机原理与接口设计-2

本文主要是介绍【个人回顾】西安电子科技大学-周佳社-微机原理与接口设计-2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

        写在开头:本文不以分享为目的,只是记录自己课程学习过程中觉得重要的部分知识点或者知识体系,以及可能存在的没有解决的问题,欢迎大家来进行交流和指正,其中ps部分为个人将其他学科与其构建联系的个人理解,因此也欢迎您能花费一部分时间帮我进行查漏补缺或者进行指点,学生拜谢。Orz

        ·本章内容同步于学习通课程微机原理与接口设计8086CPU中的结构与功能(一)至(十一),包括课后习题中本人错误点的回顾,将放在最后。因为视频中并未出现老师布置的课后习题,因此所有都做了。

2.1微处理器的外部结构(宏观)

        微处理器的外部结构表现为数量有限的输入输出引脚,进而构成微处理器级总线。微处理器的封装方式主要有两种,分别是双列直插式和扁平式,目前的微处理器扁平式的较多,而本书中主要研究的8086系列CPU为双列直插式封装。8086为16位寄存器,16位的原因是寄存器和ALU是16位的。在8086CPU中,一共有20根地址总线,其中有16根复用为地址总线A0~A15。地址总线的作用是CPU用来给外部存储器提供地址,因为计算机中的存储器是按字节组织的,因此20根外部总线可以提供2^{20}B=1MB个可寻址的外部存储器空间。同时16根内部总线为外部I/O提供2^{16}B=64KB个可寻址的I/O空间,通过M/\overline{IO}引脚的状态来判断寻址对象。

        微处理器中存在着一定的端口,端口实际上就是一个寄存器,可以实现CPU与设备间的信息交换。如I/O端口即为一个传递信息的通道。 一个I/O端口至少要占用一个I/O(端口)地址,这些地址是上文提到的64KB地址中的一个。在电路设计过程中,设计输入端口器件要具备三态功能,使不发生总线竞争。总线竞争会产生很严重的后果,轻则系统瘫痪,重则处理器短路。同时,输入端口必须具备锁存功能,使设备响应时能够解放CPU。我们注意到,在CPU未发送数据时,输出端口并非没有数据而是存在一定的无效数据。

        在给端口编码时,有统一编码和独立编码两种方式。

                统一编码要求当一个地址码给存储器单元编码时,该地址码就不可以给I/O进行编码了。反之亦然。51类型的处理器广泛应用统一编码的格式。统一编码的优点:因为将I/O端口视为存储器单元进行操作,因此对存储器进行读写的所有操作同样适用于I/O端口。因此程序设计简单,编写灵活。统一编码的缺点:浪费了存储器的地址空间,没有专用的I/O操作指令。

                独立编码是8086系列微处理器使用的编码方式。独立编码的优点是节约了存储器的地址空间,缺点是指令记忆复杂,I/O程序设计不够灵活。

        寻址方式有两种,分别是直接寻址和间接寻址。寻址方式越多,程序就会越灵活。

2.2微处理器的内部结构

        本章节的要求是了解微处理器的工作原理,逐步掌握汇编语言程序设计编程模型。

        微处理器内部存在四大部件,分别是①算术逻辑单元ALU,②工作寄存器——分为数据寄存器和地址寄存器,其中地址寄存器可以充当数据寄存器进行暂存操作。③充当中央指挥机关的控制器,可以取指令给指令寄存器并进行译码和分析,④I/O控制逻辑。

        控制器的控制流程为程序计数器通过AB取指令,指令通过DB传输到指令寄存器中,再进入指令译码器中,最后通过控制逻辑部件实现相应的功能。同时地址➕2再次取指令,循环往复。

        在存取指令过程中,我们往往会使用堆栈操作。堆栈指的是由先进后出原则组织的一段存储器区域(Ps.针对先进后出原则,我们可以将之看做弹夹,先塞入的子弹会被压在下层,然后在射击或者弹出时后被弹出。)。对于这样的堆栈区域,我们用栈顶和栈底来圈定堆栈的范围。栈底即入栈单元的地址,栈顶为PUSH后SD处指向的位置。我们需要注意的是栈底是固定的,而栈顶会随着数据的压入活动。

        对于8086而言,堆栈必须按字操作。堆栈单元地址由堆栈指针SP提供,指向栈底➕1单元的地址。 在进行堆栈操作时,如果SP超过范围,会导致堆栈溢出。此时会造成系统死机。因此在定义堆栈区域的时候,除了按要求定义以外,还应同时留出30%富余量,有便于程序的更新与维护。

        操作解释:入栈时        PUSH AX ;①sp→sp-2;②两个字节按规则入栈。

                          出栈时        POP    AX;①把sp指针内容指向栈顶地址,弹出两个字节内容给目                                                                    的操作数。②sp→sp+2

                        为了防止堆栈溢出,push 和 pop 的数量应配对。

2.3 8086/8088的内部结构

        8086/8088微处理器内部可以分为两大部分,分别是①总线接口单元BIU和②执行单元EU。在BIU中有四个段寄存器分别为①代码段寄存器CS(存放代码段段基址)②数据段寄存器DS(存放数据段段基址)③附加数据段寄存器ES(存放数据段的段基址)和④堆栈段段基址SS(指明堆栈段所在位置)。同时BIU内部还存在指令指针寄存器IP(等效于PC,他提供所在段内的地址)。

        8086微处理器的指令队列寄存器有6个字节,有6个指令寄存器。而8088微处理器中只有4个字节。

        BIU主要负责从外部存储器中取指令,并将取回的指令放入到指令队列中。EU主要负责从指令队列中根据先进先出原则来获取指令,并对该指令加以执行。

对BIU而言

         通常我们将编程时就会创造,编程时需要使用的寄存器称为通用寄存器。它可以组成80886汇编语言程序设计的编程模型。

2.4 8086CPU的寄存器组织

        在8086微处理器中一共有14个寄存器。分别是8个通用寄存器,4个段寄存器和2个控制寄存器

        1、通用寄存器

                通用寄存器中包含四个数据寄存器,分别为AX—累加器,BX—基址寄存器,CX—计数器和DX—数据寄存器(在I/O中做地址寄存器)。两个地址指针寄存器,分别是SP—堆栈指针寄存器,指向段内16位偏移地址。和BP—地址指针寄存器,类似于BX,充当段基址寄存器。和2个变址寄存器。分别为SI—源变址寄存器和DI—目的变址寄存器。

        2、段寄存器

                段寄存器只有四个,即为上文提到的BIU中的四个寄存器。代码段寄存器CS、数据段寄存器DS、附加数据段寄存器ES、堆栈段段基址SS。其中 CS无法初始化,由处理器自行决定。DS、ES和SS在使用时要先进行初始化,指向定义逻辑段的段地址。

        3、控制寄存器

                指令指针寄存器IP为16位寄存器,用来提供CS的IP地址,等效于8位的PC,二者均不可以做目的操作数。

                处理器状态字寄存器PSW为16位寄存器,但是实际有用的部分只有九位,并分为两类。一类为状态标志,如ZF、CF、PF、OF、SF和AF,反映ALU运算后结果的状态。另一类为控制标志,包括方向控制标志DF,中断允许标志IF和陷阱标志TF,用于控制CPU的运行状态。中断指某个特殊事件发生时,CPU转去从事此事件,事件完成后,CPU接着执行本身任务的过程。

2.5 8086CPU的存储器和I/O组织

        1、存储器地址空间与数据存放格式

                上文我们提到了,8086外部地址空间由20根地址总线决定,因此有2^{20}B=1MB个可寻址的外部地址空间,I/O地址空间由16根地址总线决定,因此有2^{16}B=64KB个可寻址的I/O地址空间。但是在IBM、PC机中,我们只用D0~D9给I/O分配地址。因此有2^{10}B=1KB个可寻址的I/O地址空间。

                在存储器中的数据存放格式主要有字节型、字形、双字型,部分情况下可能用到四字型,一般我们将一个字节存放在一个地质单元,存放时存放补码,上述各个类型均在DS段有定义。这里我们用汇编语言代码来理解

        ①字节型:一般我们用        DB         来充当字节型数据的伪指令。

        ②字型:一般我们用        DW        来充当字型数据的伪指令。当数据存储过程中,我们将低地址单元地址称为字的地址。当地址为奇数时称为奇地址,地址为偶数时称为偶地址。当字单元的地址为奇地址时我们称为对准了的字单元,为奇地址时称为未对准的字单元。当CPU在进行读写操作时,对对准了的字操作时只需要花费一个总线周期,对未对准的字操作时需要花费两个总线周期。因此地址定义时尽量在偶地址定义,以加快传输速度。

        ③双字型数据:一般我们用        DD        来充当双字型数据的伪指令。

        2、存储器的分段和物理地址(PA)的行程

                在学习该章节时,需要理解两个问题。

                ①为什么要分段?答:为了把20根地址总线可以寻址的1MB地址空间能够被16位寄存器寻址完。

                ②怎么分段?答:每个逻辑段最大为64KB,按需求进行分段,每个逻辑段的起始地址必须可以被16整除,因此最多可以分出64KB个段。

                分段后,我们用逻辑地址来表示不同分段的某个可寻址单元,逻辑地址由段地址(通常用CS)和段内偏移地址(通常用IP)组成,不同的逻辑地址可能会指向相同的物理地址,因此物理地址唯一,逻辑地址不唯一。

        3、物理地址(PA)的形成

                物理地址的计算方式是        物理地址=段基址*16+偏移地址,即PA=CS*16+IP。

                计算流程为①BIU把CS的内容送至加法器。②加法器将CS内容*16.③BIU把IP内容送至加法器。④加法器对两个内容进行相加。⑤构成取指令所需要的PA。

                数据传送操作为

                MOV        【BX】,AX;        (DS:(BX))←(AX)

                堆栈的方式为①暂停总线。②BIU传送DS至加法器并*16.③EU传送BX至加法器④加法器对两个内容进行相加构成PA⑤将PA的值赋值给AX

ps.BIU传送SS的内容至加法器并*16,EU把SP-2的值送至加法器

                堆栈操作

                PUSH         AX;

        4、各类指令的地址信息(表2)

                 理论上分段时,段与段间互相重叠,相邻两个段间最小间隔16字节。当程序初始化时,段寄存器的值对应的段称为当前段。运行期间,更改段寄存器的值可以改变当前段。

这篇关于【个人回顾】西安电子科技大学-周佳社-微机原理与接口设计-2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/352708

相关文章

SpringBoot实现不同接口指定上传文件大小的具体步骤

《SpringBoot实现不同接口指定上传文件大小的具体步骤》:本文主要介绍在SpringBoot中通过自定义注解、AOP拦截和配置文件实现不同接口上传文件大小限制的方法,强调需设置全局阈值远大于... 目录一  springboot实现不同接口指定文件大小1.1 思路说明1.2 工程启动说明二 具体实施2

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python中的filter() 函数的工作原理及应用技巧

《Python中的filter()函数的工作原理及应用技巧》Python的filter()函数用于筛选序列元素,返回迭代器,适合函数式编程,相比列表推导式,内存更优,尤其适用于大数据集,结合lamb... 目录前言一、基本概念基本语法二、使用方式1. 使用 lambda 函数2. 使用普通函数3. 使用 N

MyBatis-Plus 与 Spring Boot 集成原理实战示例

《MyBatis-Plus与SpringBoot集成原理实战示例》MyBatis-Plus通过自动配置与核心组件集成SpringBoot实现零配置,提供分页、逻辑删除等插件化功能,增强MyBa... 目录 一、MyBATis-Plus 简介 二、集成方式(Spring Boot)1. 引入依赖 三、核心机制

redis和redission分布式锁原理及区别说明

《redis和redission分布式锁原理及区别说明》文章对比了synchronized、乐观锁、Redis分布式锁及Redission锁的原理与区别,指出在集群环境下synchronized失效,... 目录Redis和redission分布式锁原理及区别1、有的同伴想到了synchronized关键字

基于Redisson实现分布式系统下的接口限流

《基于Redisson实现分布式系统下的接口限流》在高并发场景下,接口限流是保障系统稳定性的重要手段,本文将介绍利用Redisson结合Redis实现分布式环境下的接口限流,具有一定的参考价值,感兴趣... 目录分布式限流的核心挑战基于 Redisson 的分布式限流设计思路实现步骤引入依赖定义限流注解实现

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、