問題タブ [intel-syntax]
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.
assembly - アセンブリ翻訳
次の C コードをアセンブリに変換しようとしています。
シフト操作でエラーが発生し続けます。本でいくつかの例を見ましたが、何が問題なのかわかりません。シフトしたい量が変数だからかもしれないと思います。これを達成する正しい方法は何だろうと思っていましたか?
これが私が試したことです:
エラーの内容: オペランドの型が正しくありません。エラー コード: C2415
assembly - 2007 年に動作していた intel 構文コードの GNU アセンブラー エラー
何年も前に binutils の更新ですべてのソースが壊れてしまい、断念した colorforth プロジェクトにようやく戻ることができました。何が起こっているかの例を次に示します。
最初の非ディレクティブ行は、マニュアルの例からのものです: https://sourceware.org/binutils/docs/as/i386_002dMemory.html#i386_002dMemory、残りは を使用した objdump 逆アセンブリからのもの--disassembler-options=intel
です。すべてが組み立てに失敗します:
私は一晩中グーグルで運がなかった。私は何か間違ったことをしていると確信していますが、それが何であるかを理解できれば気になります。しましapt-get source binutils
たが、どこから調べればよいかわかりません。
gas
それで、再び料理をするための魔法の呪文は何ですか?
macos - バックエンドのエラー: 32 ビット絶対アドレッシングは 64 ビット モードではサポートされていません
こんにちは、gcc を使用して Mac で ASM intel_syntax noprefix に取り組んでいます。何らかの理由で、バックエンドでこのエラーが発生し続けます。32 ビット絶対アドレス指定は 64 ビット モードではサポートされ ていません。 ASMインラインで使用されている瞬間は?
ここに私のコードがあります:
assembly - 「.intel_syntax noprefix」を使用してラベルのメモリ アドレスを取得するにはどうすればよいですか?
アセンブルおよびリンクされたリアル モード プログラムの作成方法を学習しています。
- GCC アセンブラ バージョン 2.25
- Binutils バージョン 2.25
- GCC バージョン 5.2.0
接頭辞を指定せずにIntel構文を使用します.intel_syntax noprefix
文字列のアドレスをSIレジスタにロードしたい。NASMでメモリ位置を参照する方法は知っていますが、GNU Assembler コード内で同じことを行うと、ラベルのアドレスではなく、文字列の WORD のみがレジスタに移動されます。
私のコードは次のとおりです。
GCC でコンパイルすると、デバッガーでプロセッサの動作を確認できます。
しかし、文字列が指すデータではなく、文字列のアドレスをレジスタに移動したいのです。
また、次のように名前を角括弧で囲みました。
違いはありません。
NASMから、このアセンブリ コードが機能することがわかっています。
NASMname
は、 のアドレスをレジスタSIに移動する命令を生成します。
私の質問:プレフィックスなしの Intel 構文を使用してGCCにシンボルのアドレスをレジスタにロードさせる方法はありますか?
assembly - AT&T 構文を使用する場合の間違った argc
このアセンブリ チュートリアルを読んでいて、サンプルが機能するようになったので、改善を試みることにしました。一度実行すると動作しなくなったので、gcc でコンパイルしてデバッグ情報を取得できるように、AT&T 構文に変換しようとしました (OS X を使用していて、nasm は Mach のデバッグ情報を生成しないため)。 O 形式)。
動作する元のプログラムを変換しようとしましたが、AT&T 構文を使用して記述した後、動作しなくなりました。gdb を使用してデバッグしたところ、%rsp
argc が含まれていると予想していた に値 が含まれていることがわかりました0x93b2e5ad
。これは、Intel 構文バージョンでは発生しませんでした。
私の質問は、%rsp
AT&T バージョンでは argc の値が正しくないのに、Intel バージョンでは正しくないのはなぜですか?
これは元の Intel 構文バージョンです (チュートリアルのバージョンを少し変更しました)。
AT&T 構文に変換した後のコードは次のとおりです。
次のように Intel バージョンをコンパイルしました。
そして、AT&T バージョンを次のようにコンパイルしました。
gcc - intel構文を永続的に使用するようにgccを設定するには?
gcc コマンドで正常にコンパイルされる次のコードがありますgcc ./example.c
。プログラム自体は、単純に 2 つの整数を加算する関数「add_two」を呼び出します。拡張アセンブリ命令内で intel 構文を使用するには、最初に intel に切り替えてから AT&T に戻す必要があります。gcc のドキュメントによると、を使用して intel 構文に完全に切り替えることができますgcc -masm=intel ./exmaple
。
スイッチ-masm=intel
でコンパイルしようとすると、コンパイルされず、理由がわかりませんか? すでに命令を削除しようとしました.intel_syntax
が、まだコンパイルされません。
上記のプログラムをコンパイルすることによるエラーメッセージgcc -masm=intel ./example.c
は次のとおりです。
assembly - NASM コンパイラでコンパイルすると奇妙なエラーが発生する
私は公式に困惑しています...この.ASM
ファイルをコンパイルしているときに最も奇妙なエラーが発生しています...何らかの理由で、この行mov bx, word [w1]
によりコンパイラは次のように言います: error: invalid effective address
. ただし、その前の行は問題なくmov ax, word [w0]
コンパイルされます。w1 の定義方法に問題があるのではないかと考えたので、振り返ってみると、w0 と w1 の両方がラベル:w0 dw 0
と を除いてまったく同じであることがわかりましたw1 dw 0
。何が原因なのか全くわかりません!自分でコンパイルしてみたい場合は、ここにソースがあります...
とにかく、私の質問は、何が原因で、どうすればこの問題を解決できますか?
編集: 完全なコードはここにあります: http://pastebin.com/NFqcDnhZ
assembly - メモリと GNU の定数を .intel_syntax として区別する
次のような Intel 構文 (ガスをアセンブラーとして使用) で記述された命令があります。
しかし、その mov 命令は、予想どおりmov 0xe,%rdx
ではなくにアセンブルされています。期待される動作を得るにはmov $0xe,%rdx
、最初の命令 (または の定義) をどのように記述すればよいですか?msg_size
c - 文字列をアセンブリ ループして文字数をカウントする
文字列の文字数をカウントするアセンブリ コードを作成しようとしましたが、エラーが発生しました。
コード、gcc と intel_syntax を使用
そして、私はエラーが発生しました:
最後に、正規表現 pattern([pq][^a]+a) を検索し、開始位置と長さを出力するプログラムを作成したいと思います。私は C で書きましたが、アセンブリで動作させる必要があります: 私の C コード: