WIN32汇编的一些基础知识

  • x86的工作模式
    •  实模式
      • 只使用到了32根地址线中的20根
      • 寻址方式:段寄存器*16+offset
      • 不分页
      • 所有的段可读,写,执行
      • 不分优先级
      • 中断是通过中断向量表定位中断服务程序的地址
      • 两个辅助段寄存器FS,GS
    • 保护模式
      • 使用了全部的32位地址线
      • 支持分页
      • 任务之间可以切换(任务的环境保护有处理器自动执行)
      • 分优先级(0-34)
      • 保护模式与实模式之间可以切换
    • 虚拟86模式:为了能在保护模式下执行8086的程序而提出的
  • windows的内存管理
    • DOS内存的安排:程序只能寻址1M。而且1M中有很多是系统程序,真正能让用户使用的不到640K
    • 80386内存寻址
      • 段描述符:因为80386的寄存器都是32bit的,所以完全可以用一个寄存器寻址4G的空间,不再需要段寄存器的帮助就能定位。但是在保护模式下,程序的段是有保护属性的,所以就用段寄存器来实现这个功能
      • 段描述符表:GDTR(48bit)指向GDT,里面包含操作系统的代码段,数据段,堆栈段以及个任务的LDT段的描述符。LDTR (16bit)指向LDT,里面包含每个任务自己的数据段,代码段,堆栈段的描述符以及一些门描述符。
      • 16bit段寄存器:高13bit表示offset,0/1位表示程序当前优先级,2位表示描述符位置

图1.3 保护模式下GDTR,LDTR,全局描述符表,局部描述符表和选择器的关系
    • 内存分页:分页的引入是为了解决内存分配的问题,让线形地址可以不连续的映射到物理地址。
      • CR3寄存器里是当前页目录地址
      • 页表规定的不仅是地址映射关系,同时还规定页的访问属性
      • 页的大小为4K
    • WINDOWS内存安排:在硬盘上建立物理内存的2倍左右大小为交换文件
    • WIN32汇编的内存寻址:如果以上说的这些纷繁复杂的过程要程序员自己去完成,那这个世界上估计就没有程序员了。所以WINDOWS为我们安排好了一切,用户程序在建立的时候,代码段,数据段,堆栈段,全部都预定义好了段描述符。

1.6  Windows的内存安排

  • WINDOWS的特权与保护
    • 中断和异常
      • 中断向量表(IDT):门:中断是一个由低权程序调用高权程序的过程,如果低权程序能调用高权程序的任意一个地方,那么优先级就没有意义了,所以WINDOWS引入了门的概念,低权程序进入高权程序必须经过门重定向,门指向某优先级高的程序的入口点。
      • IDT:不仅像8086一样包含了处理程序入口地址,还有门的种类
        • IDT的长度与在内存中的地址可编程
        • IDTR(48bit):指向IDT地址的寄存器。高32:地址,低16:长度
    • 保护机制
      • 页表:默认页表将代码段的属性设为不可写,数据段也只有变量部分可写
      • 任何端口(如串口)不允许直接操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值