4.2、80X86CPU的寄存器和主存储器4.2.180X86CPU的寄存器4.2.280X86CPU的主存储器返回4.2.180X86CPU的寄存器1、80X86CPU的寄存器分类2、基本结构寄存器组返回1、80X86CPU的寄存器分类返回•一般应用程序中只能访问(1)和(3),(2)只能由系统程序访问,并且它的特权级必须为零级。(1)基本结构寄存器组(2)系统级寄存器组(3)浮点寄存器组(1)基本结构寄存器组返回通用寄存器指令指针寄存器标志寄存器段寄存器EAXEBXECXEDXESPEBPESIEDIEIPEFLAGSFSGS80X86CPU基本结构寄存器组(1)、通用寄存器•8086/8088H80286:16位•80386及后继机型:32位•8086/8088H80286:A、数据寄存器:AX、BX、CX、DX用来保存操作数或运算结果等信息。AX——累加器。使用频度最高,用于算术、逻辑运算以及与外设传送信息等。•BX——基址寄存器。常用于存放存储器地址。•CX——计数器。一般作为循环或串操作等指令中的隐含计数器。•DX——数据寄存器。常用来存放双字数据的高16位,或存放外设端口地址。B、地址寄存器:主要用于存放某个存储单元的偏移地址。•SI:存放数据段中某源操作数所在存储单元相对段首址的偏移量。•DI:存放数据段中某目的操作数所在存储单元相对段首址的偏移量。•SP:用于存放当前堆栈段中栈顶单元的偏移地址;•BP:用于存放堆栈段中某一存储单元的偏移地址。•80386及后继机型:32位的通用寄存器:EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI;•可以用来存放不同宽度的数据;•所有32位寄存器既可以存放数据,也可以存放地址;•每个寄存器的专用特性与8086/8088的对应寄存器一致。(2)系统级寄存器组包括:系统地址寄存器控制指针寄存器测试寄存器调试寄存器返回(3)浮点寄存器组包括:数据寄存器标记指针寄存器指令和数据指针寄存器控制字寄存器返回(2)指令指针寄存器和标志寄存器指令指针IP:存放下一条指令的地址。在程序的执行过程中,每当从主存读取指令后,自动修改IP的值,使IP内容为下一条指令起始字节所在单元的偏移量。返回本节指令队列•按先进先出的原则,存放从主存中读取的指令。当EU执行指令时,从指令队列中取最先进入队列的指令给以执行。•8086:6个字节的指令队列(空出2个字节且无其它总线请求)•8088:4个字节的指令队列(空出1个字节且无其它总线请求)标志寄存器:•存放条件标志、控制标志、系统标志位;•8086/8088H80286:16位•80386及后继机型:32位•1.条件标志•2.控制标志•3、系统标志位1.条件标志:主要用于保存一条指令执行后,CPU所处状态信息及运算结果的特征。(1)进位标志CF(2)零标志ZF(3)符号标志SF(4)溢出标志OF(5)奇偶标志PF(6)辅助进位标志AF2.控制标志•(1)方向标志DF返回本节3.系统标志•可以用于I/O、可屏蔽中断、程序调试、任务切换和系统工作发生等的控制。返回本节(1)跟踪标志TF(2)中断允许标志IF(3)I/O特权级标志(4)嵌套任务(5)恢复(6)虚拟8086模式位(7)对准检查方式位(8)虚拟中断(9)虚拟中断未决标志(10)标识标志返回本节D15D0OFDFIFTFSFZFAFPFCF进借位标志奇偶标志半进借位标志零标志符号标志单步中断中断允许方向标志溢出标志1-有进、借位0-无进、借位1-低8位有偶数个10-低8位有奇数个11-低4位向高4位有进、借位0-低4位向高4位无进、借位1-结果为00-结果不为0(3)、段寄存器•段寄存器:用来确定该段在内存中的起始地址。•CS、DS、ES、SS、FS、GS4.2.280X86的主存储器返回1、存储器的地址和内容2、实模式存储器寻址3、保护模式存储器寻址4、808X6CPU逻辑地址的来源1、存储器的地址和内容1)在存储器里以字节为单位存储信息。2)每一个字节单元给予一个唯一的编号,即存储单元地址(物理地址)。地址从0开始编号,顺序地每次加1,机器里以无符号二进制整数表示,书写格式为16进制数。3)8086/8088的地址总线为20位,可寻址空间为00000H~FFFFFH。•80286的地址总线为24位,可寻址空间为000000H~FFFFFFH。•80386、80486和Pentium的地址总线为32位,可寻址空间为00000000H~FFFFFFFFH。•PentiumPro和PentiumⅡ的地址总线为36位,可寻址空间为000000000H~FFFFFFFFFH。4)一个存储单元中存放的信息称为该存储单元的内容。(0004H)=78H5)一个字数据占用两个相邻的存储单元。采用“低对低、高对高”的原则。低字节所在存储单元的地址作为该字数据的单元地址。双字、4字单元的存放方法与此类似。主存00000H10002H10001H10000H10003H12H34H56H78H(10001H)=34H(10002H)=56H(10000H)=12H(10003H)=78H(10000H)=3412H(10001H)=5634H(10002H)=7856H字节单元字单元(34560H)=34H(34561H)=12H(34560H)=1234H(34561H)=5612H例(0004H)=5678H(0004H)=12345678H((X))=Z•存储单元:主存由若干个存储单元组成。每个存储单元内存放8位二进制数。•存储单元地址:8086系统中,为了标识和存取每一个存储单元,给每个存储单元规定一个编号,这就是存储单元地址。从0开始顺次编号。•存储单元的内容:一个存储单元中存放的信息称为该存储单元的内容。2、实模式存储器寻址(1)存储器的分段:•8086/8088只能在实模式下工作外,其他的CPU均可在实模式或保护模式下工作。•实模式下允许的最大寻址空间为1MB。8086/8088的地址总线为20位,用20位无符号二进制数表示存储单元的地址(5位十六进制数表示,即00000H~FFFFFH)。十六进制地址二进制地址存储单元00000H00001H00002H00003HFFFFEHFFFFFH0000,0000,0000,0000,00000000,0000,0000,0000,00010000,0000,0000,0000,00030000,0000,0000,0000,00021111,1111,1111,1111,11101111,1111,1111,1111,1111708086/8088主存储器16位字长的机器里如何提供20位地址?1.将1MB主存分为若干段;3、16位的段寄存器中存放该段在内存中的起始地址的高16位,称为段基值。机器将段起始地址的最低四位设置为0;(段基址为20位)2、每个段的长度不同,但不能超过64K字节。(段内地址为16位);•段内地址(偏移地址):一个主存单元与所在段的段基址之间的字节距离,计算得到或由IP提供。•CPU访问某个主存单元内容时由段寄存器给出该单元所在段的段基值,并给出该单元在该段内的偏移量。段基值和段内的偏移量构成物理地址。8086/8088CPU中有一个地址加法器,它将段寄存器提供的段基值自动左移4位,然后与16位的偏移地址相加,形成。物理地址=段基值*16+偏移地址。段寄存器值偏移量+物理地址16位4位16位20位存储器物理地址的计算方法•每个段寄存器用来确定该段在内存中的起始地址。(2)段寄存器•8086~80286:CS、DS、SS、ES。•80386及后继机型:CS、DS、SS、ES、FS、GS。•80X86中段寄存器与其对应存放偏移地址的寄存器之间有一种默认的组合关系。1)CS:存放代码段的段首址的高16位。代码段中用来存放程序的指令序列。2)DS:存放数据段的段首址的高16位。数据段中存放程序的有关数据。3)SS:存放堆栈段的段首址的高16位。堆栈段用于存放按后进先出顺序存取的信息。4)DS:存放数据段的段首址的高16位。附加段中常存放运算结果和辅助数据。8086存储器的段结构•把1M字节的存储器分为任意个段。•一个逻辑段是存储器中可独立寻址的一个逻辑单位,每个段的长度不超过64K字节。•各段起始单元的物理地址,称为段基址(段首址)每个段基址为20位,低四位都为0,能被16整除。1)段的大小按实际需要确定,最大为64K,实际应用中可能小于64K。2)不同的段可以是相邻的、间隔的、或部分重叠的或完全重叠或交叉的。3)段的实体不能重叠。4)CPU可以通过四个段寄存器访问四个不同的当前段。注意事项:【例】各独立段的分配情况示例。设CS=B000H、DS=1CDEH、SS=4200H、ES=0150H,它们分别为代码段、数据段、堆栈段和附加段的段基值。自每个段首址开始,各段均占64KB的范围,各段之间互不重叠。如图所示。【例】各段相邻接情况示例。设CS=0200H、DS=0400H、SS=0480H,这样代码段、数据段和堆栈段的物理首地址分别为02000H、04000H和04800H。其中代码段占8KB地址空间,数据段占2KB,堆栈段占256B,SP=0100H。如图1.6所示。图1.6各段邻接存储单元分配图3、保护模式存储器寻址引入保护模式的原因:•实模式下的寻址空间太小;•它使微机系统能支持多任务处理;•多任务处理:多个应用程序在一台计算机上同时运行,而且它们之间必须相互隔离,使应用程序中缺陷或故障不会破坏系统农业不会影响其它应用程序的运行。!!保护模式寻址支持虚拟存储器特性;•实模式:逻辑地址(程序)物理地址(CPU执行指令时计算)逻辑地址=段基值:偏移地址•保护模式:逻辑地址(程序)物理地址(间接方法)逻辑地址=段选择器:偏移地址2、段基值再和偏移地址相加,从而求得线性地址;1、段选择器存放在段寄存器中,它不能直接确定段基值,而由CPU通过一定的方法求得相应的段基值;3、线性地址再通过分页部件转换成物理地址。•段选择器是通过描述符表取得描述符,从而得到段基址。•(2)描述符•描述符有8个字节长,用来说明段的起始地址、大小、段在存储器中的位置及有关的控制和状态信息。Base(B15~B0)Limit(l15~l0)0PDPLSTYPEABase(B23~B16)311516080286描述符①段基址(Base):用来指定段的起始地址。②段界限(Limit):用来存放该段的段长度。③访问权(AccessRights)④附加字段如何根据段选择器找到描述符?(3)段选择器和描述符表•描述符表存放在存储器中,主要有4种描述符表:①全局描述符表GDT②局部描述符表LDT③中断描述符表IDT④任务状态段TSS•描述符表都存放在存储器中,每个表分别构成一个64KB长的段,表中可存放8K个描述符。•GDT中的描述符所指定的段可用于所有程序;•LDT中的描述符所指定的段通常只用于一个用户程序(或称一个任务)。•在整个系统里只有一个GDT和一个IDT;二LDT可以有多个,他们分别对应于不同的任务。•段选择器存放在段寄存器中,16位长。其格式如下:INDEXTIRPL153021INDEX:索引值,即描述符表索引值,给出所选描述符在描述符表中的地址。共13位,可从表中8K个描述符中选取一个。•为了提高保护模式存储器寻址的速度,CPU中设置了6个64位的描述符寄存器,用来存放对应段的描述符。1、从段寄存器中读取段选择器的值;2、硬件自动地根据段选择器的索引值,从系统描述符表中取出一个8字节的描述符,装入到相应的段描述符寄存器中;3、以后每当出现对该段的访问时,就直接使用相应的段描述符寄存器中段基值计算线性地址,而不需要在内存中查表得到段基值。•段寄存器是程序可访问的,段描述符寄存器程序不可访问。保护模式和实模式的区别:•偏移地址位16位,最大段长可从64KB扩大到4GB。4、80X86逻辑地址的来源•实模式:段基值:偏移地址•保护模式:段选