第二章 80x86微处理器简介
2.第二章 80x86微处理器简介
本章小结
本章需要记住的两个很重要的知识点
物理地址(PA)=段地址(DS/CS)*16+偏移地址
6种状态标志,并且会判断
2.1 Intel微处理器
80x86
- 泛指基于英特尔框架的各款x86微处理器
- 后期还有Intel Xeon(至强)、Intel Core(酷睿)
- 最大特点:保持与先前处理器的兼容
8086内部结构
功能分类:
- 运算器:负责所有的算术逻辑运算
- 控制器:负责微型系统的所有控制功能
结构分类:
-
执行单元:
部件:指令译码部件、算术逻辑单元、通用寄存器组
功能:负责指令译码和执行
-
总线接口单元:
部件:指令队列缓冲器、总线控制逻辑、专用寄存器、地址产生器
功能:负责CPU和外部联络
80386内部结构
CPU访存过程
访存过程:
-
CPU通过**控制总线**,发出访存信号,通知主存准备数据读写
-
CPU通过**地址总线**,发出存储单元的地址
主存储器接收到地址后,译码,寻址正确的存储单元
-
CPU通过**控制总线**,发出读写的指令
主存储器将准备执行读写操作
-
CPU通过**数据总线**,读出或写入的数据
2.2 寄存器组
寄存器
什么是寄存器?:寄存器是CPU内部有若干触发器和逻辑电路组成,用来暂存二进制指令,数据和地址的部件
寄存器的功能有什么?:
- 将寄存器内的数据执行算术或逻辑运算
- 寄存器内的数据可以用来指向内存的某个位置,即寻址
- 读写数据
寄存器的特点有什么?:
- 寄存器之间的数据传送速度很快
- 使用灵活(例如:暂存运算的中间数据)、控制方便(如:IP)
寄存器分类
寄存器的分类:
-
通用寄存器:传送和暂存数据;参与算术逻辑运算并保存结果
-
段寄存器:保存段地址,用于寻址时构成物理地址
-
专用寄存器:
- 指令指针寄存器:保存将要去除指令的有效地址
- 状态标志寄存器:反应处理器的状态和运算结果的某些特征
-
控制寄存器:
-
系统地址寄存器
-
调试寄存器
-
测试寄存器
通用寄存器
通用寄存器:
- 能存储数据,参与算术逻辑运算,给出存储器单元的地址
通用寄存器之数据寄存器
数据寄存器:
- 8086CPU可以直接访问这些数据寄存器的低8位
数据寄存器命名规则:
通用寄存器之变址寄存器
变址寄存器SI DI:
- 常作为指针,存放存储单元的有效地址,也可暂存数据
特殊用法:
- SI DI中保存的地址信息会随指令的执行而改变
- SI 串操作中存放源串地址,默认**DS段**
- DI 串操作中存放目的串地址,默认**ES段**
- 注意:该特殊用法只在字符串操作中有效
通用寄存器之堆栈指针寄存器
通用寄存器例子
对低位操作,不影响高位;对高位操作,不影响低位
段寄存器
段寄存器:
-
用来存放段首地址或段选择符的16位寄存器
-
一段汇编语言程序中至少有一个逻辑段——代码段,用于存放代码
段寄存器之代码段
代码段:
-
存放要执行的指令序列
-
段首地址用代码段寄存器CS来保存
-
指令指针寄存器IP只是本段中的地址
- 将要执行的下条指令的有效地址
-
CPU用 CS : IP 形成存储单元的物理地址(实际地址PA)
下面插入一个很重要的知识点:
物理地址(PA)=段地址(DS/CS)*16+偏移地址
当操作数是存放在存储器中时,存储器的存储单元的物理地址有两部分组成。一部分是偏移地址;一部分是段地址。在8086/8088的各种寻址方式中,寻找存储单元所需的偏移地址可由各种成分组成,称为有效地址,用EA表示。可以通过存储器寻址方式获得有效地址.
-
有效地址可以由几部分组成:基址寄存器内容、变址寄存器内容、比例因子和位移量。
-
段地址:电脑内的存储器地址可被分为若干逻辑段。每个逻辑段的起始地址称为段地址。
可以参考这个理解一下这个公式【汇编】“物理地址=段地址*16+偏移地址”的本质含义 - 知乎 (zhihu.com)
逻辑地址:逻辑地址是用户编程时使用的地址,分为段地址和偏移地址两部分
-
一个存储单元有一个物理地址,还有多个逻辑地址
下面这2个链接应该有所帮助
单片机基础之汇编语言入门学习(四) 物理地址 逻辑地址 段寄存器与逻辑段
这里有一简单的练习题
段寄存器之数据段
数据段DS
- 用来存放程序运行时所需的数据
- 段首地址用DS来保存
- CPU利用DS(段地址):EA(有效地址)形成存储单元的物理地址
段寄存器之堆栈段
堆栈段
段寄存器之附加段
附加段:
段寄存器之FS、GS
段寄存器之默认选择规定
专用寄存器
指令指针寄存器EIP:
- 保存将要执行指令的有效地址
- 该寄存器的内容是不允许被人更改,通过指令的执行自动改变
状态标志寄存器EFLAGS:
指令指针寄存器EIP
标志寄存器
状态标志寄存器:
状态标志
状态标志:CF(进位标志) PF(奇偶标志) AF(辅助进位标志) ZF(零标志) SF(符号标志) OF(溢出标志)
这里多说一句:溢出指的是对于8位符号数,运算结果超出了-128 ~ +127;或者对于16位符号数来说,运算结果超出了-32768 ~ +32767
零标志ZF(Zero Flag)
下面看一个例题
符号标志SF(Sign Flag)
注意:
先把十六进制转换成二进制,进行运算,如果结果超出参与运算数的位数,把最高位去掉,看最高位后面的那一位来判断
1位负,0为正
奇偶标志PF(Parity Flag)
这里一个数字代表1位(bit)
32位计算机:1字=32位=4字节,
64位计算机:1字(Word)=8字节(byte)=64位(bit)
汇编伪指令 db(字节) dw(字) dd(双字)
1dd = 2dw = 4db
一定要区分这两个概念
辅助进位标志AF(Auxiliary Carry Flag)
一定是低4位,只要低四位的任何一个位上有进位,AF就为1
进位标志CF(Carry Flag)
再次提醒:一定是最高位运算有进位,其他位没有关系,即便它后一个给最高位有一个进位,那也不是最高位自己的进位
溢出标志位OF(Overflow Flag)
溢出的判断
最高位:0 + 0 = 1 1 + 1 = 0
机器数的表示范围:
- 8位机器数:-128 ~ +127
- 16位的表达范围:-32768 ~ +32767
状态标志寄存器的例题
这里可以参考这个链接,有十六进制:十六进制相加减时,标志位怎么判断的问题_呓语dd的博客-CSDN博客_标志位怎么判断
2.3 工作模式
工作模式
实地址模式
只能访问最低端1MB字节的物理地址空间,00000H ~ FFFFFH
保护模式
虚拟8086模式
2.4 存储器组织
标准结构
基本存储单元:
- 由8个连续的位构成,用于存储一个字节的数据,,基本存储单元也被称为字节存储单元
存储器:
- 由一系列存储单元线性的构成,每一个基本存储单元有一个唯一的地址:物理地址
存储器功能:
-
存储数据和程序
-
地址总线对存储器进行寻址,数据总线对存储器内容进行读写
物理地址(实际地址)
存储器分段
每个逻辑段的容量最大可达64KB,各个逻辑段之间可以是重叠的
!!!
地址类型
物理地址、段首地址、有效地址、逻辑地址
物理地址(实际地址)和逻辑地址
下面看一道例题
默认段地址
存储器数据的存取方式
高高低低原则
- 低地址单元存放低字节数据,高地址单元存放高字节数据