masm 的 .flat 和 保护模式模式下的两个内存模式不解

spinachrag 2009-05-25 08:16:11
intel说保护模式下有flat 和 segment 两个内存模式
masm 只有一个.flat
这是说windows 不用 segment 模式吗

初学汇编, 很菜, 不好意思
...全文
240 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqq123 2009-05-29
  • 打赏
  • 举报
回复
>intel说保护模式下有flat 和 segment 两个内存模式
>masm 只有一个.flat
>这是说windows 不用 segment 模式吗
对windows不用segment模式。而且现代绝大部分操作系统都不使用segment模式(包括Linux)。

BTW:如果内研究windows内核,会发现segment的概念它只是段地址区域(相当于Linux的mm_area),可以是代码段,数据段,heap, stack等等,但是和Intel的segment没有一点关系。

Tippisum 2009-05-28
  • 打赏
  • 举报
回复
flat是一种特殊的段设置方式:cs,ds,es,ss均默认设置为基址0,限长4GB(即完全重叠)
fs和gs默认不使用(可以用assume fs:nothing,gs:nothing)开启
不同的任务之间通过设置CR3寄存器指定不同的页映射,从而将其地址空间映射到物理内存的不同位置。
这样做的好处是使每一个程序都能够拥有独立的4GB地址空间,为程序员的开发提供方便。但同时也使得保护模式下的段保护机制几乎发挥不了什么作用。而且每一次任务切换都会刷新TLB,引发时间上的浪费。
driverstudent 2009-05-28
  • 打赏
  • 举报
回复

好东西
cnzdgs 2009-05-25
  • 打赏
  • 举报
回复
Windows应用程序中用“区”的概念,有代码区、静态区、栈区等,与段类似,程序在link的时候指定主线程栈的大小。
spinachrag 2009-05-25
  • 打赏
  • 举报
回复
谢谢楼上, 不过加问一下
这样设计不是存在栈过大冲毁其他段的危险吗, 为什么不用非重叠的段保护起来呢
cnzdgs 2009-05-25
  • 打赏
  • 举报
回复
保护模式中的段是有操作系统内核管理的,应用程序只能使用操作系统定义好的段,在Windows系统中,cs、ds、es、ss都是完全重叠的,MASM为此设计了.flat模式。如果自己写保护模式下的操作系统,就要用分段模式了。
spinachrag 2009-05-25
  • 打赏
  • 举报
回复
intel 说 segment mode 和 flat mode:

都用段描述表, 选择子等等, 都有32位偏移
区别是 flat mode 所有段都从0开始, limit 都是4G, 所有的段都overlapping, 不同段只是权限不一样
segment mode 则各段不同

windows 不用segment mode 吗?
BAYNPU 2009-05-25
  • 打赏
  • 举报
回复
32位WINDOWS程序只能采用平展模式(Flat),16位DOS只能采用segment.
大熊猫侯佩 2009-05-25
  • 打赏
  • 举报
回复
flat是平坦内存模式。
windows也用段模式,但是和实模式下的段模式是有区别的。
建议看一下Real mode 和 PM之间的区别。

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