当前位置:首页 » 编程软件 » 80386编程

80386编程

发布时间: 2022-06-18 19:09:36

1. 80386的发展史

80386(x32)
1985年春天的时候,英特尔公司已经成为了第一流的芯片公司。但它的8088/8086和80286芯片还没有占到压倒性的优势—尽管这些芯片非常成功。像Zilog公司和摩托罗拉公司,凭借着自己毫不逊色甚至稍高一筹的芯片产品,成为英特尔公司的强有力竞争者。而蓝色巨人IBM正在秘密研究自己的CPU—286,AMD公司也开始涉足到CPU制造领域,他们将正在开发的第一块芯片称为386。而这个时候,英特尔公司的主营业务还不是CPU,而是存储器。
英特尔决心全力开发32位核心的CPU—80386,而逐渐放弃存储器业务。Intel给80386设计了三个技术要点:使用“类286”结构,开发80387协微处理器增强浮点运算能力,开发配套高速缓存解决内存速度瓶颈。
1985年10月17日,英特尔的划时代的产品80386DX正式发布了,其内部包含27.5万个晶体管,时钟频率为12.5MHz,后逐步提高到20MHz、25MHz、33MHz,最后还有少量的40MHz产品。80386DX的内部和外部数据总线是32位,地址总线也是32位,可以寻址到4GB内存,并可以管理64TB的虚拟存储空间。它的运算模式除了具有实模式和保护模式以外,还增加了一种“虚拟86”的工作方式,可以通过同时模拟多个8086微处理器来提供多任务能力。80386DX有比80286更多的指令,频率为12.5MHz的80386每秒钟可执行6百万条指令,比频率为16MHz的80286快2.2倍。80386最经典的产品为80386DX-33MHz,一般我们说的80386就是指得它。
由于32位微处理器的强大运算能力,PC的应用扩展到很多的领域,如商业办公和计算、工程设计和计算、数据中心、个人娱乐。80386使32位CPU成为了PC工业的标准。
同时,80386采用“类286”总线结构,这样就可以保持软硬件的兼容性,可以利用现有技术和配件,降低整机的开发和制造成本。另外,80386有三种工作模式,适应的操作系统比较多,而且对现有的程序兼容性比较好。多任务处理一贯是大中型机的专利,但80386将多任务性能引入,在80386中有个用任务寄存器,用任务寄存器来管理任务的内存段,从而实现任务的切换。多任务使80386以一种广泛的适应性和一种重要的工具进入了各行各业。
虽然当时80386没有完善和强大的浮点运算单元,但配上80387协处理器,80386就可以顺利完成AutoCAD等需要大量浮点运算的任务,从而顺利进入了主流的商用电脑市场。另外,80386还有其他丰富的外围配件支持,如82258(DMA控制器)、8259A(中断控制器)、8272(磁盘控制器)、82385(Cache控制器)、82062(硬盘控制器)等。
针对内存的速度瓶颈,英特尔为80386设计了高速缓存(Cache),采取预读内存的方法来缓解这个速度瓶颈。本来最初的设计,80386将内置L1 Cache,但由于工艺、成本、工期等等方面的限制,80386最后并没有内置L1 Cache,而是将专门开发的L1 Cache芯片放置在CPU之外的主板上,但从此以后,Cache就和CPU成为了如影随形的东西。另外,80386的内存管理非常先进,有页式、段式、段页式三种管理方式,可以管理巨大的内存空间,从而为应用程序提供足够的舞台。
80386SX(x32)
1989年英特尔公司又推出准32位微处理器芯片80386SX。这是Intel为了扩大市场份额而推出的一种较便宜的普及型CPU,它的内部数据总线为32位,与80386相同,外部数据总线为16位。也就是说,80386SX仍然可以使用32位、16位、8位编程,其内部处理速度与80386DX接近,也支持真正的多任务操作,而它又可以接受为80286开发的16位输入/输出接口芯片,降低整机成本。80386SX和80386DX的关系,就好像早期的8088和8086的关系,在输入输出的位长上的区别,其“S”就表示单(16位数据总线),“D”就表示双(32位数据总线)。80386SX使用的协微处理器是80387SX。
80386SL/80386DL(x32)
英特尔在1990年推出了专门用于笔记本电脑的80386SL和80386DL两种型号的386芯片。这两个类型的芯片可以说是80386DX/SX的节能型,其中,80386DL是基于80386DX内核,而80386SL是基于80386SX内核的。这两种类型的芯片,不但耗电少,而且具有电源管理功能,在CPU不工作的时候,自动切断电源供应。

