タグ付けされた質問 「assembly」

この課題はアセンブリ言語に関連しています。回答が特定の言語である必要がある課題は、一般的に推奨されていません。

5
8ビット仮想マシン
バックグラウンド 私は古い8ビット6502チップが好きです。6502マシンコードでPPCGの問題を解決するのは楽しいことです。しかし、単純であるべきいくつかのこと(データの読み取りやstdoutへの出力など)は、マシンコードで行うのは不必要に面倒です。だから、私の頭の中には大まかなアイデアがあります。6502に触発された独自の8ビット仮想マシンを発明します。何かを実装し始めて、VMの設計が最小限に抑えられている場合、これ自体が素晴らしい挑戦であるかもしれないことに気付きました:) 仕事 次の仕様に準拠する8ビット仮想マシンを実装します。これはcode-golfであるため、バイト数が最も少ない実装が優先されます。 入力 実装には、次の入力が必要です。 単一の符号なしバイトpc、これは初期プログラムカウンター(VMが実行を開始するメモリ内のアドレス、0ベース) 256エントリの最大長を持つバイトのリスト。これは仮想マシンのRAM(初期コンテンツを含む) この入力は、適切な形式で入力できます。 出力 VMが終了した後のRAMの最終的な内容であるバイトのリスト(以下を参照)。最終的に終了することにつながる入力のみを取得すると仮定できます。賢明な形式はすべて許可されます。 仮想CPU 仮想CPUには 8ビットプログラムカウンター、 呼ばれる8ビットアキュムレータレジスタAと という8ビットのインデックスレジスタX。 3つのステータスフラグがあります。 Z -何らかの操作の結果、ゼロフラグが設定された 0 N -負のフラグは、何らかの操作の結果が負の数になった後に設定されます(結果のビット7が設定されます) C -キャリーフラグは、結果の「欠落」ビットの加算とシフトによって設定されます スタート時には、フラグが全てクリアされ、プログラムカウンタは、与えられた値との内容に設定されているAとX不定です。 8ビット値は、 符号なしの範囲の整数[0..255] 範囲の符号付き整数、2の補数[-128..127] コンテキストに応じて。操作がオーバーフローまたはアンダーフローすると、値は折り返されます(また、追加の場合、キャリーフラグが影響を受けます)。 終了 仮想マシンは次の場合に終了します HLT命令に到達します 存在しないメモリアドレスがアクセスされた プログラムカウンターはメモリ外で実行されます(VMに256バイトのメモリがすべて与えられてもラップアラウンドしないことに注意してください) ドレッシングモード 暗黙的 -命令には引数がありません。オペランドは暗黙的です 即時 -オペランドは命令の直後のバイトです relative-(分岐のみ)命令が署名された後のバイト(2の補数)。分岐が行われた場合にプログラムカウンターに追加するオフセットを決定します。0次の命令の場所です absolute-命令の後のバイトは、オペランドのアドレスです インデックス付き -命令プラスX(レジスタ)の後のバイトは、オペランドのアドレスです 説明書 各命令はオペコード(1バイト)で構成され、アドレッシングモードでは、immediate、relative、absolute、およびindexedの2番目の引数バイトです。仮想CPUが命令を実行すると、それに応じて(1または2)プログラムカウンターをインクリメントします。 ここに示されているすべてのオペコードは16進数です。 LDA -オペランドをロードする A オペコード:即時:00、絶対:02、インデックス付き:04 …

