微机原理-一至三章

目录

第一章 计算机系统概述

1.0、冯诺依曼结构

1.1、系统组成与结构-三个层次

1.2、微处理器系统的总线结构

第二章 16位和32位微处理器

2.0、基本寄存器:

2.1、微处理器逻辑结构的演变

2.1.1、8086逻辑结构

2.1.2、8086CPU内部结构

2.1.3、总结

2.2、32位微处理器

2.2.1、80386的逻辑结构

2.2.2、80386先进的体系结构

2.2.3 Pentium的寄存器

第三章 Pentium的指令系统

立即寻址和寄存器寻址

输入、输出端口寻址

传送数据

堆栈操作指令


第一章 计算机系统概述

台式个人计算机的组成:

  • 主机
    • 主板
    • CPU
    • 内存
    • 硬盘
    • 声卡
    • 显卡
    • 网卡
  • 键、鼠、显示器

1.0、冯诺依曼结构

控制器、存储器、运算器、输入设备、输出设备

特点

  • 采用二进制
  • 采用程序存储方式
  • 计算机组成结构:上述5部分

1.1、系统组成与结构-三个层次

微处理器  →  微型计算机  →  微型计算机系统

1.2、微处理器系统的总线结构

系统总线连接CPU、存储器和I/O设备,用于传递数据、地址和控制信息

地址总线:装载地址信号,确定被访问的存储单元、I/O接口,是单向总线。地址线的根数决定了CPU能直接访问的存储空间。

控制总线:CPU向其他部件传送控制信号,其他部件向CPU传送状态信号和请求信号。

数据总线:装载数据和指令代码

第二章 16位和32位微处理器

2.0、基本寄存器:

通用寄存器:

AX: 累加寄存器 add register

BX: 基址寄存器 basic

CX: 计数寄存器 count

DX: 数据寄存器 data

BP: 基址指针寄存器 basic point

SP: 堆栈指针寄存器 stack point

SI:  源变址寄存器 source index

DI: 目的变址寄存器  destination index

段寄存器:

CS:  代码段 code segment

DS:  数据段 data

ES:  附加段 extra

SS:  堆栈段 stack

32位微处理器

FS:   附加段

GS:  附加段

指令指针和标志寄存器:

IP: 指令指针寄存器 instruction point

FLAGS: 标志寄存器

寄存器的使用规则:

  • CS(代码段) →   IP 指令指针寄存器
  • SS(堆栈段) →   BP、SP

2.1、微处理器逻辑结构的演变

2.1.1、8086逻辑结构

  • 1978 :8086                      1979 :8088
  • 16位微处理器
  • 20根地址线, 1MB的寻址空间    2^{20}
  • 4或6字节指令Cache

2.1.2、8086CPU内部结构

8086CPU内部结构按功能可分为2个部分:

1、总线接口单元BIU ( Bus Interface Unit )

负责 存储器、I/O端口 传送数据

断句很重要。这里的存储器是指内存,CPU可直接读取内存中的数据。I/O接口:主机通过I/O接口来与外部设备进行数据的交换。比如打印机没纸了,返回一个信号给CPU请求中断。

 

2、执行单元EU ( Execution Unit )

负责指令的执行


 如何记住这些部件?很简单,把这些部件运用的场景,和关系捋一遍。

BIU 总线接口单元

这还得从主机三大件说起......

主机三大件包括:CPU、内存、主板。主板上就集成了I/O接口。

        因为CPU要与 内存、I/O接口进行数据交互,这势必就要找到他们的地址。而我们知道,要找一个地址,先是要找到他的段地址的。这就引出了段地址寄存器。段寄存器中有个特殊的寄存器名为代码段寄存器( CS ),他是与IP指令指针寄存器搭配使用的,这就引出了IP指令指针寄存器。

        先引入物理地址的计算公式 :

        物理地址 = 段基址 + 偏移地址

8086是有20根地址线的,即20位,我们的段寄存器和通用寄存器都是16位的,我们该怎么实现与20位进行匹配呢?把段寄存器左移4位,后面补0就好了。完成这一步骤需要用到地址加法器。

这样,我们的段基址就大功告成了,只差把段基址送到EU与通用寄存器存储的偏移地址相加就可以得到物理地址了。可是CPU嫌弃BIU送的太慢了,这时,BIU就想了个办法,捣鼓了个指令队列缓冲器。到此,BIU的工作就完成了。

EU 执行单元

接下来,EU要计算物理地址了,EU中是有通用寄存器,存储着偏移地址的。

要进行运算,那肯定是有 ALU 运算逻辑单元的咯。得到结果之后,还要检查最高位的进位,观察是否存在溢出问题,这就引出了标志寄存器

2.1.3、总结

总线接口单元(BIU)

功能:

  • 内存中取指令传入指令预取队列
  • 负责与内存或I/O接口之间的数据传送

总线接口单元(总线接口部件)是通过数据总线、地址总线、控制总线与外部取得联系的。

执行单元(EU)

功能:执行指令

        从指令队列中取指令代码 --> 译码 --> 在ALU中完成数据的运算 --> 运算结果的特征保存在标志寄存器FLAGS中。

EU和BIU的关系:

指令预期队列的存在使EU和BIU两个部分可同时进行工作,从而:

  • 提高了CPU的效率
  • 降低了对存储器存取速度的要求

2.2、32位微处理器

1985年,Intel推出80386    从16位体系结构过渡到32位体系结构

  • 流水线、指令重叠执行技术
  • 虚拟存储器技术
  • 存储器管理分段分页保护技术

CPU片内有存储器管理部件MMU

  • 可实现分段分页管理
  • 有4级保护功能,因此程序不能访问段所规定区域以外的单元,数据也不能写到禁止的段里。