2. 80386到现在的cpU增加了哪些知识点

先先说8086

在8086的EU--执行单元(Execution Unit)和BIU--总线接口单元(Bus Interface Unit)两部分中包含有一些工作寄存器,这些寄存器用来存放计算过程中的各种信息,如操作数地址、操作数及运算的中间结果等。微处理器从寄存器中存取数据比从存储器中存取数据要快的多,因此,在计算过程中,合理利用寄存器保存操作数、中间结果或其它信息,能提高程序的运行效率。根据这些寄存器所起的作用,8086寄存器组可以分为通用寄存器、专用寄存器和段寄存器三类
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
1. 通用寄存器
通用寄存器包括了8个16位的寄存器:AX、BX、CX、DX、SP、BP、DI及SI。其中AX、BX、CX、DX在一般情况下作为通用的数据寄存器,用来暂时存放计算过程中所用到的操作数、结果或其他信息。它们还可分为两个独立的8位寄存器使用,命名为AL、AH、BL、BH、CL、CH、DL和DH。这4个通用数据寄存器除通用功能外,还有如下专门用途:

AX作为累加器用,所以它是算术运算的主要寄存器。在乘除指令中指定用来存放操作数。另外,所有的I/O指令都使用AX或AL与外部设备传送信息。

BX在计算存储器地址时,可作为基址寄存器使用。

CX常用来保存计数值,如在移位指令、循环指令和串处理指令中用作隐含的计数器。
DX在作双字长运算时,可把DX和AX组合在一起存放一个双字长数,DX用来存放高16位数据。此外,对某些I/O操作,DX可用来存放I/O的端口地址。

SP、BP、SI、DI四个16位寄存器可以象数据寄存器一样在运算过程中存放操作数,但它们只能以字(16位)为单位使用。此外,它们更经常的用途是在存储器寻址时,提供偏移地址。因此,它们可称为指针或变址寄存器。

SP称为堆栈指针寄存器,用来指出栈顶的偏移地址。

BP称为基址指针寄存器,在寻址时作为基地址寄存器使用,但它必须与堆栈段寄存器SS联用来确定堆栈段中的存储单元地址。

SI为源变址寄存器,在串处理指令中,SI作为隐含的源变址寄存器与DS联用,以确定数据段中的存储单元地址,并有自动增量和自动减量的变址功能。

DI为目的变址寄存器,在串处理指令中,DI和附加段寄存器ES联用,以达到在附加段中寻址的目的,然后DI自动增量或减量。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
8086的专用寄存器包括IP、SP和FLAGS三个16位寄存器。

IP为指令指针寄存器,它用来存放将要执行的下一条指令地址的偏移量,它与段寄存器CS联合形成代码段中指令的物理地址。在计算机中,控制程序的执行流程就是通过控制IP的值来实现的。

SP为堆栈指针寄存器,它与堆栈段寄存器联用来确定堆栈段中栈顶的地址,也就是说SP用来存放栈顶的偏移地址。

FLAGS为标志寄存器,这是一个存放条件码标志、控制标志的16位寄存器。
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
8086的标志寄存器
条件码标志用来记录程序中运行结果的状态信息,它们是根据有关指令的运行结果由(CPU)自动设置的。由于这些状态信息往往作为后续条件转移指令的转移控制条件,所以称为条件码。
① 进位标志CF,记录运算时最高有效位产生的进位值。
② 符号标志SF,记录运算结果的符号。结果为负时置1,否则置0。
③ 零标志ZF,运算结果为0时ZF位置1,否则置0。
④ 溢出标志OF,在运算过程中,如操作数超出了机器可表示数的范围称为溢出。溢出时OF位置1,否则置0。
⑤ 辅助进位标志AF,记录运算时第3位(半个字节)产生的进位值。
⑥ 奇偶标志PF,用来为机器中传送信息时可能产生的代码出错情况提供检验条件。当结果操作数中1的个数为偶数时置1,否则置0。

