このファイルをアセンブリ言語で書いていますが、64,000 バイトの長さのファイルを読み取ります。RAMに保存したくないので、1バイトを読み取り、データを操作してから、次のバイトを同じアドレスに保存するようにする必要があります。
何か案は?
Windows XP ハードウェアで MS-DOS ブート ディスクを実行しています (仕様はわかりません)。
DOS int 21h function 48h を使用して、 64000 バイトのメモリを割り当てることができます。メモリは 16 バイトの倍数で割り当てられるため、 で 64000/16=4000 を渡しますBX
。
その関数から戻ると、割り当てられたブロックのセグメントが含まれます。これは、そのブロックにアクセスする前にAX
、セグメント レジスタ ( DS
、ES
、FS
または) にロードする必要があります。GS
以外のセグメント レジスタにロードする場合はDS
、次のように、ブロックにアクセスする命令の前にセグメント オーバーライド プレフィックスを付ける必要があります。
mov [es:0], al
-- ブロックの最初のバイトに格納AL
されます (ブロックのセグメントは にありますES
)。
割り当てられたメモリを使い終わったら、関数 49hを使用してメモリを解放します。