计算机组成原理与汇编语言程序设计第4章2概要

上传人:今*** 文档编号:107478244 上传时间:2019-10-19 格式:PPT 页数:40 大小:529KB
返回 下载 相关 举报
计算机组成原理与汇编语言程序设计第4章2概要_第1页
第1页 / 共40页
计算机组成原理与汇编语言程序设计第4章2概要_第2页
第2页 / 共40页
计算机组成原理与汇编语言程序设计第4章2概要_第3页
第3页 / 共40页
计算机组成原理与汇编语言程序设计第4章2概要_第4页
第4页 / 共40页
计算机组成原理与汇编语言程序设计第4章2概要_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《计算机组成原理与汇编语言程序设计第4章2概要》由会员分享,可在线阅读,更多相关《计算机组成原理与汇编语言程序设计第4章2概要(40页珍藏版)》请在金锄头文库上搜索。

1、4.2.1 80x86 CPU的寄存器 180x86 CPU的寄存器分类 80x86 CPU的内部寄存器可分为以下3大类: 基本结构寄存器组 :通用寄存器、指令指针寄存器、标志寄存器、段寄存器。 系统级寄存器组 :系统地址寄存器、控制寄存器、测试寄存器、调试寄存器。 浮点寄存器组 :数据寄存器、标记字寄存器、指令和数据指针寄存器、控制字寄存器。,4.2 80x86 CPU的寄存器和主存储器,2基本结构寄存器组 基本结构寄存器组如右图所示: 通用寄存器; 指令指针寄存器; 标志寄存器; 段寄存器 。,(1)通用寄存器 图中除阴影区以外的寄存器是8086/8088和80286所具有的寄存器,它们都

2、是16位寄存器。其中4个16位的寄存器AX、BX、CX、DX可称为数据寄存器。这4个寄存器都是通用寄存器,但它们又可以用于各自的专用目的。 AX(Accumulator)作为累加器用。在乘除等指令中指定用来存放操作数。另外,所有的I/O 指令都使用这一寄存器与外部设备传送信息。 BX(Base)可以作为通用寄存器使用。此外,在计算存储器地址时,它经常用作基址寄存器。 CX(Count)可以作为通用寄存器使用。此外,它还常用来保存计数值,如在移位指令、循环(LOOP)和串处理指令中用作隐含的计数器。 DX可以作为通用寄存器使用。一般在做双字长运算时把DX和AX组合在一起存放一个双字长数,DX用来

3、存放高位字。此外,对某些I/O 操作,DX可用来存放I/O 的端口地址。,SP、BP、DI、SI 这4个16位寄存器可以像数据寄存器一样在运算过程中存放操作数,但它们只能以字(16位)为单位使用。此外,它们更经常的用途是在存储器寻址时,提供偏移地址。因此,可称它们为指针或变址寄存器。 (2)指令指针寄存器和标志寄存器 IP(Instruction Pointer)为指令指针寄存器,它用来存放代码段中的偏移地址。IP作为指令的地址指针,其作用类似于其他计算机中的程序计数器PC,当现行指令执行完毕时,由IP提供下一条指令地址。 FLAGS为标志寄存器,又称PSW(Program Status Wo

4、rd),即程序状态寄存器。这是一个存放条件码标志、控制标志和系统标志的寄存器。 80386及其后继机型的指令指针寄存器EIP和标志寄存器EFLAGS是32位的,其作用和相应的16位寄存器相同。,下图说明了80x86 CPU中标志寄存器的内容:, 条件码标志包括以下6位: OF(Over Flow Flag) 溢出标志。将参加算术运算的数看作带符号数,如运算结果超出补码表示数的范围N,即溢出时,则OF置1;否则OF置0。对于字节运算有128N+127;对于字运算有32768N+32767。 SF(Sign Flag) 符号标志。把指令执行结果看作带符号数,如结果为负,则SF置1;结果为正,则SF