控制标志位有3位:
① 方向标志DF,在串处理指令中控制处理信息的方向。当DF=1时,串处理从高地址向低地址方向处理。当DF=0时,串处理就从低地址向高地址方向处理。
② 陷阱标志TF,用于调试时的单步方式操作。当TF=1时,每条指令执行完后产生陷阱,由系统控制计算机;当TF=0时,CPU正常工作,不产生陷阱。
③ 中断标志IF,用于控制可屏蔽硬件中断。当IF=1时,允许8086微处理器响应中断请求,否则关闭中断。

8086提供了设置某些状态信息的指令。必要时,程序员可使用这些指令来建立状态信息。
调试程序Debug中提供了测试标志位的手段,它用符号表示某些标志位的值
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
3. 段寄存器

8086微处理器共有4个16位的段寄存器,在寻址内存单元时,用它们直接或间接地存放段地址。
代码段寄存器CS:存放当前执行的程序的段地址。
数据段寄存器DS:存放当前执行的程序所用操作数的段地址。
堆栈段寄存器SS:存放当前执行的程序所用堆栈的段地址。
附加段寄存器ES:存放当前执行程序中一个辅助数据段的段地址。

注:
执行单元(Execution Unit):负责指令的执行,实际是既有控制器的功能,也有运算器的功能。包括:ALU、标志寄存器、暂存器、寄存器组、控制单元 。EU和BIU是组成8086微处理器的两个基本功能部件,他们相互配合完成指令操作。当EU从指令队列中去走指令后,指令队列出现空字节,BIU就立即自动地从内存中取出后续的指令放入队列;当EU执行指令需要操作数时,BIU就根据EU给出的操作数有效地址,从指定的内存单元或I/O端口取出数据供EU使用;当EU运算结束后,BIU将运算结果写入指定的内存单元或I/O端口。EU和BIU这两个功能部件又是相互独立的。大多数情况下,EU的执行指令操作与BIU的取指令操作在实践上可重叠进行,既EU进行某条指令执行操作时,BIU可同时进行后继指令的取指令操作,这两个部件并行连续工作可形成指令处理流水线。这样,可减少CPU取指令的等待时间,加快了CPU的指令执行速度,也提高了系统总线的利用率。)

写这篇文章,完全是因为学习保护模式需要这些知识,读者完全可以走马观花,大致看看有什么内容,知道需要的时候来查这篇文章就可以了,完全没有必要抵抗着困意非要把这篇文章认真看完,记住里面每一个寄存器里每一位的定义,但是以后的文章如果需要,一定要记得回来查查相关的内容。

然后说一下386

80386共提供7种类型的32位寄存器,如下:

通用寄存器(EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI)
段寄存器(CS、SS、DS、ES、FS、GS)
指令指针寄存器和标志寄存器(EIP、EFLAGS)
系统表寄存器(GDTR、IDTR、LDTR、TR)
控制寄存器(CR0、CR1、CR2、CR3、CR4)
调试寄存器(DR0、DR1、DR2、DR3、DR4、DR5、DR6、DR7)
测试寄存器(TR6、TR7)
其中后三类寄存器是80386以后的CPU才有的,以前的CPU完全没有。

下图是前四类寄存器的大致示意图:

本文只对这些寄存器做一个大致的介绍,其中有些特殊且有较大意义的寄存器,会另文介绍。

一、通用寄存器

一组八个通用寄存器是对8086/80286通用寄存器的32位扩展,其用法与在8086/80286中相似,支持8位、16位、32位操作,进行32位操作是,寄存器名称前面冠以“E”。

这八个寄存器的名称如下:EAX(累加器)、EBX(基址)、ECX(计数)、EDX(数据)、ESP(栈指针)、EBP(基址指针)、ESI(源变址)、EDI(目的变址)。

ESI EDI变址寄存器
32位CPU有2个32位通用寄存器ESI和EDI。其低16位对应先前CPU中的SI和DI,对低16位数据的存取,不影响高16位的数据。

寄存器ESI、EDI、SI和DI称为变址寄存器(Index Register),它们主要用于存放存储单元在段内的偏移量,用它们可实现多种存储器操作数的寻址方式,为以不同的地址形式访问存储单元提供方便。变址寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。 它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,而且还具有特殊的功能。

SI是源变址寄存器,DI是目的变址寄存器。可以用来存放数据、地址,功能类似、用法类似、一般使用哪个都可以。

二、段寄存器

80386比8086/80286增加了两个段寄存器FS、GS。

除CS支持代码段,SS支持堆栈段外,程序员可以利用其它的所有段寄存器支持数据段。

