Chinaunix首页 | 论坛 | 博客
  • 博客访问: 484813
  • 博文数量: 164
  • 博客积分: 4024
  • 博客等级: 上校
  • 技术积分: 1580
  • 用 户 组: 普通用户
  • 注册时间: 2009-10-10 16:27
文章分类

全部博文(164)

文章存档

2011年(1)

2010年(108)

2009年(55)

我的朋友

分类:

2010-06-30 09:25:23

早期的CPU无所谓内存管理模式,程序指定绝对的内存地址,处理器到这个地址抓指令参数。现在CPU都不这样了(当然,CPU工作在实模式下,仍然是这样)。这样对内存没有任何处理,既不利于对CPU之上操作系统对程序的控制,同时,也不利于程序的编程和移植。所以IA-32 CPU增加了内存管理模块,即:MMU(memory management unit)。同时,定义了三种内存管理模型:

    * 扁平模型(flat memory model)
    * 分段模型(segment memory model)
    * 实地址模型(real-address memory model)

随着保护模式和MMU的加入,CPU越趋完善。第一种实地址模式模型(real-address mode model)所操作的都是实际的物理地址,不利于对内存的特定代码的保护,例如操作系统。于是Intel结合MMU推出了后两种模式模型。后两种模型下, 段仍旧是“完整地址的一部分”,但是他们不是一个完整地址的某几位了,而是一个整数而已,这个整数和完整的偏移地址结合在一起,会被CPU的MMU翻译成绝对的物理地址。这是段的第二个意义。他们统称内存段或者地址段,因为与地址相关。暂时不理解没有关系。总之,对内存段有个概念。

在MASM汇编语言里面,段被称为程序逻辑段,此为段的第三个意义。比如程序分为三个段:数据段,代码段,stack段。他们不一定对应于具体的一个地址段。根据你代码工作在的处理器模式和内存模型而有所不同。需要指出的是MASM定义的内存模型不等同于如上所述的CPU的内存模型。他们基于CPU的内存模型,但是比之更具体,比如MASM有7种内存模型:

windows98和NT一样,如果程序是对“ISA+操作系统”编程或者说运行在这些操作系统之下。都要指定内存模式为flat。

内存模式

模    式

内 存 使 用 方 式

tiny

small

medium

compact

large

huge

flat

用来建立 .com文件,所有的代码、数据和堆栈都在同一个64 KB段内

建立代码和数据分别用一个64 KB段的 .exe文件

代码段可以有多个64 KB段,数据段只有一个64 KB段

代码段只有一个64 KB段,数据段可以有多个64 KB段

代码段和数据段都可以有多个64 KB段

同large,并且数据段中的一个数组也可以超过64 KB

Win32程序使用的模式,代码和数据段使用同一个4 GB段

 

平面内存模式 (flat memory model)
  是一种组织 内存 寻址空间 的方式。在这种模式下,一个电脑的应用程序最多使用两个 内存段,一个是给程序使用,另外一个是资料。此外,同样的段也可以用量同时给程序或是资料使用,但这是不必要的,因为只有对于 我更改程序 的程序才有用处,但这种 程序设计风格 现今被视为一种很不好的方法。
  平面内存模型的优点
  应用程序在存取他们的资料时候不需要切换不同的段。然而,在 16 位元的 Intel 8086 和 80286 中,这种方式是不可行的,因为应用程序无法存取超过 64 KB 的资料。在 32 位元的芯,应用程序可以存取最大到 4 GB 的资料。但这也变成现在大的数据库以及像是影编辑应用程序的问题。

阅读(5041) | 评论(0) | 转发(0) |
0

上一篇:NASM手册

下一篇:反汇编代码格式

给主人留下些什么吧!~~