1
ブートローダーゴルフ:Brainf ***
特定のBrainfuckプログラムを実行するブートローダーを作成します。これはcode-golfであるため、バイト数が最小のプログラムが優先されます。ブートローダーであるため、プログラムのサイズはコンパイルされたコードでゼロ以外のバイトでカウントされます。 ブレインファック 30000の8ビットオーバーフローセル。ポインターがラップオーバーします。 操作に関する注意事項: 入力は、すべての印刷可能なASCII文字が正しくサポートされるように読み取る必要があります。他のキーストロークは、任意の文字を挿入するか、まったく何もしません。 ユーザー入力の読み取りは、行バッファーではなく文字バッファーでなければなりません。 ユーザー入力を読み取るには、挿入された文字をエコーする必要があります。 出力は、コードページ437または組み込みのVGAアダプターのデフォルトコードページのいずれかに従う必要があります。 ブートローダー これはx86ブートローダーです。ブートローダーは、従来の55 AAシーケンスで終了します。コードは、VirtualBox、Qemu、または他の有名なx86エミュレーターで実行する必要があります。 ディスク 実行可能Brainfuckは、ブートローダーの直後の2番目のディスクセクターにあり、通常はMBRセクションのディスクの最初のセクターに配置されます。追加のコード(510バイトを超えるコード)は、他のディスクセクターに配置できます。ストレージデバイスは、ハードドライブまたはフロッピーディスクである必要があります。 STDIO もちろん、ブートローダーはオペレーティングシステムのIO機能にアクセスできません。そのため、テキストの印刷とユーザー入力の読み取りに代わりにBIOS機能が使用されます。 テンプレート まず、Nasm(Intel構文)アセンブリで記述された簡単なテンプレートを以下に示します。 [BITS 16] [ORG 0x7c00] ; first sector: boot: ; initialize segment registers xor ax, ax mov ds, ax mov es, ax mov ss, ax ; initialize stack mov sp, 0x7bfe ; load brainfuck …