タグ付けされた質問 「x86-family」

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 …

4
マシンコードで印刷可能な表示ASCII文字のみを使用して、x86 / x86-64で異なる分岐を行います。
タスクは簡単です:マシンコードで印刷可能な可視ASCII文字0x21 ... 0x7e(スペースとdelは使用できません)のみを使用して、x86(32ビット)とx86-64(64ビット)で異なる分岐を行うプログラムを記述します。 条件付きアセンブリは許可されていません。 API呼び出しの使用は許可されていません。 カーネルモード(リング0)コードの使用は許可されていません。 LinuxのIA-32とx86-64の両方、または他の保護モードOSで例外を発生させずにコードを実行する必要があります。 機能はコマンドラインパラメータに依存してはいけません。 すべての命令は、0x21 ... 0x7e(10進数で33 ... 126)の範囲のASCII文字のみを使用してマシンコードでエンコードする必要があります。例えば 自己修正コードを使用しない限りcpuid、制限外です(0f a2)。 同じバイナリコードをx86とx86-64で実行する必要がありますが、ファイルヘッダー(ELF / ELF64 / etc。)が異なる場合があるため、再度アセンブルしてリンクする必要があります。ただし、バイナリコードは変更しないでください。 ソリューションはi386 ... Core i7の間のすべてのプロセッサで動作するはずですが、より限定的なソリューションにも興味があります。 コードは32ビットx86で分岐する必要がありますが、x86-64で分岐することはできませんが、条件付きジャンプの使用は必須ではありません(間接ジャンプまたは呼び出しも受け入れられます)。分岐ターゲットアドレスは、コード用のスペース、つまりショートジャンプ(jmp rel8)が収まる少なくとも2バイトのスペースがあるようにする必要があります。 勝利の答えは、マシンコードの中で最も少ないバイトを使用するものです。ファイルヘッダーのバイト(ELF / ELF64など)はカウントされず、分岐後のコードのバイト(テスト目的など)もカウントされません。 回答をASCII、16進バイト、コメントコードとして提示してください。 私のソリューション、39バイト: ASCII: fhotfhatfhitfhutfhotfhatfhitfhut_H3<$t! 16進数:66 68 6F 74 66 68 61 74 66 68 69 74 66 68 75 74 66 …

13
フィボナッチ製品
正のフィボナッチ数の一意の合計として、0より大きい数を分解できます。この質問では、可能な最大の正のフィボナッチ数を繰り返し減算することでこれを行います。例えば: 1 = 1 2 = 2 3 = 3 4 = 3 + 1 12 = 8 + 3 + 1 13 = 13 100 = 89 + 8 + 3 ここで、フィボナッチ積を上記と同じリストと呼びますが、加算は乗算に置き換えられます。たとえば、f(100) = 89 * 8 * 3 = 2136。 正の整数nを指定して、その数のフィボナッチ積を返すプログラムまたは関数を作成します。 テストケース: 1: 1 2: 2 3: 3 4: …
13 code-golf  math  sequence  fibonacci  code-golf  word  code-golf  cipher  code-golf  string  math  subsequence  code-golf  regular-expression  code-golf  brainfuck  assembly  machine-code  x86-family  code-golf  math  factorial  code-golf  math  geometry  code-golf  math  arithmetic  array-manipulation  math  number  optimization  stack  metagolf  code-golf  tips  assembly  code-golf  tips  lisp  code-golf  number-theory  path-finding  code-golf  number  sequence  generation  code-golf  math  geometry  code-golf  grid  permutations  code-golf  code-golf  graphical-output  geometry  fractal  knot-theory  code-golf  math  arithmetic  code-golf  interpreter  balanced-string  stack  brain-flak  code-golf  math  set-theory  code-golf  math  array-manipulation  code-golf  code-golf  string  natural-language  code-golf  code-golf  math  linear-algebra  matrix  code-golf  string  encode 

2
32バイト以下のx86マシンコードで最もビジーなビーバーを構築する
あなたの仕事は、最大32バイトのコードを使用し、ゼロ化されたレジスターから始めて、可能な限り多くの命令を実行して停止するx86マシン言語(任意のバージョン)でプログラムを書くことです。 x86マシンで使用可能な形式である限り、ランダムアクセスメモリについては何でも想定できます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.