这个背景知识没啥看的,主要做一下了解,我做一下记录
1.win32的软硬平台和windows的一些历史.
1978年六月份,intel出了第一个16位8086处理器。
1985年,推出32位的80386的处理器。
windows从dos时代,进入windows时代,
wintel联盟是指微软和intel的联合,软硬结合,成了武林霸主。
武林霸主的位置不是那么好的,wintel联盟帝国开始没落。
2.为啥还要学习win32编程?
1.windows还占有一定的地位,有一定的粉丝和人群还在用,毕竟微软这方面做得很好,界面很友好,系统还在 更新。
2.windows有庞大的软件库,和庞大的程序猿
3.为了更好的了解计算机的原理,以及系统开发。
3.windows的特色优点
1.图形界面(GUI)
2.一致的用户界面
3.多任务性,多个任务可以同时运行
4.大量的函数调用
5.和设备的无关性
6.内存的管理,每个程序都有4g地址空间(为什么呢?百度一下吧)
4.8086的工作模式
80386的工作模式有三种
实模式
保护模式
虚拟86模式
实模式
80386平台下,实模式相当于一个快速的8086处理器工作,
在实模式下80386的32位地址只使用低20位,不能对被内存进行分页管理,所以指令的地址都是物理地址,
实模式下所有的段都可以读、写、执行。
实模式下不支持优先级,所有指令工作在ring0,特权优先下。(rong0百度百科)
实模式不支持硬件任务切换
实模式的中断方式和8086一样
Dos操作系统就运行在实模式下
保护模式
80386的32根地址总线,提供了4G(2^32)的物理内存空间,和8086的1M空间相差很大。
为了运行更多的大程序和任务,引入了虚拟内存这个技术。
保护模式下,依靠硬件一条指令就可以实现任务的切换。实模式切换保护模式修改CR寄存器的pe位
windows操作系统运行在保护模式下
虚拟86模式
虚拟86模式,是为了在保护模式运行8086的程序而设计的,为了兼容dos程序
5.Windows的内存管理
1.Win32汇编中每一个程序都可以使用4G的内存么?
80386的所有寄存器都是32位的,2^32相当于4g
2.Win32汇编代码中为什么看不到CS,DS,ES和SS等段寄存器呢?
80386的所有寄存器都是32位的,2^32相当于4g,所以用任何一个通用寄存器,来间接寻址,不必分段就可以访问
段寄存器指的是cs,ds,ss,es,fs,gs这些。在win32保护模式下,他们指向各自的描述符。那些描述符,都指向同一个段起始地址(fs除外)。所以win32编程,不需要制定cs,ds,ss等等,因为他们都是一样的。可以认为ds=es=ss=...这就是flat的含义。在编程者看来,各个段都是平坦的,一样的,没有区别。
并不是在win32汇编源代码用不到段寄存器,而是用户不用关心这些段寄存器
3.DOS下的著名的“640KB限制”是什么?
00000h-A0000h =640kb(A0000h=655360/1024=640)
6.80386的内存分页机制
1.在保护模式下,段选择器+偏移地址被称作线形地址,那么线形地址就是物理地址么?
分页机制由寄存器由CR0寄存器的第31位决定
当禁止分页机制,线性地址就是物理地址
启动分页机制,就是线性地址
2.虚拟内存的实现。
3.Windows操作系统为用户程序的代码段,数据段和堆栈段都已经设置好了正确的描述符,用户因此不必关心段寄存器。
7.Windows的特权保护
1.80386的异常和中断处理。
为什么在win32编程中没有int指令?其实调用API就是中断处理了。
2.80386的保护机制
A.段的类型检查。可读可写可执行方面
B.页的类型检查。可读可写方面
C.访问数据时的级别检查。访问优先级
D.控制转移的检查。优先级问题
E.指令集的检查。特权指令和敏感指令
F.I/O操作的保护。