第2章 认识CPU-2.2 16位微处理器(2)

段寄存器能在8086中实现1MB物理空间寻址,并可与8080 CPU进行兼容。段寄存器都是16位的,分别称为代码段(Code Segment)寄存器CS、数据段(Data Segment)寄存器DS、堆栈段(Stack Segment)寄存器SS和附加段寄存器。

标志寄存器在8086中有一个16位用于反映处理器的状态和运算结果的某些特征。其中,包括9个标志位。

这些标志位分为两类,其一是运算结果标志,主要用于反映处理器的状态和运算结果特征,有进位标志CF(Carry Flags)、零标志ZF(Zero Flag)、符号标志SF(Sign Flag)、溢出标志OF(Over Flag)、奇偶标志PF(Parity Flag)、辅助进位标志AF(Auxiliary Carry Flag)。

其二是状态控制标志。它控制着处理器的操作。要通过专门的指令才能使状态控制标志发生变化。其中有方向标志DF(Direction Flag)、中断允许标志IF(Interrupt Flag)、追踪标志TF(Trap Flag)。

2.2.3 内存的寻址

8086 CPU有20根地址线,可直接寻址的物理地址空间为1MB。系统

内存由以字节为单位内存的存储单元组成,存储单元的物理地址长20位,范围是00000H至FFFFFH。尽管8086/8088内部的ALU每次最多进行16位运算,但存放存储单元地址偏移的指针寄存器都是16位的,所以8080/ 8086通过内存分段和使用段寄存器的方法来有效地实现寻址1MB的空间。

逻辑段要求满足第一逻辑段的开始地址必须是16的整数倍,第二逻辑段最长不超过64KB的空间。段与段可以相互重叠和联接。

存储单元的逻辑地址由段值和偏移两部分组成,用如下的形式表示:

段值:偏移

所以根据逻辑地址可以方便地得到存储单元的物理地址,计算公式如下:

物理地址=段值×16+偏移

段值通过逻辑段的段寄存器的值来取得,偏移可由指令指针的IP、堆栈指针SP和其他可作为内存指针使用的寄存器(SI、DI、BX和BP)给出,偏移还可以直接用16位数给出。指令中不使用物理地址,而使用逻辑地址,由总线接口单元BIU按需要根据段值和偏移自动形成20位物理地址。

2.2.4 中断处理

中断使CPU暂停正在运行的事件而转去处理另一事件。其实,中断还可以认为是一种函数的调用,不过,这个函数是随时都可能调用的,这样,中断就很好理解了。我们把引起这种操作的事件就叫中断源。它们可以是外设的输入输出请求,也可是计算机的一些异常事件或者其他的内部原因。

在8086/8088的计算机中,支持256种类型的中断,其中断编号依次为0~0FFH。

每种中断都有一个中断处理程序与之相对应。这些处理程序的段值和偏移量都被安排在内存的最顶端。因为它们占用1KB字节空间(256×4),所以当发生中断时,CPU根据中断向量表就可以很快地查找到对应的处理程序来处理中断事件。

我们从图中可以看到,所谓中断号其实就是中断处理的入口地址。

在IBM PC系列兼容计算机中,中断分为两种,一种是可屏蔽中断,另一种是不可屏蔽中断。DOS的部分中断分配情况如表2.1所示。

表2.1 DOS的部分中断分配表

向量号

功能

向量号

功能

0H

除法出错

10H

视频显示

01H

单步调试

11H

设备配置

02H

非屏蔽中断

12H

存储容量

03H

断点

13H

硬盘I/O

04H

溢出

14H

串行I/O

05H

打印屏幕

15H

扩充BIOS

06H

保留

16H

键盘输入

07H

保留

17H

打印输出

08H

定时器

18H

ROM BASIC

09H

键盘

19H

系统自举

0AH

保留(从中断控制器)

1AH

时钟管理

0BH

串行通信端口2

1BH

Ctrl+Break键处理

0CH

串行通信端口1

1CH

定时处理

0DH

硬盘(并行口)

1DH---1FH

参数指针

0EH

软盘

20H~2FH

DOS使用

0FH

打印机

30H~3FH

为DOS保留

相关推荐
AI科技星18 小时前
全域粒子质量几何曲率统一公式体系(通俗易懂版)
c语言·开发语言·网络·量子计算·agi
weixin_3864689618 小时前
openharmony 6.0编译rk3568过程记录
c语言·c++·git·python·vim·harmonyos·openharmony
Byte Wizard18 小时前
C语言内存函数
c语言
学会去珍惜19 小时前
C++如何与C语言混合编程_在C++项目中调用C库函数的extern “C“方法
c语言·c++·混合编程·extern
社交怪人19 小时前
【打印菱形】信息学奥赛一本通C语言解法(题号1028)
c语言·开发语言
csdn_aspnet1 天前
C语言 Lomuto分区算法(Lomuto Partition Algorithm)
c语言·开发语言·算法
谙弆悕博士1 天前
【附C源码】从零实现C语言堆数据结构:原理、实现与应用
c语言·数据结构·算法··数据结构与算法
三品吉他手会点灯1 天前
C语言学习笔记 - 35.数据类型 - printf函数的非输出控制符与格式优化
c语言·开发语言·笔记·学习
Ghost Face...1 天前
U-Boot SPL阶段与主阶段深度解析:从ROM到Kernel的完整引导之旅(ARMv8)
c语言
三品吉他手会点灯1 天前
C语言学习笔记 - 33.数据类型 - printf函数的详细用法
c语言·开发语言·笔记·学习·算法