第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保留

 

相关推荐
m0_547486661 小时前
《数据结构 (C语言)》期末试卷及答案(10套)2026版
c语言·开发语言·数据结构
八月的雨季 最後的冰吻1 小时前
FFmepg-- 42-ffplay.c 线程安全机制深度分析
c语言·安全·ffmpeg
逐光者9332 小时前
滤波器的 R 与 C 如何选择:从截止频率到工程实践
c语言·开发语言·r语言
水饺编程2 小时前
第2章:Linux 基础,whoami 命令
linux·c语言·汇编
Logic1014 小时前
C语言/数据结构动态规划题解:字符串变回文的最少操作次数——最长回文子序列(LPS)
c语言·数据结构·算法·动态规划·时间复杂度·回文串·最长回文子序列
wuminyu4 小时前
ZGC染色指针在虚拟线程stackChunkOop上的并发屏障全景分析
java·linux·c语言·jvm·c++
Logic1015 小时前
C语言/数据结构组合数学题解:数字好排列计数——质数倍数分类与阶乘取模
c语言·数据结构·算法·组合数学·时间复杂度·排列·取模运算
沫璃染墨6 小时前
《从零入门数据结构与算法(二):线性表详解——从顺序表原理到静态与动态实现》
c语言·数据结构·顺序表
wuyk5556 小时前
样章-第03讲-FreeRTOS在16KB-RAM上的裁剪与陷阱
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网·系统架构
爱读书的小胖6 小时前
Codewars Sum of a Sequence Hard Core Version C 解题分析
c语言·数据结构·算法