5、置0。 ZF(Zero Flag) 零标志。如指令执行结果各位全为0时,则ZF置1;否则ZF置0。 CF(Carry Flag) 进位标志。在进行算术运算时,如最高位(对字操作是第15位,对字节操作是第7位)产生进位或借位时,则CF置1;否则置0。在移位类指令中,CF用来存放移出的代码(0或1)。 AF(Auxiliary Carry Flag) 辅助进位标志。在进行算术运算时,如低字节中低4位(第3位)产生进位或借位时,则AF置1;否则AF置0。AF可用于十进制运算的校正。 PF(Parity Flag) 奇偶标志。用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当运算结果中1的个

6、数为偶数时置1,否则置0。, 控制标志位1位 DF(Direction Flag)方向标志,用来在串处理指令中控制处理信息的方向。当DF位为1时,每次操作后使变址寄存器SI和DI减小,这样就使串处理从高地址向低地址方向处理。当DF位为0时,则使SI和DI增大,使串处理从低地址向高地址方向处理。 系统标志位有10位: TF(Trap Flag) 陷阱标志,用于调试时的单步方式操作。 IF(Interrupt Flag) 中断标志 。 IOPL(I/O Privilege Level) I/O特权级标志 。 NT(Nested Task) 嵌套任务标志,用来表示当前的任务是否嵌套在另一任务内。,R

7、F(Resume Flag) 恢复标志位,它与调试寄存器的断点一起使用,以保证不重复处理断点。 VM(Virtual-8086 Mode) 虚拟8086模式位 。 AC(Alignment Check mode) 对准检查方式位 。 VIF(Virtual Interrupt Flag) 虚拟中断标志。 VIP(Virtual Interrupt Pending flag) 虚拟中断未决标志。 ID(IDentification flag) 标识标志,程序有设置和清除ID标识的能力,以指示处理机对CPU ID指令的支持。,在调试程序DEBUG中提供了测试标志位的手段,它用符号表示某些标志位的值

8、:,AX102A BX0000 CX0100 DX0000 SP0040 BP0000 SI0000 DI0000 DS1528 ES1428 SS1723 CS1822 IP0003 NV UP DI PL NZ NA PO NC 1822:0003 8ED8 MOV DS,AX,(3)段寄存器 段寄存器用于存储器寻址,用来直接或间接地存放段地址。段寄存器的长度为16位,在80286以前的处理器中,只有代码段CS(Code Segment)、数据段DS(Data Segment)、堆栈段SS(Stack Segment)和附加段ES(Extra Segment)4个寄存器。从80386起,增

9、加了FS和GS两个段寄存器,它们也属于附加的数据段。有关段寄存器的使用将在下一节中说明。,4.2.2 80x86的主存储器 1存储单元的地址和内容 每8位二进制数组成一个字节,位编号如图(a)所示。8086、80286的字长为16位,由两个字节组成,位编号如图(b)所示。80386Pentium机的字长为32位,由两个字即4个字节组成,在80x86系列中称其为双字,位编号如图(c)所示。此外,还有一种由8个字节即字长为64位组成的4字,位编号如图(d)所示。,在存储器里以字节为单位存储信息。为了正确地存放或取得信息,每一个字节单元给予一个唯一的编号即存储器地址,称为物理地址。地址从0开始编号,

10、顺序地每次加1,因此存储器的物理地址空间呈线性增长。在机器里,地址也是用二进制数来表示的。当然它是无符号整数,书写格式为十六进制数。,8086/8088的地址总线20位: 可访问的字节单元地址范围为00000HFFFFFH; 80286的地址总线24位: 可访问的地址范围为000000HFFFFFFH; 80386/80486和Pentium地址总线32位: 地址范围为00000000HFFFFFFFFH; Pentium Pro和P地址总线36位: 地址范围为000000000HFFFFFFFFFH。,一个存储单元中存放的信息称为该存储单元的内容,右图表示了存储器里存放信息的情况。 0004

11、H号字节单元中存放的信息为78H,表示为: (0004H)=78H,两个字节单元就构成了一个字单元,字单元的地址采用它的低地址来表示。右图中0004H字单元的内容为5678H,表示为 (0004H)= 5678H,双字单元的地址由其最低字节的地址指定,因此0004H双字单元的内容为: (0004H)=12345678H。,2实模式存储器寻址 80x86中除8086/8088只能在实模式下工作外,其他的CPU均可在实模式或保护模式下工作。 (1)存储器的分段 实模式下允许的最大寻址空间为1 MB。8086/8088的地址总线宽度为20位,因而其最大寻址空间正好是1MB。在1MB的存储器里,每个存

