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

相关推荐
01二进制代码漫游日记3 小时前
自定义类型:联合和枚举(一)
c语言·开发语言·学习·算法
二年级程序员4 小时前
单链表算法思路详解(下)
c语言·数据结构·算法
Sunsets_Red4 小时前
浅谈随机化与模拟退火
java·c语言·c++·python·算法·c#·信息学竞赛
白太岁5 小时前
操作系统开发:(9) 从硬件复位到程序执行:如何编写符合硬件动作的启动文件与链接脚本
c语言·汇编·嵌入式硬件·系统架构
麦德泽特7 小时前
机器人赛事系统架构:基于UDT和MQTT的低延迟、高可靠通信
c语言·开发语言·安全·系统架构·机器人
进击的横打8 小时前
【车载开发系列】浮点数与整型数的转换
c语言·车载系统
麦德泽特11 小时前
蓝牙与WiFi之外:为机器人选择合适的近距离无线通信技术
c语言·开发语言·安全·机器人·ssh
我 see your eyes12 小时前
CLA_TASK 任务的理解
c语言·c++·dsp开发
alanesnape13 小时前
Valgrind 测试详解--检测内存泄漏的好工具
c语言·c++·算法