問題タブ [assembly]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - このNASMコードが環境変数を出力するのはなぜですか?
私は今学期にコンピュータアーキテクチャコースを終えたところです。ここでは、とりわけ、MIPSアセンブリに手を出し、MARSシミュレータで実行しています。今日、好奇心から、UbuntuボックスでNASMをいじり始めました。基本的には、チュートリアルから物事をつなぎ合わせて、NASMがMIPSとどのように違うのかを感じ取っています。これが私が現在見ているコードスニペットです:
これはtest.asmとして保存され、とアセンブルnasm -f elf test.asm
およびリンクされld -o test test.o
ます。を使用して呼び出すと./test anArgument
、期待どおりに'anArgument'が出力され、その後に、その文字列を合計200文字まで埋めるのに必要な文字数が続きます(そのmov edx, 200
ステートメントのため)。ただし、興味深いのは、これらのパディング文字は、env
コマンドで表示されるように、実際には環境変数の最初からのものであるということです。なぜこれが私の環境変数を出力するのですか?
assembly - アセンブリ リソース
Windows 用の C/C++ の組み込みアセンブリに関する優れたリソース (書籍、オンライン チュートリアル) のガイダンスを教えてください。
assembly - ELF形式の再配置可能シンボル(アセンブリ言語)
クライアントアーキテクチャ用のGNUアセンブラのポートを開発しています。現在直面している問題は次のとおりです。
命令のイミディエートオペランドが複数の再配置可能シンボルを含む式である場合、elf形式の出力ファイルでどのように処理されますか。そのような場合に生成される移転情報はどうなりますか?
例えば:
label1とlabel2が再配置可能セクションで定義されている場合、それらは同じセクションまたは異なる再配置可能セクションである可能性があります。
assembly - ARMアセンブリでバイトをマスクする方法は?
私は 32 ビット (16 進数) ワード 0xaabbccdd を取得しており、2 バイトと 3 バイトを交換する必要があります。最終的には 0xaaccbbdd のようになります
2 番目と 3 番目のバイトを「マスク」して、最初に r1 と r2 を登録し、それらをスワップするようにするにはどうすればよいですか?
私の悪い英語で申し訳ありません.誰かが私を助けてくれることを願っています!
よろしく、セバスチャン
visual-studio-2005 - VS2005 の SSE4 命令?
Visual Stdio 2005 を使用してコンパイルされたプロジェクトで popcnt 命令を使用する必要があります
。組み込み関数は VS2008 でのみ機能し、ブロック__popcnt()
に記述してもコンパイラは命令を認識しないようです。__asm {}
これを行う方法はありますか?
c++ - 指定された値以上の最小の 2 のべき乗を見つけるためのアルゴリズム
特定の値以上の最小の 2 の累乗を見つける必要があります。これまでのところ、私はこれを持っています:
うまく機能しますが、素朴な感じがします。その問題のためのより良いアルゴリズムはありますか?
編集。素敵なアセンブラーの提案がいくつかあったので、それらのタグを質問に追加します。
assembly - 2つのスタックを使用する電卓
インテルアセンブリの割り当てがあります。2つのスタックを使用する計算機を作成する必要があります。たとえば、23 + 4/2 ^ 4 $のような式があります。したがって、$は式の終わりを示します。私が行うことは、2つのスタック(1つは数値用、もう1つは演算子用)を用意し、演算子の優先順位に従ってそれらをプッシュおよびポップすることです。
必要なのは、2つのスタックを2つの異なる目的に同時に使用するにはどうすればよいかということです。私が知っている限り、esp registerは、スタック内の変数が最後をポップする場所、または新しい変数をプッシュする場所を示します。しかし、espレジスタが1つしかない場合、どうすれば2つのスタックを持つことができますか?
前もって感謝します...
video - アライメントされていないメモリ アクセス
アンアライン メモリ アクセスをサポートしない組み込みデバイスを使用しています。
ビデオ デコーダーの場合、8x8 ピクセル ブロックでピクセル (1 ピクセルあたり 1 バイト) を処理する必要があります。このデバイスには、4 バイトを並行して処理できる SIMD 処理機能がいくつかあります。
問題は、8x8 ピクセル ブロックがアラインされたアドレスで始まることが保証されておらず、関数がこれらの 8x8 ブロックのうち最大 3 つを読み書きする必要があることです。
非常に優れたパフォーマンスが必要な場合、これにどのようにアプローチしますか? いろいろ考えた結果、以下の3つが思い浮かびました。
すべてのメモリ アクセスをバイトとして実行します。これは最も簡単な方法ですが、速度が遅く、SIMD 機能ではうまく機能しません (参照用の C コードで現在行っている方法です)。
2 つの 32 ビット読み取りを介してピクセル データをロードし、ビットを正しい位置にシフトし、スクラッチ メモリの整列されたチャンクにデータを書き込む 4 つのコピー関数 (アライメント ケースごとに 1 つ) を記述します。ビデオ処理関数は、32 ビット アクセスと SIMD を使用できます。欠点: CPU は、処理の背後にあるメモリ レイテンシを隠すことができません。
上記と同じ考え方ですが、ピクセルをスクラッチ メモリに書き込む代わりに、その場でビデオ処理を行います。これは最速の方法かもしれませんが、このアプローチのために作成する必要がある関数の数は多くなります (約 60 と推測されます)。
ところで: SIMD 拡張に関しては、コンパイラーが恐ろしいコードを生成するため、すべての関数をアセンブラーで作成する必要があります。
あなたはどちらの道を選びますか、それとも別のアプローチ方法がありますか?
visual-c++ - アセンブリ言語のオンライン リソース
x86 でアセンブリ言語を学習するためのリソースを持っている人はいますか? MSVC++6 でプログラムをデバッグしようとしていますが、頻繁にアセンブリに遭遇します (memcpy にステップインするなど)。
どんな助けでも大歓迎です:)
編集:うわー、たくさんの素晴らしいリソース..すべてを受け入れられた回答としてマークできたらいいのに:P
ヒント: 誰かを結合しますか? :P
新しい編集:私は答えを見ただけで、これらが最高のようでした:
intel x86 に特化したAseraphim の投稿
jkchong のより紹介的なテキストの投稿