每个段寄存器对应这一个64位高速缓存器(有些资料中说有96位,但值使用其中的64位),这在8086中是没有的(在80286中为48位),它的具体作用将另文介绍。

三、指令指针寄存器和标志寄存器

指令寄存器EIP是对8086/80286指令指针寄存器的32位扩展,它包含着待执行指令的32位偏移量,该值总是相对CS所代表的段基址而言的。

标志寄存器也是对8086/80286标志寄存器的32位扩展,其定义如下(这张图截自Intel关于IA32架构的最新文档):

其中OF、DF、IF、TF、SF、ZF、AF、PF和CF在8086中就已经存在,请参考相关资料。

IOPL(I/O Privilege Level)是从80286开始出现的,占2个bit表示I/O特权级,如果当前特权级小于或等于IOPL,则可以执行I/O操作,否则将出现一个保护性异常。IOPL只能由特权级为0的程序或任务来修改。

NT(Nested Task)也是从80286开始出现的,表示嵌套任务,用于控制中断返回指令IRET,当NT=0时,用堆栈中保存的值恢复EFLAGS、CS和EIP,从而实现返回;若NT=1,则通过任务切换实现中断返回。

下面的标志位是80386以后的CPU才有的标志。

VM(Virtual-8086 mode)表示虚拟8086模式,如果VM被置位且80386已出于保护模式下,则CPU切换到虚拟8086模式,此时,对段的任何操作又回到了实模式,如同在8086下运行一样。

RF(Resume flag)表示恢复标志(也叫重启标志),与调试寄存器一起用于断点和单步操作,当RF=1 时,下一条指令的任何调试故障将被忽略,不产生异常中断。当RF=0时,调试故障被接受,并产生异常中断。用于调试失败后,强迫程序恢复执行,在成功执行每条指令后,RF自动复位。

AC(Alignment check)表示对齐检查。这个标志是80486以后的CPU才有的。当AC=1且CR0中的AM=1时,允许存储器进行地址对齐检查,若发现地址未对齐,将产生异常中断。所谓地址对齐,是指当访问一个字(2字节长)时,其地址必须是偶数(2的倍数),当访问双字(4字节长)时,其地址必须是4的倍数。

但是只有运行在特权级3的程序才执行地址对齐检查,特权级0、1、2忽略该标志。

VIF(Virtual interrupt flag)表示虚拟中断标志。以下的三个标志是Pentium以后的CPU才有的。当VIF=1时,可以使用虚拟中断,当VIF=0时不能使用虚拟中断。该标志要和下面的VIP和CR4中的VME配合使用。

VIP(Virtual interrupt pending flag)表示虚拟中断挂起标志。当VIP=1时,VIF有效,VIP=0时VIF无效。

ID(Identification flag)表示鉴别标志。该标志用来只是Pentium CPU是否支持CPUID的指令。

实际上,如果不编写操作系统,大部分标志可能很难得用到一次,有个印象就好了,用到了再去查不迟。

四、系统表寄存器

80386 中有4个系统表寄存器,分别是全局描述符表寄存器(GDTR)、中断描述符表寄存器(IDTR)、局部描述符表寄存器(LDTR)、任务状态寄存器(TR)。系统表寄存器用于在保护方式下,管理4 个系统表,由于只能在保护方式下使用,因此又称为保护方式寄存器。有关描述附表的问题,另文介绍。

五、控制寄存器

80386的控制寄存器有4个,其中CR1保留以后使用,从Pentium开始,又增加了一个CR4,CR0的低16位包含了与80286的MSW一致的位定义,保持了和80286的兼容,同时也兼容了从80286开始的两条指令LMSW/SMSW,其基本定义如下:

CR0中各位含义如下:

PE(Protection Enable)保护模式允许,PE=0表示CPU工作在实模式,PE=1表示CPU工作在保护模式
MP(Monitor Coprocessor)监控协处理器,MP=1表示协处理器在工作,MP=0表示协处理器未工作。
EM(Emulation)协处理器仿真,当MP=0,EM=1时,表示正在使用软件仿真协处理器工作。
TS(Task Switched)任务转换,每当进行任务转换时,TS=1,任务转换完毕,TS=0。TS=1时不允许协处理器工作。
以上4个定义从80286开始,下面的2个定义从80386开始存在