80386、80486、Pentium都是32位的微处理器

  • 具有32位寄存器和数据通道
  • 支持32位地址和数据类型

2.2.1、80386的逻辑结构

80386分为三大部件:总线接口部件、中央处理部件、存储器管理部件

存储管理部件

  • 分段部件
  • 分页部件
  • 为了加快CPU访问内存的速度,还设有高速缓冲存储器

页是机械划分的,没4K为一页。存储器是按段来组织的,每个段包含若干页

 拿着段选择码去段描述表里找特定的描述符,描述符里给出了32位的段基址和20位的段界限

线性地址 = 段基址 + 偏移量

如果没有分页,那线性地址就相当于物理地址

如果有分页,再分段,那物理地址还要由线性地址转化一下

2.2.2、80386先进的体系结构

  • 外部数据总线为64位,数据传输量提高了一倍
  • 设置片内代码cache数据cache
  • 两条指令流水线并行执行
  • 片内集成FPU(浮点运算器),采用硬件实现浮点运算
  • 采用分段分页两级存储管理机制
  • BTB 预判 

CISC 和 RISC 相结合

C  complex  复杂指令

R   精简指令   

2.2.3 Pentium的寄存器

段寄存器:CS、DS、ES、SS、FS、GS

实模式下,逻辑地址空间中存储单元的地址由段值和段内偏移两部分组成。

在保护模式下,是由段选择子段内偏移两部分组成的,与实模式相比,段选择子取代了段值。

段寄存器中的内容就是段选择子,但段选择子不能直接获得段基址,而是要用段选择子的值从段描述表里找到特定的段描述符。

每个描述符对应一个段,描述符中含有对应段的起始地址(段基址),还有段的一些其他的信息。

段描述符是存储在硬盘中的,不能放内存,因为占用太大。描述符表是由操作系统建立的,表里的每个段描述符有特定的编号。

段选择子的前13位是描述符索引,用来找到表中的对应的描述符

TI: 描述符指示位(0/1)

  • 0 : GDT 全局描述符表     global description table
  • 1 : LDT 局部描述符表      local

RPL  2位二进制,4种状态,  0为最高特权级

总线周期控制信号:

  • D/C#      数据/控制信号输出(区分传输数据还是指令)
  • M/IO#    存储器和I/O访问选择信号输出,高电平访问M
  • W/R#     读/写信号输出
  • LOCK#  总线封锁信号输出。总线被锁定时,其他总线主设备不能获得总线控制权,从而确保CPU完成当前操作。
  • BRDY#  突发就绪信号(外设准备好了)
  • NA#       下一地址有效信号

系统控制信号:

  • INTR      可屏蔽中断请求信号
  • NMI        非屏蔽中断请求信号
  • RESET   系统复位信号
  • CLK        系统时钟信号
  • INIT        初始化信号

RESET  :    2个时钟周期内终止程序进行复位

INIT  : 等当前指令结束后内部才复位

总线仲裁信号

  • HOLD 总线请求信号,由其他主线主设备发出,请求CPU让出总线控制权
  • HLDA 总线请求响应信号 ,表示CPU已经让出了控制权
  • BREQ 总线周期请求信号,由CPU发出,告示CPU正在使用总线
  • BOFF 强制让出总线信号,CPU立即放弃总线控制权

BOFF响应信号,HOLD响应信号

一个总线周期多个总线状态组成

Pentium的几种总线状态定义

  • T1状态:地址和状态信号有效, ADS#信号有效,(可以进行寻址)
  • T2状态    数据出现在数据总线上,且BRDY#有效(外设准备好了)
  • T12状态  结合前两种状态
  • T2p状态  外设或者存储器速度较慢时处于的一种状态(正在传输数据,但BRDY#还无效)
  • Td状态    读写操作切换的过渡状态,需要一个时钟周期进行过渡
  • Ti 状态     空闲状态 BOFF#和 RESET可让CPU进入该状态

第三章 Pentium的指令系统

指令的格式:操作码 + 操作数

一条指令通常包含一个或两个操作数(源操作数、目的操作数)

操作数放在

  • 寄存器
  • 存储器
  • 指令区(代码区)(立即数)

立即寻址和寄存器寻址

立即寻址:操作数直接放在指令中,紧跟在操作码之后

 寄存器寻址:在指令中指出所使用的寄存器

指令所要的操作数存储在寄存器中

输入、输出端口寻址

 

传送数据

总结:

  • 立即数不能作为目的操作数,CS、IP、EIP不能作为目的操作数,同时IP也不能作为源操作数
  • 两个内存之间,以及两个段寄存器之间不能直接传送数据
  • 立即数不能直接传送给段寄存器 
  • EBX、ESI、EDI、BX、SI、DI间接寻址时,默认的段寄存器是DI      用ES,必须 ES: [  ]
  • EBP、ESP、BP、SP间接寻址时,默认的寄存器是SS
  • SI和DI不能同时用于源或目的操作数
  • BX和BP不能同时用于源或目的操作数

LEA指令和MOV指令的区别

MOV BX, OFFSET BUFFER

LEA   BX,BUFFER

这两条指令的执行效果是完全相同的。

堆栈操作指令

低地址为栈顶,sp指向栈顶。堆栈操作只能按字或双字进行。

入栈时,高字节对应高地址

但对于机器码比如:330001  是按顺序写的,也就是说33是对应低地址的字节。

堆栈操作指令注意点:

  • 堆栈操作总是按字或双字进行的。
  • 推入PUSH指令,SP减2或4 ,高字节对应高地址
  • 允许PUSH CS ,但不允许 POP CS
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xingxg.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值