12、储单元都有一个唯一的20位地址,称为物理地址。而对于其他微处理器在实模式下只能访问前1 MB的存储器地址。,实模式就是为8086/8088而设计的工作方式,它要解决在16位字长的机器里怎么提供20位地址的问题,而解决的办法是:将1 MB主存空间划分为若干段,每个段的最大长度为64 KB单元,这样段内地址可以用16位表示。如果能再提供段的20位起始地址,那么通过这两个地址就可以访问段内任何一个存储单元。因此,在CPU中设置的段寄存器只有16位,只能存放20位段起始地址的高16位,称它为段基值(Segment Base Value),而机器将段起始地址的低4位设置为0。故将段基值左移4位后(即末尾

13、加4位二进制数0),就得到一个20位的段起始地址,称它为段基地址或段基址(Segment Base Address)。显然,段基址为xxxx0H,其低4位二进制数为0,即能被16整除的主存物理地址才可作为段基址。,段内地址即偏移地址,它是一个主存单元与所在段的段基址之间的字节距离,通常由CPU按指令的寻址方式计算得到或由指令指针IP提供,又称为有效地址。当CPU访问某个主存单元时,必须指明由哪个段寄存器提供段基值,同时给出偏移地址。然后将16位段基值左移4位后与16位偏移地址相加,形成20位主存单元的物理地址,这一过程可以表示如下:,实模式存储器寻址过程如下图所示:,(2)段寄存器 在8086

14、80286中,有4个专门存放段基值的寄存器,称为段寄存器。它们分别是代码段CS、数据段DS、堆栈段SS和附加段ES寄存器。 每个段寄存器可以确定一个段的起始地址,而这些段则各有各的用途。代码段存放当前正在运行的程序。数据段存放当前运行程序所用的数据。堆栈段定义了堆栈的所在区域。附加段是附加的数据段,它是一个辅助的数据区,也是串处理指令的目的操作数存放区。 在80386及其后继的80x86中,除上述4个段寄存器外,又增加了2个段寄存器FS和GS,它们也是附加的数据段寄存器,所以808680286的程序允许4个存储段,而后继的80x86程序可允许6个存储段。,一般情况下,各段在存储器中的分配是由操

15、作系统负责的。每个段可以独立地占用小于或等于64 KB的存储区,如右图所示。,【例】 如果代码段中的程序占有8 KB(2000H)存储区,数据段占有2 KB(800H)存储区,堆栈段只占有256 B的存储区,此时段区的分配如右图所示。 从图中可以看出,代码段的区域可以是02000H03FFFH,但由于程序区只需要8 KB,所以程序区结束后的第一个小段的首地址就作为数据段的起始地址。也就是说,在这里,代码段和数据段可以重叠在一起。当然每个存储单元的内容是不允许发生冲突的。这里所谓的重叠只是指每个段区的大小允许根据实际需要来分配,而不一定要占有64 KB的最大段空间。,在80x86中,段寄存器和与

16、其对应存放偏移地址的寄存器之间有一种默认的组合关系,如下表所示:,8086/8088、80286:,段寄存器 偏移地址,3保护模式存储器寻址 原因:实模式的寻址空间太小,仅为1MB; 支持多任务处理:多个应用程序能在同一台计算机上同时运行,而且它们之间必须相互隔离,一个应用程序中的缺陷或故障不会破坏系统,也不会影响其他应用程序的运行。 (1)逻辑地址 在保护模式存储器寻址中 ,程序员在程序中指定逻辑地址, CPU采用一种比较复杂的方法来求得相应的物理地址。在保护模式下,逻辑地址由段选择器和偏移地址两部分组成,段选择器存放在段寄存器中,但它不能直接确定段基址,而由CPU通过一定的方法取得段基址,再和偏移地址相加,从而求得所选存储单元的线性地址,线性地址再通过分页部件转换成物理地址。,下图为保护模式存储器寻址示意图。可以看出,它和实模式寻址的另一个区别是:偏移地址为32位,最大段长可从64 KB扩大到4 GB。,(2)描述符 段选择器是通过描述符表取得描述符,从而得到段基址的。描述符

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号