ET(Extension Type)处理器扩展类型,反映了所扩展的协处理器的类型,ET=0为80287,ET=1为80387。
PG(Paging)页式管理机制使能,PG=1时页式管理机制工作,否则不工作。
从80486开始又增加了如下位定义。

NE(Numeric Error)数值异常中断控制,NE=1时,如果运行协处理器指令发生故障,则用异常中断处理,NE=0时,则用外部中断处理。
WP(Write Protect)写保护,当WP=1时,对只读页面进行写操作会产生页故障。
AM(Alignment Mask)对齐标志,AM=1时,允许对齐检查,AM=0时不允许,关于对齐,在EFLAGS的AC标志时介绍过,在80486以后的CPU中,CPU进行对齐检查需要满足三个条件,AC=1、AM=1并且当前特权级为3。
NW(Not Write-through)和CD(Cache Disable),这两个标志都是用来控制CPU内部的CACHE的,当NW=0且CD=0时,CACHE使能,其它的组合说起来比较复杂,如果有读者真的想搞清楚的话,可以参阅《Intel? 64 and IA-32 Architectures》中的“Software Developer’s Manual Volume 3A”这一册,在第10章对这两个标志的各种组合有比较详细的说明。
CR1保留未用;CR2存放引起页故障的线性地址,只有在PG=1时,CR2才有效,当页故障处理程序被激活时,压入页故障处理程序堆栈中的错误码提供页故障的状态信息。
CR3的bit12--bit31存放页目录的基地址,因为也目录总是页对齐的(一页为4K),所以页目录基地址从bit12开始就可以了。只有当CR0中的PG=1时,CR3的页目录基地址才有效。
从80486开始,在CR3的低12位定义了两个控制位,如下:

PCD(Page-level Cache Disable)页CACHE禁止,当PCD=0时,页目录表进行高速缓存,PCD=1时,不进行高速缓存;该位控制PCD引脚控制外部CACHE工作还是不工作。
PWT(Page-level Writes Transparent),CACHE的写入分为透写(Write-Through)和回写(Write-Back),80486以上的CPU内部的CACHE都是透写的,但对外部CACHE而言,允许某些页是回写的,而另一些页是透写的,当PWT=1时,外部CACHE对页目录进行透写,否则进行回写;此位驱动PWT引脚以控制外部CACHE是透写还是回写。
CR4是从Pentium CPU开始出现的。

VME(Virtual-8086 Mode Extensions)虚拟8086方式扩展,VME=1允许使用虚拟8086扩展模式,否则只能使用80386/80486的虚拟8086模式。
PVI(Protected-Mode Virtual Interrupts)保护模式虚拟中断,PVI=1时,在保护模式下支持虚拟中断标志VIF(EFLAGS中),PVI=0则不支持虚拟中断标志。
TSD(Time Stamp Disable)时间戳禁止,TSD=1时,允许在特权级为0的程序中执行RDTSC指令(读时间戳计数指令),TSD=0时,允许任何特权级执行RDTSC指令。
DE(Debugging Extensions)调试扩展,
PSE(Page Size Extensions)页大小扩展,PSE=1时,页大小可以扩展到2M或4M,PSE=0时,页大小只能是4K.
PAE(Physical Address Extension)物理地址扩展,PAE=1时,页物理地址可以扩展到36bits以上,PAE=0时只能用32bits的物理地址。
MCE(Machine-Check Enable)硬件检查使能,Pentium以后的CPU有一种硬件检测功能,MCE=1时允许使用该功能。
PGE(Page Global Enable)全局页使能,PGE=1时,允许使用全局页,PGE=0时禁止使用全局页。
PCE(Performance-Monitoring Counter Enable)性能监视计数器使能,当PCE=1时,允许在任何保护级下执行RDPMC指令,PCE=0时,只有特权级0的程序可以执行RDPMC指令。

OSFXSR(Operating System Support for FXSAVE and FXRSTOR instructions)
OSXMMEXCPT(Operating System Support for Unmasked SIMD Floating-Point Exceptions)
VMXE(VMX-Enable Bit)VMX使能位,VMXE=1时,允许VMX操作。
SMXE(SMX-Enable Bit)SMX使能位,SMXE=1时,允许SMX操作。
OSXSAVE(XSAVE and Processor Extended States-Enable Bit)

六、调试寄存器

