win32学习心得基础篇-----第一章 背景知识

      这个背景知识没啥看的,主要做一下了解,我做一下记录

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

每个进程都有自己的4G地址空间,从 0x00000000-0xFFFFFFFF 。通过每个进程自己的一套页目录和页表来实现。由于每个进程有自己的页目录和页表,所以每个进程的地址空间映射的物理内存是不一样的。两个进程的同一个虚拟地址处(如果都有物理内存映射)的值一般是不同的,因为他们往往对应不同的物理页。
在windows下4G地址空间中低2G,0x00000000-0x7FFFFFFF 是用户地址空间,4G地址空间中高2G,
0x80000000-0xFFFFFFFF 是系统地址空间。访问系统地址空间需要程序有ring0的权限。而Linux对4G空间的划分不同与windows。linux将最高的1G 字节(从虚拟地址0xC0000000 到0xFFFFFFFF),供内核使用,称为“内核空间”。而将较低的3G 字节(从虚拟地址0x00000000 到0xBFFFFFFF),供各个进程使用,称为“用户空间”


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操作的保护。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值