●大量的函数调用Win32支持上千种函数的调用,几乎涉及所有的方面,程序员可 以把更多的时间放在程序的逻辑结构和用户界面上 和设备的无关性win32程序并不直接访问屏幕、打印机和键盘等硬件设备, Windows虚拟了所有的硬件。只要有硬件的设备驱动程序,这个硬件就可以使用,应用程序 并不需要关心硬件的具体型号。与DOS编程中需要针对不同的显示卡和打印机等编写很多 的驱动程序来比,这个特性对程序员的帮助是巨大的 ●内存管理由于内存分页和虚拟内存的使用,每个程序都可以使用4GB的地址空 间,DOS编程时必须考虑的640KB内存问题已经成为历史。 1.3必须了解的东西 1.3.180x86处理器的工作模式 80386处理器有3种工作模式:实模式、保护模式和虚拟86模式。实模式和虚拟86模 式是为了和8086处理器兼容而设置的。在实模式下,80386处理器就相当于一个快速的8086 处理器。保护模式是80386处理器的主要工作模式。在此方式下,80386可以寻址4GB的地 址空间,同时,保护模式提供了80386先进的多任务、内存分页管理和优先级保护等机制。 为了在保护模式下继续提供和8086处理器的兼容,80386又设计了一种虚拟86模式,以便 可以在保护模式的多任务条件下,有的任务运行32位程序,有的任务运行MS-DOS程序 在虚拟86模式下,同样支持任务切换、内存分页管理和优先级,但内存的寻址方式和8086 相同,也是可以寻址lMB的空间 由此可见,80386处理器的3种工作模式各有特点且相互联系。实模式是80386处理器 工作的基础,这时80386当做一个快速的8086处理器工作。在实模式下可以通过指令切换到 保护模式,也可以从保护模式退回到实模式。虚拟86模式则以保护模式为基础,在保护模式 和虚拟86模式之间可以互相切换,但不能从实模式直接进入虚拟86模式或从虚拟86模式直 接退到实模式 实模式 80386处理器被复位或加电的时候以实模式启动。这时候处理器中的各寄存器以实模式 的初始化值工作。80386处理器在实模式下的存储器寻址方式和8086是一样的,由段寄存器 的内容乘以16当做基地址,加上段内的偏移地址形成最终的物理地址,这时候它的32位地 址线只使用了低20位。在实模式下,80386处理器不能对内存进行分页管理,所以指令寻址 的地址就是内存中实际的物理地址。在实模式下,所有的段都是可以读、写和执行的。 实模式下80386不支持优先级,所有的指令相当于工作在特权级(优先级0),所以它可 以执行所有特权指令,包括读写控制寄存器CR0等。实际上,80386就是通过在实模式下初 始化控制寄存器,GDTR,LDTR,IDIR与TR等管理寄存器以及页表,然后再通过加载CRO 使其中的保护模式使能位置位而进入保护模式的。实模式下不支持硬件上的多任务切换 实模式下的中断处理方式和8086处理器相同,也用中断向量表来定位中断服务程序地 址。中断向量表的结构也和8086处理器一样,每4个字节组成一个中断向量,其中包括两个 字节的段地址和两个字节的偏移地址
● 大量的函数调用 Win32 支持上千种函数的调用,几乎涉及所有的方面,程序员可 以把更多的时间放在程序的逻辑结构和用户界面上。 ● 和设备的无关性� Win32 程序并不直接访问屏幕、打印机和键盘等硬件设备, Windows 虚拟了所有的硬件。只要有硬件的设备驱动程序,这个硬件就可以使用,应用程序 并不需要关心硬件的具体型号。与 DOS 编程中需要针对不同的显示卡和打印机等编写很多 的驱动程序来比,这个特性对程序员的帮助是巨大的。 ● 内存管理 由于内存分页和虚拟内存的使用,每个程序都可以使用 4 GB 的地址空 间,DOS 编程时必须考虑的 640 KB 内存问题已经成为历史。 1.3 必须了解的东西 1.3.1 80x86 处理器的工作模式 80386 处理器有 3 种工作模式:实模式、保护模式和虚拟 86 模式。实模式和虚拟 86 模 式是为了和 8086 处理器兼容而设置的。在实模式下,80386 处理器就相当于一个快速的 8086 处理器。保护模式是 80386 处理器的主要工作模式。在此方式下,80386 可以寻址 4 GB 的地 址空间,同时,保护模式提供了 80386 先进的多任务、内存分页管理和优先级保护等机制。 为了在保护模式下继续提供和 8086 处理器的兼容,80386 又设计了一种虚拟 86 模式,以便 可以在保护模式的多任务条件下,有的任务运行 32 位程序,有的任务运行 MS-DOS 程序。 在虚拟 86 模式下,同样支持任务切换、内存分页管理和优先级,但内存的寻址方式和 8086 相同,也是可以寻址 1 MB 的空间。 由此可见,80386 处理器的 3 种工作模式各有特点且相互联系。实模式是 80386 处理器 工作的基础,这时 80386 当做一个快速的 8086 处理器工作。在实模式下可以通过指令切换到 保护模式,也可以从保护模式退回到实模式。虚拟 86 模式则以保护模式为基础,在保护模式 和虚拟 86 模式之间可以互相切换,但不能从实模式直接进入虚拟 86 模式或从虚拟 86 模式直 接退到实模式。 1. 实模式 80386 处理器被复位或加电的时候以实模式启动。这时候处理器中的各寄存器以实模式 的初始化值工作。80386 处理器在实模式下的存储器寻址方式和 8086 是一样的,由段寄存器 的内容乘以 16 当做基地址,加上段内的偏移地址形成最终的物理地址,这时候它的 32 位地 址线只使用了低 20 位。在实模式下,80386 处理器不能对内存进行分页管理,所以指令寻址 的地址就是内存中实际的物理地址。在实模式下,所有的段都是可以读、写和执行的。 实模式下 80386 不支持优先级,所有的指令相当于工作在特权级(优先级 0),所以它可 以执行所有特权指令,包括读写控制寄存器 CR0 等。实际上,80386 就是通过在实模式下初 始化控制寄存器,GDTR,LDTR,IDTR 与 TR 等管理寄存器以及页表,然后再通过加载 CR0 使其中的保护模式使能位置位而进入保护模式的。实模式下不支持硬件上的多任务切换。 实模式下的中断处理方式和 8086 处理器相同,也用中断向量表来定位中断服务程序地 址。中断向量表的结构也和 8086 处理器一样,每 4 个字节组成一个中断向量,其中包括两个 字节的段地址和两个字节的偏移地址
从编程的角度看,除了可以访问80386新增的一些寄存器外,实模式的80386处理器和 8086有什么进步呢?其实最大的好处是可以使用80386的32位寄存器,用32位的寄存器进 行编程可以使计算程序更加简捷,加快了执行速度。比如在8086时代用16位寄存器来完成 32位的乘法和除法时,要进行的步骤实在是太多了,于是考试时出这一类的题目就成了老师 们的最爱,所以那时候当学生做梦都想着让寄存器的位数快快长,现在梦想终于成真了,用 32位寄存器一条指令就可以完成(问题是老师们也发现了这个投机取巧的办法,为了达到让 学生们基础扎实的目的,也把题目换成了64位的乘法和除法,所以现在晚上做的梦换成了寄 存器忽然长到了64位);其次,80386中增加的两个辅助段寄存器FS和GS在实模式下也可 以使用,这样,同时可以访问的段达到了6个而不必考虑重新装入的问题:最后,很多80386 的新增指令也使一些原来不很方便的操作得以简化,如80386中可以使用下述指令进行数组 访问: mov Cx,.[eax+ebx*2+数组基地址] 这相当于把数组中下标为eax和ebx的项目放入cx中;cbx*2中的2可以是1,2,4 或8,这样就可以支持8位到64位的数组。而在8086处理器中,实现相同的功能要进行 次乘法和两次加法。另外, pushad和 popad指令可以一次把所有8个通用寄存器的值压入或 从堆栈中弹出,比起用下面的指令分别将8个寄存器入栈要快了很多 push b op ebx 当然,使用了这些新指令的程序是无法拿回到8086处理器上去执行的,因为这些指令的 编码在8086处理器上是未定义的。 2.保护模式 当80386工作在保护模式下的时候,它的所有功能都是可用的。这时80386所有的32 根地址线都可供寻址,物理寻址空间高达4GB。在保护模式下,支持内存分页机制,提供了 对虚拟内存的良好支持。虽然与8086可寻址的1MB物理地址空间相比,80386可寻址的物 理地址空间可谓很大,但实际的微机系统不可能安装如此大的物理内存。所以,为了运行大 型程序和真正实现多任务,虚拟内存是一种必需的技术。 保护模式下80386支持多任务,可以依靠硬件仅在一条指令中实现任务切换。任务环境 的保护工作是由处理器自动完成的。在保护模式下,80386处理器还支持优先级机制,不同 的程序可以运行在不同的优先级上。优先级一共分0~34个级别,操作系统运行在最高的优 先级0上,应用程序则运行在比较低的级别上;配合良好的检查机制后,既可以在任务间实 现数据的安全共享也可以很好地隔离各个任务。从实模式切换到保护模式是通过修改控制寄 存器CR0的控制位PE(位0)来实现的。在这之前还需要建立保护模式必需的一些数据表, 如全局描述符表GDT和中断描述符表IDT等 DOS操作系统运行于实模式下,而 Windows操作系统运行于保护模式下
从编程的角度看,除了可以访问 80386 新增的一些寄存器外,实模式的 80386 处理器和 8086 有什么进步呢?其实最大的好处是可以使用 80386 的 32 位寄存器,用 32 位的寄存器进 行编程可以使计算程序更加简捷,加快了执行速度。比如在 8086 时代用 16 位寄存器来完成 32 位的乘法和除法时,要进行的步骤实在是太多了,于是考试时出这一类的题目就成了老师 们的最爱,所以那时候当学生做梦都想着让寄存器的位数快快长,现在梦想终于成真了,用 32 位寄存器一条指令就可以完成(问题是老师们也发现了这个投机取巧的办法,为了达到让 学生们基础扎实的目的,也把题目换成了 64 位的乘法和除法,所以现在晚上做的梦换成了寄 存器忽然长到了 64 位);其次,80386 中增加的两个辅助段寄存器 FS 和 GS 在实模式下也可 以使用,这样,同时可以访问的段达到了 6 个而不必考虑重新装入的问题;最后,很多 80386 的新增指令也使一些原来不很方便的操作得以简化,如 80386 中可以使用下述指令进行数组 访问: mov cx,[eax + ebx * 2 + 数组基地址] 这相当于把数组中下标为 eax 和 ebx 的项目放入 cx 中;ebx * 2 中的 2 可以是 1,2,4 或 8,这样就可以支持 8 位到 64 位的数组。而在 8086 处理器中,实现相同的功能要进行一 次乘法和两次加法。另外,pushad 和 popad 指令可以一次把所有 8 个通用寄存器的值压入或 从堆栈中弹出,比起用下面的指令分别将 8 个寄存器入栈要快了很多: push eax push ebx ... pop ebx pop eax 当然,使用了这些新指令的程序是无法拿回到 8086 处理器上去执行的,因为这些指令的 编码在 8086 处理器上是未定义的。 2. 保护模式 当 80386 工作在保护模式下的时候,它的所有功能都是可用的。这时 80386 所有的 32 根地址线都可供寻址,物理寻址空间高达 4 GB。在保护模式下,支持内存分页机制,提供了 对虚拟内存的良好支持。虽然与 8086 可寻址的 1 MB 物理地址空间相比,80386 可寻址的物 理地址空间可谓很大,但实际的微机系统不可能安装如此大的物理内存。所以,为了运行大 型程序和真正实现多任务,虚拟内存是一种必需的技术。 保护模式下 80386 支持多任务,可以依靠硬件仅在一条指令中实现任务切换。任务环境 的保护工作是由处理器自动完成的。在保护模式下,80386 处理器还支持优先级机制,不同 的程序可以运行在不同的优先级上。优先级一共分 0~3 4 个级别,操作系统运行在最高的优 先级 0 上,应用程序则运行在比较低的级别上;配合良好的检查机制后,既可以在任务间实 现数据的安全共享也可以很好地隔离各个任务。从实模式切换到保护模式是通过修改控制寄 存器 CR0 的控制位 PE(位 0)来实现的。在这之前还需要建立保护模式必需的一些数据表, 如全局描述符表 GDT 和中断描述符表 IDT 等。 DOS 操作系统运行于实模式下,而 Windows 操作系统运行于保护模式下