30
賢い人のMira気楼
むかしむかし、Quoraでこの質問/回答を読んでいた FizzBu​​zzテストに合格できないコンピューターサイエンスの学位を持つプログラマーは本当にいますか このコードは明白な答えとして与えられます for i in range(1, 100): if i % 3 == 0 and i % 5 == 0: print "FizzBuzz" elif i % 3 == 0: print "Fizz" elif i % 5 == 0: print "Buzz" else: print i もちろん、FizzBu​​zzは死ぬまでゴルフにかけられましたが、それはこの質問の目的ではありません。あなたはコメントで、4の倍数の印刷「ジャズ」などの追加条件を簡単に追加できるので、この明白な答えは素晴らしいと誰かが言及していることがわかります(同意しません。このスキームを拡張するにはO(2 ** n )コード行。) あなたの挑戦は、仲間によって判断されるようにFizzJazzBuzzの最も美しいバージョンを書くことです。 投票者が考慮すべき事項: ドライ 除算/モジュラス演算の効率 Quoraに関する回答の多くはPythonを使用していましたが、ここではそのような言語の制限はありません。 …
29 popularity-contest  code-challenge  word  popularity-contest  string  grid  language-design  code-golf  source-layout  math  fastest-algorithm  assembly  code-golf  json  code-golf  arithmetic  array-manipulation  code-golf  ascii-art  code-golf  crossword  code-golf  string  restricted-complexity  code-golf  ascii-art  kolmogorov-complexity  code-golf  string  decision-problem  balanced-string  syntax  code-golf  grid  puzzle-solver  hexagonal-grid  code-golf  math  number  sequence  code-golf  string  decision-problem  code-golf  cryptography  king-of-the-hill  code-challenge  fastest-code  code-golf  number  code-golf  code-golf  string  code-golf  cryptography  king-of-the-hill  java  code-golf  number-theory  base-conversion  code-golf  code-golf  array-manipulation  code-golf  array-manipulation  sorting  code-challenge  restricted-source  quine  code-golf  tips  python  king-of-the-hill  code-golf  source-layout  fractal  code-golf  tips  game  king-of-the-hill  path-finding  grid  code-golf  kolmogorov-complexity  natural-language  code-golf  tips  python  code-golf  number  arithmetic  sequence  array-manipulation  code-golf  number  combinatorics  random  integer-partitions  code-golf  string  code-golf  vim  comment  code-golf  combinatorics  counting  code-challenge  rosetta-stone  code-golf  combinatorics  sequence  subsequence  code-golf  code-challenge  restricted-source  primes  printable-ascii  popularity-contest  graphical-output  image-processing 

20
x86 / x64マシンコードでのゴルフのヒント
私はそのような質問がないことに気づいたので、ここにあります: マシンコードでゴルフをするための一般的なヒントはありますか?ヒントが特定の環境または呼び出し規約にのみ適用される場合は、回答でそれを指定してください。 回答ごとに1つのヒントのみを入力してください(こちらを参照)。

18
回転対称性のある数
整数、出力所与truthyのそれは同じ逆さまである場合、値または(180°回転)falsyそうでない場合、値を。 0、1、及び8回転対称性を持っています。6となり9、逆もまた同様です。 真実の結果を生み出す一連の数字:OEIS A000787 0, 1, 8, 11, 69, 88, 96, 101, 111, 181, 609, 619, 689, 808, 818, 888, 906, 916, 986, 1001, 1111, 1691, 1881, 1961, 6009, 6119, 6699, 6889, 6969, 8008, 8118, 8698, 8888, 8968, 9006, 9116, 9696, 9886, 9966, 10001, 10101, 10801, 11011, 11111, 11811, 16091, …
27 code-golf  number  sequence  decision-problem  code-golf  string  parsing  c  code-golf  sorting  integer  code-golf  number  sequence  rational-numbers  graphical-output  atomic-code-golf  assembly  box-256  code-golf  geometry  tips  python  code-golf  number  sequence  arithmetic  number-theory  code-golf  ascii-art  kolmogorov-complexity  geometry  code-golf  graphical-output  code-golf  math  code-golf  grid  cellular-automata  game-of-life  code-golf  string  subsequence  code-golf  arithmetic  rational-numbers  code-golf  tips  dc  code-golf  ascii-art  kolmogorov-complexity  date  code-golf  string  primes  code-golf  string  natural-language  conversion  code-golf  sequence  code-golf  number-theory  primes  base-conversion  code-golf  math  primes  base-conversion  code-golf  ascii-art  fractal  code-golf  matrix  code-golf  math  tips  geometry  python  string  code-challenge  keyboard  code-golf  graphical-output  code-golf  string  code-golf  number  sequence  cops-and-robbers  number  sequence  cops-and-robbers 

