行顺序,它和代码段寄存器CS一起可以确定当前所要取的指令的内存地址。顺序CS和IP同时改变时,会产生段间的程序转移。
一个指令字节,IP自动加1,指向下一个要读取的字节;当IP单独改变时,会发
标志寄存器的内容被称为处理器状态字PSW,用来存放8086/8088CPU在工作过程⑤段寄存器
系统中共有4个16位段寄存器,即代码段寄存器CS、数据段寄存器DS、堆栈制程序区,DS和ES控制数据区,SS控制堆栈区。 (6) 处理器状态字PSW
8086/8088内部标志寄存器的内容,又称为处理器状态字PSW。其中共有9 个标志位,可分成两类:一类为状态标志,一类为控制标志。其中状态标志表 示前一步操作(如加、减等)执行以后,ALU所处的状态,后续操作可以根据 这些状态标志进行判断,实现转移;控制标志则可以通过指令人为设置,用以
寄存器ES。这些段寄存器的内容与有效的地址偏移量一起,可确定内存的物理地
对某一种特定的功能起控制作用(如中断屏蔽等),反映了人们对微机系统工作 方式的可控制性。
图1-8 标志寄存器
PSW中各标志位的安排如图1-8所示(P12),这些标志位的含义如下: ①状态标志:6个
? CF—进位标志位,做加法时最高位出现进位或做减法时最高位出现借位,该
? PF—奇偶标志位,当运算结果的低8位中l的个数为偶数时,则该位置1,反
? AF—半进位标志位,做字节加法时,当低四位有向高四位的进位,或在做减
位的借位时,该标志位就置1。通常用于对BCD算术运算结果的调整。(例:1101 0110其中AF=1,CF=1)
? ZF—零标志位,运算结果为0时,该标志位置1,否则清0。
? SF—符号标志位,当运算结果的最高位为1,该标志位置1,否则清0。即与运
? OF—溢出标志位,OF溢出的判断方法如下: 加法运算:
若两个加数的最高位为0,而和的最高位为1,则产生上溢出; 若两个加数的最高位为1,而和的最高位为0,则产生下溢出; 两个加数的最高位不相同时,不可能产生溢出。 减法运算:
若被减数的最高位为0,减数的最高位为1,而差的最高位为1,则产生上溢出; 若被减数的最高位为1,减数的最高位为0,而差的最高位为0,则产生下溢出; 被减数及减数的最高位相同时,不可能产生溢出。
如果所进行的运算是带符号数的运算,则溢出标志恰好能够反映运算结果是否该位置1,反之为0。 举例:
+
0101 0100 1001
0100 0101 1001
0011 0110 1010
1001 1010 0011
符号数所能表达的范围,即字节运算大于十127或小于-128时,字运算大于十32
CF=0、AF=1、PF=1、ZF=0、SF=1、OF=1(两正数相加结果为负)
一般来讲,不是每次运算后所有的标志都改变,只是在某些操作之后,才对其中某个标志进行
②控制标志:3个
? TF—陷阱标志位(单步标志位、跟踪标志)。当该位置1时,将使8086/8088常用于程序的调试。
? IF—中断允许标志位,若该位置1,则处理器可以响应可屏蔽中断,否则就不
? DF—方向标志位,若该位置1,则串操作指令的地址修改为自动减量方向,反
二、 存储器组织(P13)
1. 存储容量
8088/8086有20根地址总线,因此,它可以直接寻址的存储器单元数为 220=1Mbyte 2. 物理地址
8088/8086可直接寻址1Mbyte的存储空间,其地址区域为00000H— FFFFFH,与存储单元一一对应的20位地址,我们称之为存储单元的物理地址。 3. 存储器的分段及段地址
由于CPU内部的寄存器都是16位的,为了能够提供20位的物理地址,系统中采用始地址的16位偏移 量。
规定存储器的一个段为64KB,由段寄存器来确定存储单元的段地址,由指令提供
这样,系统的整个存储空间可分为16个互不重叠的逻辑段,如图1-9所示。
存储器的每个段的容量为64KB,并允许在整个存储空间内浮动,即段与段之间可以连续排列,非常灵活,如图1-10所示(P14)。
图1-9 存储空间段结构 图1-10 分段逻辑结构
4. 偏移地址
偏移地址是某存储单元相对其所在段起始位置的偏移字节数,或简称偏移量。它是据指令的不同,它可以来自于CPU中不同的16 位寄存器(IP、SP、BP、SI、DI、BX等)。 5. 物理地址的形成
物理地址是由段地址与偏移地址共同决定的,段地址来自于段寄存器(CS、
DS、ES、SS),是十六位地址,由段地址及偏移地址计算物理地址的表达式如下: 物理地址=段地址×16+偏移地址
例如:系统启动后,指令的物理地址由CS的内容与IP的内容共同决定, 由于系统启动的CS=0FFFFH,IP=0000H,所以初始指令的物理地址为0FFFF0H, 我们可以在0FFFF0H单元开始的几个单元中,固化一条无条件转移指令的代 码,即转移到系统初始化程序部分。
6. 存储器分段组织带来存储器管理的新特点
首先,在程序代码量、数据量不是太大的情况下,可使它们处于同一段内, 即使它们在64Kbyte的范围内,这样可以减少指令的长度,提高指令运行的速
度;
其次,内存分段为程序的浮动分配创造了条件;
第三,物理地址与形式地址并不是一一对应的,举例:6832H:1280H,物理地址为第四,各个分段之间可以重叠 7. 特殊的内存区域
8088/8086系统中,有些内存区域的作用是固定的,用户不能随便使用,如:① 中断矢量区:00000H—003FFH共1K字节,用以存放256种中断类型的 中断矢量,每个中断矢量占用4个字节,共256×4=1024=1K
② 显示缓冲区:B0000H—B0F9FH约4000(25×80×2)字节,是单色显示器 的显示缓冲区,存放文本方式下,所显示字符的ASCII码及属性码;B8000H —BBF3FH约16K字节,是彩色显示器的显示缓冲区,存放图形方式下,屏 幕显示象素的代码。
③ 启动区:FFFF0H—FFFFFH共16个单元,用以存放一条无条件转移指令 的代码,转移到系统的初始化部分。
习题与思考:
1.8086/8088 CPU由哪两部分组成?它们的主要功能各是什么?它们之间是如何协调 工作的?
2.8086/8088 CPU中有哪些寄存器?各有什么用途?标志寄存器F有哪些标志位?各 在什么情况下置位?
3.8086/8088系统中储存器的逻辑地址和物理地址之间有什么关系?表示的范围各为多