問題タブ [yasm]

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.

0 投票する
3 に答える
17219 参照

assembly - Linuxでcソースコードからnasmコンパイル可能なアセンブリコードを生成するには?

テスト プラットフォームは 32 ビット Linux です。

基本的に、gcc を使用して Intel スタイルと At&T スタイルの両方のアセンブリ コードを生成できることはわかっていますが、nasm/tasm を直接使用して、gcc が生成した Intel スタイルのアセンブリ コードをコンパイルすることはできないようです。

私は Windows と Linux プラットフォームの両方で asm コードのプロジェクト分析を行っているので、nasm\yasm のようなプラットフォームに依存しないアセンブラーで両方をコンパイルできれば、はるかに簡単な時間を持つことができると考えています...

私の質問は、Linux で c ソース コードから nasm コンパイル可能なアセンブリ コードを生成する方法ですか?

0 投票する
2 に答える
3682 参照

linux - Linux の printf でのセグメンテーション違反 ASM

以下は、本のプログラム (Introduction to 64 Bit Intel Assembly Language Programming for Linux, by Seyfarth, 2012) の第 9 章です。障害 (gdb 内) は次のとおりです。

プログラム受信信号 SIGSEGV、セグメンテーション違反。0x00007ffff7aa10a5 in __printf_size (fp=0x400400, info=0x0, args=) at printf_size.c:199 199 printf_size.c: そのようなファイルまたはディレクトリはありません。

この章までは、以下を使用して「オブジェクト ファイルを作成する」ことに成功しました。

その後、

これは本からコピーしたプログラムです (l 10 push rbp; 最初に rem'd しましたが、結果は同じでした):

この章の前のプログラム (「Hello World」の例) で同様のセグメンテーション違反が発生した後、

このプログラムまで機能していました。

0 投票する
1 に答える
2581 参照

assembly - .bss 変数アセンブリの初期化

変数を宣言しました:

プログラムでこれを値に初期化したいと思います255

コンパイルすると、次のエラーが表示されます。

ここで何が間違っていますか?

0 投票する
1 に答える
2360 参照

assembly - 再帰パスカルの三角形 (組み合わせ関数) アセンブリ

アセンブリで再帰的な組み合わせ関数を記述しようとしています( Yasm (nsam に類似))。ループ、乗算、除算は使用できません。

私は正しい軌道に乗っていると確信していますが、2番目の内部関数呼び出しに到達すると問題が発生します。誰かが私を助けて、どこが間違っているのか教えてもらえますか?

編集:これは結果を返す私の更新されたコードですが、常に正しいとは限りません。少し論理が間違っているに違いないと思います。

これは、私が参照として使用している JavaScript の実装です。

0 投票する
2 に答える
28799 参照

assembly - make: 循環依存が削除されました

私はすでにstackoverflowや他のmakeマニュアル、ウェブサイトを長い間検索してきましたが、make関数の末尾の空白やミスの使用法を見つけることができません. この警告メッセージを解決するのを手伝ってくれませんか?

メイクファイル:

main.asm:

ありがとうございます :)

0 投票する
1 に答える
884 参照

visual-studio - vsyasm を自動的にインストールする方法

Microsoft C++ を使用して Windows で mpir を自動的にビルドする方法を作成しようとしています。必要なステップの 1 つは vsyasm をインストールすることのようです。そのため、私の現在のミニ プロジェクトは、それを行うための自動化された方法を作成することです。つまり、人間の介入なしにバッチ ファイルまたはプログラムで実行できるものです。

vsyasm の readme では、次の 3 つの方法が提案されています。

1 つ目は、Windows セキュリティによってブロックされます。手動の介入を必要としない方法はありますか?

2 番目と 3 番目は、手動で直接介入する必要があります。特にIDE内ではなくコマンドラインからプロジェクトをビルドしたい場合、自動化された同等のものはありますか?

私が見逃している他のオプションはありますか?

0 投票する
1 に答える
1488 参照

assembly - アセンブラーでの出力用の 10 進値の変換

