具体来说,这个问题是关于实模式下的平面和分段模型。我正在阅读一本关于汇编的书,其中提到在 DOS 上,COM 文件使用平面内存模型,而 EXE 文件使用分段内存模型。但是我不明白是什么告诉 DOS 使用哪种内存模型。我问这个问题是因为我正在阅读有关引导加载程序的信息。
最佳答案
COM 文件使用“平面内存模型”,因为当程序加载时,段寄存器全部由 DOS 设置为指向同一段,并且按照惯例,所有代码和指针都相对于段寄存器。
另一方面,EXE 文件格式允许以不同的偏移量加载段。 DOS 不会将段寄存器设置为默认值;这取决于代码本身。 16 位 EXE 代码要复杂得多,因为该代码必须管理段寄存器。
现在很多EXE代码或多或少又忽略了段寄存器;不需要将 32 位或 64 位寄存器添加到段寄存器来生成可用地址。
关于operating-system - 什么决定了内存模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9778425/