我正在用汇编语言编写这个文件,它读取一个 64,000 字节长的文件。我不想将它存储在 RAM 中,所以我需要让它读取一个字节,操作数据,然后将下一个字节存储在同一地址。
有任何想法吗?
我在 Windows XP 硬件上的 MS-DOS 启动盘上运行(我不知道规格),当我在存储 64,000 的地方运行它时,我收到一个 EMM 错误,告诉我需要重新启动。
您可以使用DOS int 21h 函数 48h 来分配64000 字节的内存。它以 16 字节的倍数分配内存,因此您将 64000/16=4000 传递给BX
.
从该函数返回时将包含已分配块的段,您必须在访问该块之前AX
将其加载到段寄存器(DS
、或)ES
中。如果将其加载到除 之外的段寄存器中,则需要在访问块的指令前加上段覆盖前缀,如下所示:FS
GS
DS
mov [es:0], al
-- 存储AL
到块的第一个字节(块的段在 中ES
)。
使用完分配的内存后,您可以使用函数 49h释放它。