私は 64 ビット アセンブリ コード (yasm) に取り組んでおり、奇妙さや 1 桁としてではなく、正しく読み取れるように、任意に大きな 10 進数値を出力しようとしています。私は周りを見回しましたが、オンラインで適切な解決策を見つけることができないようです. 私のコードは現在、2 値の 10 進数を出力します (商を出力し、10 で割ったときの剰余を出力します)。より大きな値については、10 で繰り返し除算し、剰余がゼロではない間に剰余を出力する do-while ループ構造に沿って考えていました。この方法の問題点は、結果を逆に出力し、これを試行して逆にするためにコードがさらに複雑になることです。うまくいく解決策を知っている人はいますか?aaa、aam などを見てみましたが、それらがどのように機能するのか完全には理解できず、これらは 32 ビット操作でのみ使用できると思われます。

コード構造は次のとおりです。

4 の出力を表示しようとして、階乗値を計算しています! 24と5として!現在、2 つの 10 進数値しか表示できません (何らかの理由で full_print 条件の最初の部分がスキップされるため、3! は 6 ではなく 06 として出力されます) が、24 は正しく出力されます。私は 3 桁の 10 進数値を出力する簡単な方法について頭を悩ませてきましたが、条件付きで非常に面倒になり始めています。

0 投票する
1 に答える
2323 参照

compiler-errors - FFMPEG 用に libvpx をコンパイルするときのコンパイル エラー

64 ビット Ubuntu 14 マシンで FFMPEG をコンパイルしています。エラーをスローし続ける libvpx ライブラリを除いて、すべてが正常にコンパイルされました。

私はこのガイドに従いました: https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu このエラーが何を意味するのかわかりませんが、NASM での libvpx のコンパイルが壊れていることをどこかで読みましたが、コンパイル方法がわかりませんそれ以外の場合。バージョン 1.2 または 1.1 をインストールしても、まったく違いはありません。何か案は?

0 投票する
1 に答える
536 参照

c - 並べ替えアルゴリズム: アセンブリ

アセンブリ言語 (Linux、64 ビット、yasm) でバブルソート アルゴリズムの関数を実装しています。この関数は C ファイル内から呼び出され、配列と配列サイズがそれぞれ rdi と rsi を介してアセンブリに渡されます。

配列は整数のみをソートします。私は Java でバブルソートをコーディングし、そこでテストしました。問題なく動作します。ただし、配列 {9,8,7,6,5,4,3,2,1,0} を C ファイル経由で渡すと、出力は {8,8,8,8,8,8,8, 8,8,9}。gdb でデバッグしましたが、まだ問題がどこにあるのかわかりません。for ループの構築は正常に機能します (rcx と rdx は正しく機能します)。配列要素へのアクセス方法に問題があるようです。アドバイスをいただければ幸いです。

0 投票する
1 に答える
636 参照

c++ - gdb を使用して、yasm を使用してアセンブルされたコードをデバッグするにはどうすればよいですか?

yasm を使用してコードをアセンブルし、C++ プログラムにリンクしていますが、gdb でアセンブリ言語ファイルのシンボルにブレークポイントを設定できません。

コマンドラインはおそらくそれほど明るくはありませんが、ここに行きます:

すべて問題なくビルドされ、プログラムが実行されます。しかし、それを gdb にロードしてデバッグしようとすると、yasm ファイル内のどの関数にもブレークポイントを設定できないようです。たとえば、MandelRect という関数があります。メインのどこかから呼び出された場所を示すgdbは次のとおりです。

そのアドレスが何であるかを示すgdbは次のとおりです。

これは、ブレークポイントを設定できない gdb です。

そして、正しいアドレスにブレークポイントを配置すると、実行が関数に到達したときに、命令ごとにステップ実行できなくなります。私が知る限り、それはレーベルからレーベルへと流れています。

明らかに - まあ、多分?- これは、ファイルがデバッグなしでコンパイルされたという gdb の主張と関係があります。しかし、関連する .o ファイルとバイナリにシンボルがあるようです:

では、どうすればこれを修正できますか?私は何かを誤解していますか、それともyasm -g壊れていますか? yasm のデバッグ情報を gdb で動作させることができた人はいますか?

(システムはLinux 3.2.0-4-amd64 #1 SMP Debian 3.2.60-1+deb7u3 x86_64 GNU/Linuxです。)