一共有8个调试寄存器DR0--DR7,DR0-DR3可以分别设置4个断点的线性地址,DR4-DR5保留未用,DR6是断点状态寄存器,DR7是断点控制寄存器(包括断点类型、断点长度,断点开放/禁止)

七、测试寄存器

一共有8个测试寄存器TR0--TR7,TR0-TR2保留,TR3-TR5用作CACHE测试,TR6为命令测试寄存器,TR7为测试数据寄存器

3. 多线程编程的原理,请围绕汇编来说

多线程主要是在80286以及以上的处理器中的功能,最早的32位多线程是80386,看了你另外的帖子,你好象懂点汇编语言,不知道你懂不懂80386汇编,他们的指令形式差不多,区别就在于工作机制和32位.如何你想搞多线程,首先要会386下的汇编,比起8086处理器,它了许多功能,如:分页机制(虚拟存储器),多线程等..还有很多功能,至于它多线程的工作机制主要是内存查表的方法,将所有程序的地址段地址和偏移地址放入GDT表和IDT表中,再用时钟频率的中断来不断读取这张表到cs:eip寄存器中和将cs:eip内容保存如这样表,就达到了交换代码地址,当然这当中还牵涉到很徐徐多多的概念,比如各个寄存器的保存,代码段的保护,各种控制门,描述符,和cpu内的各种寄存器保存表的地址,这是整整一本书的概念,建议起看扬季文的书叫做8086汇编语言程序设计,上半本书是讲8086,是基础,下半本书是80386是386的工作机制和原理和汇编方法,我在这里就引导你一下

可以说8086和80386是有很大区别的,努力 推荐你一个群 简单bios和内核研究群,67286087

4. 现在学习Intel80386编程手册有用吗,可以如果要针对现在的酷睿2TM编程,有何文档可用来学习参考

当然有用,我最近也刚学,经常编一些小程序,我的处理器是i3,但是也是跟80386没什么大的区别。我是用vs调试器观察到的,寄存器都一样。我知道一本好书,绝对的好书,叫Intel汇编语言程序设计,你可以看看。

5. 80386的物理地址空间有多大

逻辑地址(Logical Address) 是指由程序产生的与段相关的偏移地址部分。例如,你在进行C语言指针编程中,可以读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址,不和绝对物理地址相干。只有在Intel实模式下,逻辑地址才和物理地址相等(因为实模式没有分段或分页机制,Cpu不进行自动地址转换);逻辑也就是在Intel 保护模式下程序执行代码段限长内的偏移地址(假定代码段、数据段如果完全一样)。应用程序员仅需与逻辑地址打交道,而分段和分页机制对您来说是完全透明的,仅由系统编程人员涉及。应用程序员虽然自己可以直接操作内存,那也只能在操作系统给你分配的内存段操作。

线性地址(Linear Address) 是逻辑地址到物理地址变换之间的中间层。程序代码会产生逻辑地址,或者说是段中的偏移地址,加上相应段的基地址就生成了一个线性地址。如果启用了分页机制,那么线性地址可以再经变换以产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。Intel 80386的线性地址空间容量为4G(2的32次方即32根地址总线寻址)。

物理地址(Physical Address) 是指出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。如果启用了分页机制,那么线性地址会使用页目录和页表中的项变换成物理地址。如果没有启用分页机制,那么线性地址就直接成为物理地址了。

虚拟内存(Virtual Memory) 是指计算机呈现出要比实际拥有的内存大得多的内存量。因此它允许程序员编制并运行比实际系统拥有的内存大得多的程序。这使得许多大型项目也能够在具有有限内存资源的系统上实现。一个很恰当的比喻是:你不需要很长的轨道就可以让一列火车从上海开到北京。你只需要足够长的铁轨(比如说3公里)就可以完成这个任务。采取的方法是把后面的铁轨立刻铺到火车的前面,只要你的操作足够快并能满足要求,列车就能象在一条完整的轨道上运行。这也就是虚拟内存管理需要完成的任务。在Linux 0.11内核中,给每个程序(进程)都划分了总容量为64MB的虚拟内存空间。因此程序的逻辑地址范围是0x0000000到0x4000000。

有时我们也把逻辑地址称为虚拟地址。因为与虚拟内存空间的概念类似,逻辑地址也是与实际物理内存容量无关的。
逻辑地址与物理地址的“差距”是0xC0000000,是由于虚拟地址->线性地址->物理地址映射正好差这个值。这个值是由操作系统指定的。

6. 80x86汇编和win32汇编有什么区别

现代操作系统说的x86,没有特别说明都指:“80386以上的新cpu能运行”。但一般国内入门书上说的80x86汇编语言,却是dos下8086“实模式”的编程。当然这是基础,不能说落后就不学。

80x86与win32汇编语言最终都是生成80386以上可运行的代码(废话)。不过windows编程有它特殊的地方,有它的规矩。例如callback函数,不像dos程序那样顺序执行,程序让系统来决定何时执行;又例如资源,很多时候可以利用系统或其他库提供的东西……这些由windows系统的特殊性决定。因此“win32汇编”文本的格式与入门书上的有很多不同。

汇编语言与其他高级语言一样,都要经过编译程序编译,才能生成执行代码。如果你使用的编译器不同,文本格式又有些微细差别。

7. 86c186和80386及8086是统一种汇编吗谢谢!

不是

86c186 --> 没听过
80386 --> 用的是x86 的32位汇编,支持实模式和保护模式
8086 --> 用的是x86的 16位汇编,只支持实模式

8. 80386的保护类型有哪些考试题

80386 和 保护模式
___William Liu
Intel CPU 一般可以运行在两种模式之下,即实模式和保护模式。早期的 Intel CPU ( 8086 , 8088 )只能工作在实模式之下,系统中只能运行单个任务,而且只能使用实地址模式。对于 Intel 80386 以上的芯片则还可以运行在 32 位的保护模式之下。在保护模式之下的 CPU 可以支持多任务;支持 4GB 的物理内存;支持 64TB 的虚拟内存;支持内存的页式管理和段式管理以及支持特权级。
本文档将首先介绍 Intel 80386 CPU 的几个内部寄存器,然后再由浅入深的分别介绍保护模式下的段式管理,页式管理,虚拟内存,多任务以及特权级管理等几个方面。
Intel 80386 CPU 的内部寄存器
这一部分先大致介绍一下 386 的内部寄存器,具体细节在后面的几节中再详细说明。一般来说, CPU 设计用来系统编程的系统寄存器包括如下几类:
• 标志寄存器 (EFLAGS)
• 内存管理寄存器 (GDTR , LDTR , IDTR , TR) • 控制寄存器 (CR0 , CR1 , CR2 , CR3 , CR4) • 兼容 8086 通用寄存器( EAX , EBX , ECX , EDX ) • 兼容 8086 段寄存器( CS , DS , ES , SS , FS , GS ) • 兼容 8086 数据寄存器( ESI , EDI , EIP , ESP )

9. 80386以上的32位微处理器有哪三种基本工作方式

1、实地址方式(real mode)
实地址方式的工作原理与8086基本相同,其主要区别是32位微处理器能处理32位数据。
2、保护方式(protected mode)
保护方式下,CPU可访问232字节的物理存储空间,段长为232字节,而且还可以实施保护功能
32位微处理器为了支持多任务操作系统,以4个特权级来隔离或保护各用户及操作系统。
3、虚拟8086方式(virtual 8086 mode)
在虚拟方式下,运行8086程序可以尽量利用32位微处理器的保护机构。尤其是32位微处理器允许同时执行8086的操作系统及其应用程序和32位微处理器操作系统的应用程序。

10. 在80386保护模式下如何使用div指令

除数位数, 隐含的被除数, 商, 余数, 举例

8位, AX, AL, AH, DIV BH

16位, DX-AX, AX, DX, DIV BX

32位, EDX-EAX, EAX, EDX, DIV ECX

⊙﹏⊙b汗,网络这个输入框做得实在是太烂了

热点内容
边的存储方法 发布:2025-05-16 17:33:16 浏览:925
海量服务器怎么拆 发布:2025-05-16 17:31:07 浏览:209
运行与编译的区别 发布:2025-05-16 17:25:02 浏览:823
c语言for中continue 发布:2025-05-16 17:20:14 浏览:647
ftp储存 发布:2025-05-16 17:04:08 浏览:504
家悦3010怎么看电脑配置 发布:2025-05-16 17:02:38 浏览:885
sqlin传参 发布:2025-05-16 17:02:37 浏览:889
python计算md5 发布:2025-05-16 17:02:32 浏览:427
看算法头疼 发布:2025-05-16 16:56:41 浏览:798
给定文件编译成dll文件 发布:2025-05-16 16:45:05 浏览:730