汇编与组成第4章2.ppt
《汇编与组成第4章2.ppt》由会员分享,可在线阅读,更多相关《汇编与组成第4章2.ppt(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第 4 章章(2)14.2.1 80 x86 CPU的寄存器的寄存器 180 x86 CPU的寄存器分类的寄存器分类 80 x86 CPU的内部寄存器可分为以下的内部寄存器可分为以下3大类:大类:基本结构寄存器组基本结构寄存器组 :通用寄存器、指令指针寄存器、标志寄存通用寄存器、指令指针寄存器、标志寄存器、段寄存器。器、段寄存器。系统级寄存器组系统级寄存器组 :系统地址寄存器、控制寄存器、测试寄存器、系统地址寄存器、控制寄存器、测试寄存器、调试寄存器。调试寄存器。浮点寄存器组浮点寄存器组 :数据寄存器、标记字寄存器、指令和数据指针寄数据寄存器、标记字寄存器、指令和数据指针寄存器、控制字寄存器
2、。存器、控制字寄存器。4.2 80 x86 CPU的寄存器和主存储器的寄存器和主存储器22基本结构寄存器组基本结构寄存器组 基基本本结结构构寄寄存存器器组组如如右右图图所示:所示:通用寄存器;通用寄存器;指令指针寄存器;指令指针寄存器;标志寄存器;标志寄存器;段寄存器段寄存器。3(1)通用寄存器)通用寄存器 图中除阴影区以外的寄存器是图中除阴影区以外的寄存器是8086/8088和和80286所具所具有的寄存器,它们都是有的寄存器,它们都是16位寄存器。其中位寄存器。其中4个个16位的寄存位的寄存器器AX、BX、CX、DX可称为数据寄存器。这可称为数据寄存器。这4个寄存器都个寄存器都是通用寄存器
3、,但它们又可以用于各自的专用目的。是通用寄存器,但它们又可以用于各自的专用目的。AX(Accumulator)作为累加器用。)作为累加器用。在乘除等指令中在乘除等指令中指定用来存放操作数。另外,所有的指定用来存放操作数。另外,所有的I/O 指令都使用这一指令都使用这一寄存器与外部设备传送信息。寄存器与外部设备传送信息。BX(Base)可以作为通用寄存器使用。)可以作为通用寄存器使用。此外,在计算此外,在计算存储器地址时,它经常用作基址寄存器。存储器地址时,它经常用作基址寄存器。CX(Count)可以作为通用寄存器使用。)可以作为通用寄存器使用。此外,它还此外,它还常用来保存计数值,如在移位指令
4、、循环(常用来保存计数值,如在移位指令、循环(LOOP)和串)和串处理指令中用作隐含的计数器。处理指令中用作隐含的计数器。DX可以作为通用寄存器使用。可以作为通用寄存器使用。一般在做双字长运算时一般在做双字长运算时把把DX和和AX组合在一起存放一个双字长数,组合在一起存放一个双字长数,DX用来存放用来存放高位字。此外,对某些高位字。此外,对某些I/O 操作,操作,DX可用来存放可用来存放I/O 的端的端口地址。口地址。4 SP、BP、DI、SI 这这4个个16位寄存器可以像数据寄存器位寄存器可以像数据寄存器一样在运算过程中存放操作数,但它们只能以字(一样在运算过程中存放操作数,但它们只能以字(
5、16位)位)为单位使用。此外,它们更经常的用途是为单位使用。此外,它们更经常的用途是在存储器寻址时,在存储器寻址时,提供偏移地址。因此,可称它们为指针或变址寄存器。提供偏移地址。因此,可称它们为指针或变址寄存器。(2)指令指针寄存器和标志寄存器)指令指针寄存器和标志寄存器 IP(Instruction Pointer)为指令指针寄存器,它用来)为指令指针寄存器,它用来存放代码段中的偏移地址。存放代码段中的偏移地址。IP作为指令的地址指针,其作作为指令的地址指针,其作用类似于其他计算机中的程序计数器用类似于其他计算机中的程序计数器PC,当现行指令执,当现行指令执行完毕时,由行完毕时,由IP提供下
6、一条指令地址。提供下一条指令地址。FLAGS为标志寄存器,又称为标志寄存器,又称PSW(Program Status Word),即程序状态寄存器。),即程序状态寄存器。这是一个存放条件码标志、这是一个存放条件码标志、控制标志和系统标志的寄存器控制标志和系统标志的寄存器。80386及其后继机型的指令指针寄存器及其后继机型的指令指针寄存器EIP和标志寄存和标志寄存器器EFLAGS是是32位的,其作用和相应的位的,其作用和相应的16位寄存器相同。位寄存器相同。5下图说明了下图说明了80 x86 CPU中标志寄存器的内容中标志寄存器的内容:6 条件码标志包括以下条件码标志包括以下6位:位:OF(Ov
7、er Flow Flag)溢出标志。溢出标志。将参加算术运算的数将参加算术运算的数看作带符号数,如运算结果超出补码表示数的范围看作带符号数,如运算结果超出补码表示数的范围N,即溢出时,则,即溢出时,则OF置置1;否则;否则OF置置0。对于字节运算有。对于字节运算有 128N+127;对于字运算有;对于字运算有 32768N+32767。SF(Sign Flag)符号标志。符号标志。把指令执行结果看作带符号数,把指令执行结果看作带符号数,如结果为负,则如结果为负,则SF置置1;结果为正,则;结果为正,则SF置置0。ZF(Zero Flag)零标志。零标志。如指令执行结果各位全为如指令执行结果各位
8、全为0时,时,则则ZF置置1;否则;否则ZF置置0。CF(Carry Flag)进位标志。进位标志。在进行算术运算时,如最在进行算术运算时,如最高位(对字操作是第高位(对字操作是第15位,对字节操作是第位,对字节操作是第7位)产生进位或借位时,位)产生进位或借位时,则则CF置置1;否则置;否则置0。在移位类指令中,。在移位类指令中,CF用来存放移出的代码(用来存放移出的代码(0或或1)。)。AF(Auxiliary Carry Flag)辅助进位标志。辅助进位标志。在进行算在进行算术运算时,如低字节中低术运算时,如低字节中低4位(第位(第3位)产生进位或借位时,则位)产生进位或借位时,则AF置
9、置1;否则;否则AF置置0。AF可用于十进制运算的校正可用于十进制运算的校正。PF(Parity Flag)奇偶标志。奇偶标志。用来为机器中传送信息时可用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当运算结果中能产生的代码出错情况提供检验条件。当运算结果中1的个数为偶数的个数为偶数时置时置1,否则置,否则置0。7 控制标志位控制标志位1位位 DF(Direction Flag)方向标志,用来在串处理指令)方向标志,用来在串处理指令中控制处理信息的方向。中控制处理信息的方向。当当DF位为位为1时,每次操作后使变时,每次操作后使变址寄存器址寄存器SI和和DI减小,这样就使串处理从高地址
10、向低地址减小,这样就使串处理从高地址向低地址方向处理。当方向处理。当DF位为位为0时,则使时,则使SI和和DI增大,使串处理从增大,使串处理从低地址向高地址方向处理。低地址向高地址方向处理。系统标志位有系统标志位有10位:位:TF(Trap Flag)陷阱标志陷阱标志,用于调试时的单步方式,用于调试时的单步方式操作。操作。IF(Interrupt Flag)中断标志中断标志。IOPL(I/O Privilege Level)I/O特权级标志特权级标志。NT(Nested Task)嵌套任务标志嵌套任务标志,用来表示当前的,用来表示当前的任务是否嵌套在另一任务内。任务是否嵌套在另一任务内。8 R
11、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标识
12、的能力,以指示处理机对标识的能力,以指示处理机对CPU ID指令的支持。指令的支持。9 在调试程序在调试程序DEBUG中提供了测试标志位的手段,它中提供了测试标志位的手段,它用符号表示某些标志位的值:用符号表示某些标志位的值:标志名标志名标志为标志为1标志为标志为0 OF 溢出(是溢出(是/否)否)OVNV DF 方向(增量方向(增量/减量)减量)DNUP IF 中断(允许中断(允许/关闭)关闭)EIDI SF 符号(正符号(正/负)负)NGPL ZF 零(是零(是/否)否)ZRNZ AF 辅助进位(是辅助进位(是/否)否)ACNA PF 奇偶(偶奇偶(偶/奇)奇)PEPO CF 进位(是进位
13、(是/否)否)CYNC10(3)段寄存器)段寄存器 段寄存器用于存储器寻址,用来直接或间接地存放段段寄存器用于存储器寻址,用来直接或间接地存放段地址。段寄存器的长度为地址。段寄存器的长度为16位,在位,在80286以前的处理器中,以前的处理器中,只有代码段只有代码段CS(Code Segment)、数据段)、数据段DS(Data Segment)、堆栈段)、堆栈段SS(Stack Segment)和附加段)和附加段ES(Extra Segment)4个寄存器。从个寄存器。从80386起,增加了起,增加了FS和和GS两个段寄存器,它们也属于附加的数据段。有关段两个段寄存器,它们也属于附加的数据段
14、。有关段寄存器的使用将在下一节中说明。寄存器的使用将在下一节中说明。114.2.2 80 x86的主存储器的主存储器 1存储单元的地址和内容存储单元的地址和内容 每每8位二进制数组成一个字节,位编号位二进制数组成一个字节,位编号如图(如图(a)所示。)所示。8086、80286的字长为的字长为16位,由两个字节组成,位编号如图(位,由两个字节组成,位编号如图(b)所)所示。示。80386Pentium机的字长为机的字长为32位,由位,由两个字即两个字即4个字节组成,在个字节组成,在80 x86系列中称系列中称其为双字,位编号如图(其为双字,位编号如图(c)所示。此外,)所示。此外,还有一种由还
15、有一种由8个字节即字长为个字节即字长为64位组成的位组成的4字,位编号如图(字,位编号如图(d)所示。)所示。12 在存储器里以字节为单位存储信息。为了正确地存放或取在存储器里以字节为单位存储信息。为了正确地存放或取得信息,每一个字节单元给予一个唯一的编号即存储器地址,得信息,每一个字节单元给予一个唯一的编号即存储器地址,称为称为物理地址物理地址。地址从。地址从0开始编号,顺序地每次加开始编号,顺序地每次加1,因此存储,因此存储器的物理地址空间呈线性增长。在机器里,地址也是用二进制器的物理地址空间呈线性增长。在机器里,地址也是用二进制数来表示的。当然它是无符号整数,书写格式为十六进制数。数来表
16、示的。当然它是无符号整数,书写格式为十六进制数。8086/8088的的地址总线地址总线20位:位:可访问的字节单元地址范围为可访问的字节单元地址范围为00000HFFFFFH;80286的的地址总线地址总线24位:位:可访问的地址范围为可访问的地址范围为000000HFFFFFFH;80386/80486和和Pentium地址总线地址总线32位:位:地址范围为地址范围为00000000HFFFFFFFFH;Pentium Pro和和P地址总线地址总线36位:位:地址范围为地址范围为000000000HFFFFFFFFFH。13 一个存储单元中存放的信息称为该存储单元的内容,一个存储单元中存放的
17、信息称为该存储单元的内容,右图表示了存储器里存放信息的情况。右图表示了存储器里存放信息的情况。0004H号字节单元中存放的信息为号字节单元中存放的信息为78H,表示为:表示为:(0004H)=78H 两两个个字字节节单单元元就就构构成成了了一一个个字字单单元元,字字单单元元的的地地址址采采用用它它的的低低地地址址来来表表示示。右右图图中中00040004H H字字单单元元的的内内容容为为56785678H H,表示为表示为 (00040004H H)=5678H=5678H 双字单元的地址由其最低字节的地址指定,因此双字单元的地址由其最低字节的地址指定,因此0004H双字单元的内容为:双字单元
18、的内容为:(0004H)=12345678H。14 2实模式存储器寻址实模式存储器寻址 80 x86中除中除8086/8088只能在实模式下工作外,其他的只能在实模式下工作外,其他的CPU均可在实模式或保护模式下工作。均可在实模式或保护模式下工作。(1)存储器的分段)存储器的分段 实模式下允许的最大寻址空间为实模式下允许的最大寻址空间为1 MB。8086/8088的地的地址总线宽度为址总线宽度为20位,因而其最大寻址空间正好是位,因而其最大寻址空间正好是1MB。在在1MB的存储器里,每个存储单元都有一个唯一的的存储器里,每个存储单元都有一个唯一的20位地址,位地址,称为物理地址。称为物理地址。
19、而对于其他微处理器在实模式下只能访问而对于其他微处理器在实模式下只能访问前前1 MB的存储器地址。的存储器地址。15 实模式就是为实模式就是为8086/8088而设计的工作方式,它要解决在而设计的工作方式,它要解决在16位字长的机器里怎么提位字长的机器里怎么提供供20位地址的问题,而解决的办法是:将位地址的问题,而解决的办法是:将1 MB主存空间划分为若干段,每个段的最大主存空间划分为若干段,每个段的最大长度为长度为64 KB单元,这样段内地址可以用单元,这样段内地址可以用16位表示。如果能再提供段的位表示。如果能再提供段的20位起始地址,位起始地址,那么通过这两个地址就可以访问段内任何一个存
20、储单元。因此,在那么通过这两个地址就可以访问段内任何一个存储单元。因此,在CPU中设置的段寄中设置的段寄存器只有存器只有16位,只能存放位,只能存放20位段起始地址的高位段起始地址的高16位,称它为位,称它为段基值(段基值(Segment Base Value),而机器将段起始地址的低而机器将段起始地址的低4位设置为位设置为0。故将段基值左移。故将段基值左移4位后(即末尾加位后(即末尾加4位位二进制数二进制数0),就得到一个),就得到一个20位的段起始地址,称它为位的段起始地址,称它为段基地址或段基址(段基地址或段基址(Segment Base Address)。显然,段基址为显然,段基址为x
21、xxx0H,其低其低4位二进制数为位二进制数为0,即能被,即能被16整除的主整除的主存物理地址才可作为段基址。存物理地址才可作为段基址。段内地址即段内地址即偏移地址偏移地址,它是一个主存单元与所在段的段基址之间的字节距离,通常,它是一个主存单元与所在段的段基址之间的字节距离,通常由由CPU按指令的寻址方式计算得到或由指令指针按指令的寻址方式计算得到或由指令指针IP提供,又称为提供,又称为有效地址有效地址。当。当CPU访问某访问某个主存单元时,必须指明由哪个段寄存器提供段基值,同时给出偏移地址。然后将个主存单元时,必须指明由哪个段寄存器提供段基值,同时给出偏移地址。然后将16位段位段基值左移基值
22、左移4位后与位后与16位偏移地址相加,形成位偏移地址相加,形成20位主存单元的物理地址,这一过程可以表示位主存单元的物理地址,这一过程可以表示如下:如下:16实模式存储器寻址过程如下图所示:实模式存储器寻址过程如下图所示:17(2)段寄存器)段寄存器 在在808680286中,有中,有4个专门存放段基值的寄存器,称个专门存放段基值的寄存器,称为段寄存器。它们分别是为段寄存器。它们分别是代码段代码段CS、数据段、数据段DS、堆栈段、堆栈段SS和和附加段附加段ES寄存器寄存器。每个段寄存器可以确定一个段的起始地址,而这些段则各每个段寄存器可以确定一个段的起始地址,而这些段则各有各的用途。有各的用途
23、。代码段存放当前正在运行的程序。数据段存放当代码段存放当前正在运行的程序。数据段存放当前运行程序所用的数据。堆栈段定义了堆栈的所在区域。附加前运行程序所用的数据。堆栈段定义了堆栈的所在区域。附加段是附加的数据段,它是一个辅助的数据区,也是串处理指令段是附加的数据段,它是一个辅助的数据区,也是串处理指令的目的操作数存放区。的目的操作数存放区。在在80386及其后继的及其后继的80 x86中,除上述中,除上述4个段寄存器外,又个段寄存器外,又增加了增加了2个段寄存器个段寄存器FS和和GS,它们也是附加的数据段寄存器,它们也是附加的数据段寄存器,所以所以808680286的程序允许的程序允许4个存储
24、段,而后继的个存储段,而后继的80 x86程序程序可允许可允许6个存储段。个存储段。18 一般情况下,各段在存储器一般情况下,各段在存储器中的分配是由操作系统负责的。中的分配是由操作系统负责的。每个段可以独立地占用小于或每个段可以独立地占用小于或等于等于64 KB的存储区,如右图所的存储区,如右图所示。示。19 【例例】如果代码段中的程序占有如果代码段中的程序占有8 KB(2000H)存储区,数据段占有)存储区,数据段占有2 KB(800H)存储区,堆栈段只占有)存储区,堆栈段只占有256 B的存储区,此时段区的分配如右的存储区,此时段区的分配如右图所示。图所示。从图中可以看出,代码段的区域可
25、从图中可以看出,代码段的区域可以是以是02000H03FFFH,但由于程序区,但由于程序区只需要只需要8 KB,所以程序区结束后的第,所以程序区结束后的第一个小段的首地址就作为数据段的起始一个小段的首地址就作为数据段的起始地址。也就是说,在这里,代码段和数地址。也就是说,在这里,代码段和数据段可以重叠在一起。当然每个存储单据段可以重叠在一起。当然每个存储单元的内容是不允许发生冲突的。这里所元的内容是不允许发生冲突的。这里所谓的重叠只是指每个段区的大小允许根谓的重叠只是指每个段区的大小允许根据实际需要来分配,而不一定要占有据实际需要来分配,而不一定要占有64 KB的最大段空间。的最大段空间。20
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 组成
限制150内