14
ナノコア戦争
これは、20世紀に遡るプログラミングKOTH であるCore Warの適応です。具体的には、主に元の提案に基づいて非常に単純化された命令セットを使用しています。 バックグラウンド コア戦争には、コンピューターの制御のために戦っている2つのプログラムがあります。各プログラムの目標は、相手のプログラムを見つけて終了することで勝つことです。 戦闘はコンピューターのメインメモリ内で行われます。このメモリはコアと呼ばれ、8192個のアドレスが含まれています。戦闘が始まると、各競技者(戦士と呼ばれる)のコードがランダムなメモリチャンクに配置されます。プログラムの実行は戦士間で交互に行われ、それぞれ1つの命令を実行します。各命令はコアの一部を変更できるため、プログラムを自己変更する可能性があります。 目標は、対立するプログラムを終了することです。プログラムは、無効な命令(任意のDAT命令)を実行しようとすると終了します。 命令セット 各プログラムは一連の低レベルの命令で構成され、各命令はAおよびBフィールドと呼ばれる2つのフィールドを取ります。 この命令セットは、元の仕様から大きく引き出されます。主な変更点は、1)コマンドの追加/減算の明確化、および2)#どこでも使用できるようにするためのアドレス指定モードの変更です。Core Warsのほとんどのフルバージョンには、20を超えるオペコード、8つのアドレス指定モード、および「命令修飾子」のセットがあります。 オペコード 各命令には、7つの異なるオペコードのいずれかが必要です。 DAT A B-(データ)-これは単に数字Aとを保持しますB。重要なのは、DAT命令を実行しようとするとプロセスが停止することです。 MOV A B-(移動)-これにより、メモリ位置の内容がメモリ位置Aに移動しますB。以下は、前後のデモンストレーションです。 MOV 2 1 ADD @4 #5 JMP #1 -1 MOV 2 1 JMP #1 -1 JMP #1 -1 ADD A B-(追加)-これは、メモリロケーションの内容をメモリロケーションAに追加しますB。両方の最初の2つのフィールドが追加され、2番目のフィールドが追加されます。 ADD 2 1 MOV @4 #5 JMP #1 -1 ADD …

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 …

11
アセンブリ言語クイン
可能な限り短いアセンブリ言語のquineを書きます。 print-quine命令または同等のものがない限り、必要なISAを使用します。例には、x86、MIPS、SPARC、MMIX、IBM BAL、MIX、VAX、JVM、ARMなどが含まれます。 _printfI / O のC標準ライブラリの関数(またはJVMバイトコードに相当するJava)に対してリンクできます。 長さは、命令数とデータセグメントのサイズの両方で判断されます。ソリューションには少なくとも2つの指示が含まれている必要があります。 QUINEを印刷する必要があり、アセンブリコードではなく、組み立てられたマシンコード。

5
ハードオブジェクトまたはソフトオブジェクトはもっとありますか
What-Ifブックのオープニングに触発されました。 入力は、文字列、文字列のリストなどとしてのスペースの長方形で、#内部にで作成されたオブジェクトがあります。 ######## # # ######## ### #### ### #### ### オブジェクトは常に交差せず、触れない長方形になります。ソフトオブジェクトは#、中央がで埋められておらず、境界のみであるオブジェクトとして定義されます。ハードオブジェクトは、塗りつぶされたオブジェクトです。幅または高さのあるオブジェクト<=2はハードと見なされます。すべてのオブジェクトはハードまたはソフトです。 入力にさらに硬いオブジェクトがある"Hard"場合、output 、より柔らかい場合、output "Soft"、それらが等しい場合、output "Equal"。 これはcode-golfなので、バイト単位の最短コードが勝ちです! テストケース これらのケースは完全な入力ではなく、各オブジェクトを特徴付けるべきものです。実際の入力は、質問の上部にあるascii-artのようになります。 ハード # #### ## ## ########## ########## ########## 柔らかい ### # # ### ################### # # # # # # ################### #### # # # # # # # # # …
19 code-golf  ascii-art  counting  code-golf  number  grid  decision-problem  chess  code-golf  grid  graph-theory  chess  code-golf  math  geometry  code-golf  arithmetic  roman-numerals  fastest-code  code-golf  math  geometry  code-golf  string  cryptography  code-golf  number  sequence  decision-problem  code-golf  string  parsing  c  code-golf  sorting  integer  code-golf  number  sequence  rational-numbers  graphical-output  atomic-code-golf  assembly  box-256  code-golf  geometry  tips  python  code-golf  number  sequence  arithmetic  number-theory  code-golf  ascii-art  kolmogorov-complexity  geometry  code-golf  graphical-output  code-golf  math  code-golf  grid  cellular-automata  game-of-life  code-golf  string  subsequence  code-golf  arithmetic  rational-numbers  code-golf  tips  dc  code-golf  ascii-art  kolmogorov-complexity  date  code-golf  string  primes  code-golf  string  natural-language  conversion  code-golf  sequence  code-golf  number-theory  primes  base-conversion  code-golf  math  primes  base-conversion  code-golf  ascii-art  fractal  code-golf  matrix  code-golf  math  tips  geometry  python  string  code-challenge  keyboard  code-golf  graphical-output  code-golf  string  code-golf  number  sequence  cops-and-robbers  number  sequence  cops-and-robbers 

