我对在 FreeDOS 上使用 C 编程感兴趣,同时在此过程中学习了一些基本的 ASM,使用 FreeDOS 是否允许我的程序访问超过标准 640K 的内存?
其次,关于 ASM,我知道在现代处理器上,由于 CPU 架构的复杂性,很难在汇编上编程,但是使用 FreeDOS 是否会限制我使用可能更简单的 16 位指令集?
我对在 FreeDOS 上使用 C 编程感兴趣,同时在此过程中学习了一些基本的 ASM,使用 FreeDOS 是否允许我的程序访问超过标准 640K 的内存?
其次,关于 ASM,我知道在现代处理器上,由于 CPU 架构的复杂性,很难在汇编上编程,但是使用 FreeDOS 是否会限制我使用可能更简单的 16 位指令集?
MS-DOS 和 FreeDOS 使用“HIMEM”区域:它们是:
可以通过这种方式归档的最大内存大小约为 800K。
使用 XMS 和 EMS,您最多可以使用 64M:
在没有任何扩展程序的情况下,程序可以在 DOS 中使用最多 640KB 的低内存。但是每个结构都将被限制为一个段的大小,即 64KB。这意味着您可以拥有 10 个大小为 64KB 的大型数组。当然,您可以在一个段中有多个数组,但它们的总大小不得超过段大小。一些编译器还自动处理跨越多个段的地址,因此您可以无缝使用大于 64KB 的对象,或者如果您使用汇编语言编写,也可以这样做
要访问更多内存,您需要像EMS或XMS这样的扩展器。但请注意,地址空间仍然是 20 位宽。扩展器只是将高内存区域映射到可寻址空间中的某些段,因此您一次只能看到一个小数据窗口
关于汇编,您可以在 16 位模式下使用 32 位寄存器。有 66h 和 67h 前缀来改变操作数的大小。然而,这并不意味着编写 16 位代码更容易。事实上,它有很多特性需要记住,比如内存寻址中的有限寄存器使用。32 位 x86 指令集具有更清晰的寻址模式以及更易于使用的平坦地址空间。