問題タブ [gnu-assembler]
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.
string - 文字列と asm x86
私はasmが初めてで、文字列を使用しています。
1/文字列があり、最初の文字のアドレスを返したい。(私は C メインで asm 関数を呼び出します)。
私はもう試した :
私によると、文字列を返します。
movl $(str), %eax
文字列の最初の文字のアドレスを返しますか? 文字列の 2 番目の文字のアドレスを返したい場合、asm でそれを行う方法がわかりません。
私はそのようなCプログラムで結果を表示します:
「string : programmation, address : 134520852」が返ってきます。「134520852」はアドレスではなく、何かわからないことがあると思います。
%edi
2/文字列に 、および 関数があるのを見たことがありますが、%esi
それを使用した適切な (簡単な) チュートリアルが見つかりません。%edi はインデックス ソース、%esi はインデックス先であることを理解しました...それに関するリンクをいくつか知っていますか?
前もって感謝します !:-)
xcode - Xcode/gcc で使用するために ARM アセンブリ コードを 32 バイトまたは 64 バイトに揃える方法は?
32 またはできれば 64 バイトの境界に揃える必要があるアセンブリ コードがあります。
私には 2 つのシナリオがあります。関数の先頭を揃えるか、アセンブラーにノーオペレーションを自動的に挿入させてループの先頭を揃えます。
これらは可能ですか?
どうもありがとう。
assembly - asm プログラムでの再帰
セグメンテーション違反を返す asm (x86 / GAS) プログラムについて質問があります。フィボナッチについてです:アルゴリズムは大丈夫だと思います:(疑似コード)
エラーになる理由がわかりません。AC プログラムは asm 関数を呼び出します。
コードは次のとおりです。
segfault の場所を見つけるのを手伝ってくれませんか?
ありがとう !
PS: ここに ret があります:
arm - ARM-GAS: c ファイルで定義された静的配列のアドレスをロードする方法 (PIC および通常のコード)
C ファイル ( const int data_input[1024]; ) で定義されたいくつかの単純な静的配列があり、アセンブリ コードからアクセスする必要があります。それを行う正しい方法は何ですか?
これまでのところ、私はこのようにしてきました:
私の知る限り、 adr はldr r1、= data_input_ptrまたはそのようなものに対する疑似操作です。
私のやり方はあまり正しくないようです。まず、 adr r1, data_input は、リンク時に可能であることが検出された場合、PC 相対アドレス指定を直接使用する可能性があります。もう 1 つの問題は PIC に関するものです。コードが位置に依存しない必要がある場合はどうでしょう。ローダーによって data_input_ptr の値を初期化する必要がある場合、どのように機能しますか (私はそれについて正しいですか?)
assembly - アセンブリ内の複数の引数
このような複数の引数は x86 アセンブリで何をしますか? たとえば、次の 2 つの指示があります。
mov -0x4(%edi,%esi,4),%eax
lea (%edi,%esi,4),%ebx
すべてのアセンブリ コードを投稿するのは気が進まないのです。これは大学のプロジェクトのためのものであり、私の教師はおそらく私がこれをオンラインに投稿することを望んでいないからです。どんな助けでも感謝します。
c - ARMアセンブリからC関数を呼び出す方法は?
私はAndroidデバイス上のARMCortex-Aをターゲットとするコードを(GNUアセンブラとコンパイラを使用して)作成しており、AssemblyとCの間のインターフェイスを試みています。特に、AssemblyからCで記述された関数を呼び出すことに興味があります。.extern
ディレクティブやC関数の宣言asm
など、いろいろ試してみ__asm__
ましたが、どれもうまくいかなかったので、最小限の例を探しています。そのような例への参照も同様に歓迎されます。
64-bit - 64ビットのGASのチュートリアル
64ビットシステムのAT&T-Syntaxでコードをコンパイルおよびリンクするための情報を見つけることができるGASのチュートリアルを知っている人はいますか?大学で必要なので、代わりにnasmを使うことはできません。私が見つけることができるすべてのツチは、nasmまたは類似のものであるか、32ビットでのみ機能します。私たちの教授が示した最小限の例でさえ、私の32ビットシステムでは機能しますが、64ビットでは機能しません。
c - ベース ポインターとスタック ポインターを理解する: gcc 出力のコンテキストで
次のCプログラムがあります。
そして、gcc で -S ディレクティブを使用してコンパイルすると、次のアセンブリが得られます。
私が理解していないのは、以前の配列要素がbpから離れているのはなぜですか? 配列の要素が逆の順序で配置されているようです。
また、配列要素をスタックにプッシュするために、gcc が movl の代わりに push を使用しないのはなぜですか?
別の見方
私が得るモジュールへの静的変数として配列をグローバル名前空間に移動します:
次の C プログラムを使用します。
これはスタックへのより多くの洞察を与えません。しかし、わずかに異なるセマンティクスを使用したアセンブリの差分出力を見るのは興味深いことです。
assembly - GNUアセンブラ(as)を使用してアセンブリファイルを生のバイナリ(DOS .comなど)形式にコンパイルするにはどうすればよいですか?
このソースコードをWindowsでコンパイルしたい(これは単なる例です):
NASMまたはFASMでコンパイルすると、出力ファイルの長さは2バイトになります。しかし、GNUアセンブラでコンパイルすると、出力ファイルの長さは292バイトになります。
GNUアセンブラ(as)を使用してアセンブリファイルを生のバイナリ(DOS .comなど)形式にコンパイルするにはどうすればよいですか?
なぜ私はこれをするのですか?
独自のシンプルなOSを作成したいので、Cを使用してコードを作成し(stdio.hやmath.hでもC標準ライブラリを使用せずに)、アセンブリに変換します。
次に、アセンブリファイルを生のバイナリにコンパイルします。
次に、名前をa.out
(アセンブラーの出力)に変更しmy_os.flp
、最後にVMWareでOSを起動します:)
linux - x86_64アセンブリLinuxシステムコールの混乱
私は現在、Linuxでアセンブリ言語を学んでいます。私は「ProgrammingFromtheGround Up」という本を使用してきましたが、すべての例は32ビットです。私のOSは64ビットで、すべての例を64ビットで実行しようとしています。しかし、私は問題を抱えています:
これは単にLinuxのexitSystem呼び出しを呼び出すだけであるか、そうすべきです。代わりに、SEG FAULTが発生し、代わりにこれを行うと
できます。明らかに問題は、%raxに移動する値です。2番目の例で使用する値$1は、「Programming From the Ground Up」が使用すると言ったものですが、インターネット上の複数のソースによると、64ビットのシステムコール番号は$60です。参照 私は何が間違っているのですか?また、他にどのような問題に注意する必要があり、参照用に何を使用する必要がありますか?あなたが知る必要がある場合に備えて、私はゼロからのプログラミングの第5章にいます。