1
FASMでコンパイルされたx86 ASMのEXEサイズを減らす方法は?
演習として、x86アセンブリ言語でこの課題に対する簡単なソリューションを作成しました。これをWindowsのFASMで実行しています。これが私のソースコードです。 format PE console entry start include 'WIN32A.inc' section '.text' code executable start: push char ; Start at 'A' call [printf] ; Print the current letter 4 times call [printf] call [printf] call [printf] inc [char] ; Increment the letter cmp [char], 'Z' ; Compare to 'Z' jle start ; …

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
x86アセンブリで大きさの順序を計算する最速の方法
タスクは簡単です。可能な限り少ないクロックサイクルを使用して整数の大きさを計算するアセンブリを記述します。 大きさの順序はと定義されてlog10いlog2ます。 有効な入力の範囲はある0に、包括的。その範囲外の入力の動作は未定義です。1012 値は、最も近い整数に切り捨てる必要が0あります0。ただし、入力を指定した場合、出力はである必要があります。(これは符号なし整数で可能な負の無限大の最良の表現であると考えることができます)。 x86アセンブリでなければなりません。 整数は、静的/インライン整数ではなく、ランタイム値である必要があります。そのため、コンパイル時にそれが何であるかはわかりません。 既にレジスタに整数がロードされていると仮定します。(ただし、明確にするために回答のレジスタに値を設定することも含めてください)。 外部ライブラリまたは関数を呼び出すことはできません。 Intelのドキュメントに記載されている手順を自由に使用できます。 いいえC 〜7個のIntel Coreアーキテクチャのいずれでも使用できます(10ページにリスト)。理想的にはNehalem(Intel Core i7)。 勝利の答えは、可能な限り少ないクロックサイクルを使用するものです。つまり、1秒あたりの操作数が最も多くなります。おおよそのクロックサイクルの概要は、http://www.agner.org/optimize/instruction_tables.pdfにあります。クロックサイクルの計算は、回答が投稿された後に発生する可能性があります。

3
実行可能な最小のMach-O実行可能ファイル
x86_64で実行可能な最小の実行可能なMach-O実行可能ファイルは何ですか?プログラムは何もできません(戻りコードを返すことさえできません)が、有効な実行可能ファイルでなければなりません(エラーなしで実行する必要があります)。 私の試み: GNUアセンブラー(null.s): .text .globl _main _main: retq コンパイルとリンク: as -o null.o null.s ld -e _main -macosx_version_min 10.12 -o null null.o -lSystem サイズ:4248バイト 16進数の値を見ると、おそらく削除できるゼロパディングがたくさんあるようですが、方法はわかりません。また、libSystemをリンクせずにexectubaleを実行できるかどうかもわかりません...

1
WinAli-アセンブリ言語を理解するための仮想CPU
WinAliは、Windows用のモデルアセンブラです。実際のCPUをエミュレートし、アセンブリ言語の学習と理解を支援することを目的としています。 ドイツ語のウィキペディアの記事:http : //de.wikipedia.org/wiki/WinAli(現時点では英語の記事はありません) 生成された出力をテストする場合:Googleドライブへのリンク(プログラム自体はドイツ語ですが、ドイツ語を理解していなくても簡単に使用できます) WinAliに関するいくつかの情報(データと構文) データ型: WinAliの唯一のデータ型は、実際にはSmallintまたはshortである2バイト長の「整数」です。したがって、正しい型を処理する必要はありません。これも分割時に丸められます。 変数と定数: 変数は、コマンドの後に次のように定義されます。 name DS F nameは明らかに変数の名前です DSは新しい変数のキーワードです Fは変数の長さをビット単位で定義します。これはゼロベースで16進数なので、F = 16ビット 定数は非常に似ています: name DC value nameは単に定数の名前です DCは新しい定数のキーワードです valueは、その定数に割り当てられた値です。two DC '2' コードの最後に定数を指定する必要はありません。LDA(load)操作でインラインに書き込むこともできますLDA 0,'2'。これにより、「0」がレジスター0(アキュムレーター)にロードされます。 構文: コードは、スペースまたはタブで区切られた4つの列に配置されます。 label command params comment labelはb labelコマンド(goto label)に使用され、しばしばスキップされます。 以下にリストされているコマンドのいずれかをコマンドします。 params 1つまたは2つのパラメータと少なくとも1つのレジスタ、必要に応じて別のレジスタ、変数、スタック、またはアドレス。これらのパラメーターはコンマ(,)で区切られます。 コメント(オプション)行末までの、;または*行末までのコメント。 小さなコード参照: コマンドは他にもありますが、この課題ではこれらのコマンドのみが必要です。 INI A 次のユーザー入力を変数に格納します A OUTI A変数Aが保持している値を出力します。なんらかの理由で、ここではレジスターを使用できません。 …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.