このコンパイラがNASMに変換されたときにGCCエラーによって出力されるのはなぜですか?

イシアメドウズ

私はGCCアセンブリ出力を少しいじって、高速整数平均で試してみました。最初に使用したCコードは次のとおりです。

unsigned int average (unsigned int x, unsigned int y) {
    return (x&y)+((x^y)>>1);
}

これが(Intel構文を使用して)発行したアセンブリです。

average:
  mov edx, edi
  and edi, esi
  xor edx, esi
  shr edx
  lea eax, [rdx+rdi]
  ret

NASM用に翻訳したとき:

average:
    mov edx, edi
    and edi, esi
    xor edx, esi
    shr edx, 1
    lea eax, [rdx+rdi]
    ret

次の行で、このエラーに文句を言いますlea

<source>:6: error: impossible combination of address sizes
<source>:6: error: invalid effective address

私はないんだけど、スーパーアセンブリに精通したが、これはスーパー奇妙に思えます。誰かが私に一体何がここで起こっているのか説明してもらえますか?

fuz

エラーメッセージは誤解を招く恐れがあります。このエラーの原因は、nasmがコードを16ビットまたは32ビットコードとしてアセンブルしようとすることです。どちらも64ビットレジスタをサポートしていません。この問題を修正するには、Linuxなどで64ビットコードをアセンブルするオプションを指定してnasmを呼び出します。

nasm -f elf64 source.asm

またはWindowsの場合:

nasm -f win64 source.asm

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

コンパイラによってchar * p [10]がchar ** pと見なされるのはなぜですか?

分類Dev

ENTER命令とLEAVE命令がコンパイラーによって使用されないのはなぜですか?

分類Dev

このタイプがコンパイラによって推測されないのはなぜですか?

分類Dev

インライン関数がコンパイラによって自動的に通常の関数に変換されたことを確認する方法は?

分類Dev

値によって関数に渡されたときと別のコンストラクターに値によって渡されたときのコンストラクターの呼び出しに違いがあるのはなぜですか?

分類Dev

この誤ったコンパイルとリンケージによってCソースファイルが削除されるのはなぜですか?

分類Dev

このコードが表示されないのはなぜですかエラー:存在しないファイルによってeがスローされたときにファイルが見つかりませんでしたか?

分類Dev

指定された初期化が効果なしでgccによって受け入れられ、生成された集計が何らかの形でクラスコンストラクターに引数として渡されるのはなぜですか

分類Dev

パラメータによって送信されたポインタの値をCのローカルポインタに割り当てているときにエラーが発生するのはなぜですか

分類Dev

コンパイラが封印されたサブクラスをオブジェクトに変換することを提案するのはなぜですか?

分類Dev

このプログラムが3つのC ++コンパイラによって誤って拒否されるのはなぜですか?

分類Dev

コンパイル時エラーではなく、format()関数によって例外がスローされるのはなぜですか?

分類Dev

GCCのネストされた関数(GNU拡張)のアドレスがコンパイラによって「一定ではない」と見なされるのはなぜですか?

分類Dev

Kotlinの型パラメーターが別の型パラメーターによってバインドされている場合、それが他の境界を持つことができないのはなぜですか?

分類Dev

コードはコンパイルされて正常に実行されますが、期待される出力は「Sub」が印刷されないことです。このコードのエラーは何ですか?

分類Dev

Brainfuckによってアセンブリコンパイラに作成されたプログラムがクラッシュするのはなぜですか?

分類Dev

可変として宣言されていない変数が変更されたときに、コンパイラがエラーを報告しないのはなぜですか?

分類Dev

コントローラが表示されているときにスイッチが常にオフになっているのはなぜですか?

分類Dev

<'(Int)-> Int'が 'Int'に変換できないのはなぜですか>エラーはxcodeによって返されますが、プレイグラウンドでは返されませんか?

分類Dev

インラインアセンブリコメントを追加すると、GCCで生成されたコードにこのような根本的な変更が生じるのはなぜですか?

分類Dev

コンパイラはこれらの式をどのように読み取りますか?これらの出力を取得するのはなぜですか(すべての変数は1として初期化されます)?

分類Dev

このコードがランダムに選択された属性を出力するのはなぜですか?

分類Dev

iconvを使用しているときにこのファイルがUTF-8に変換されなかったのはなぜですか?

分類Dev

Maven Javaコンパイラプラグインを1.5から1.6に変更すると、UTF-8をエンコードするためにマップできない文字が表示されるのはなぜですか?

分類Dev

Javaコンパイラがこの変数が常に初期化されていることを理解しないのはなぜですか?

分類Dev

typescriptクラスのこの構造が、正常にコンパイルされたときにランタイムエラーが発生するのはなぜですか?

分類Dev

バニラJSプロジェクトのCSSがReactJSコンパイラによって上書きされるのはなぜですか?

分類Dev

エラー出力にルーティングされたドキュメントが、ULTRAタスクで使用されたときにパイプラインが失敗するのはなぜですか?

分類Dev

スコープ内に不変の借用文字列スライス参照があるのに、コンパイラがこの可変借用でエラーを起こさなかったのはなぜですか?

Related 関連記事

  1. 1

    コンパイラによってchar * p [10]がchar ** pと見なされるのはなぜですか?

  2. 2

    ENTER命令とLEAVE命令がコンパイラーによって使用されないのはなぜですか?

  3. 3

    このタイプがコンパイラによって推測されないのはなぜですか?

  4. 4

    インライン関数がコンパイラによって自動的に通常の関数に変換されたことを確認する方法は?

  5. 5

    値によって関数に渡されたときと別のコンストラクターに値によって渡されたときのコンストラクターの呼び出しに違いがあるのはなぜですか?

  6. 6

    この誤ったコンパイルとリンケージによってCソースファイルが削除されるのはなぜですか?

  7. 7

    このコードが表示されないのはなぜですかエラー:存在しないファイルによってeがスローされたときにファイルが見つかりませんでしたか?

  8. 8

    指定された初期化が効果なしでgccによって受け入れられ、生成された集計が何らかの形でクラスコンストラクターに引数として渡されるのはなぜですか

  9. 9

    パラメータによって送信されたポインタの値をCのローカルポインタに割り当てているときにエラーが発生するのはなぜですか

  10. 10

    コンパイラが封印されたサブクラスをオブジェクトに変換することを提案するのはなぜですか?

  11. 11

    このプログラムが3つのC ++コンパイラによって誤って拒否されるのはなぜですか?

  12. 12

    コンパイル時エラーではなく、format()関数によって例外がスローされるのはなぜですか?

  13. 13

    GCCのネストされた関数(GNU拡張)のアドレスがコンパイラによって「一定ではない」と見なされるのはなぜですか?

  14. 14

    Kotlinの型パラメーターが別の型パラメーターによってバインドされている場合、それが他の境界を持つことができないのはなぜですか?

  15. 15

    コードはコンパイルされて正常に実行されますが、期待される出力は「Sub」が印刷されないことです。このコードのエラーは何ですか?

  16. 16

    Brainfuckによってアセンブリコンパイラに作成されたプログラムがクラッシュするのはなぜですか?

  17. 17

    可変として宣言されていない変数が変更されたときに、コンパイラがエラーを報告しないのはなぜですか?

  18. 18

    コントローラが表示されているときにスイッチが常にオフになっているのはなぜですか?

  19. 19

    <'(Int)-> Int'が 'Int'に変換できないのはなぜですか>エラーはxcodeによって返されますが、プレイグラウンドでは返されませんか?

  20. 20

    インラインアセンブリコメントを追加すると、GCCで生成されたコードにこのような根本的な変更が生じるのはなぜですか?

  21. 21

    コンパイラはこれらの式をどのように読み取りますか?これらの出力を取得するのはなぜですか(すべての変数は1として初期化されます)?

  22. 22

    このコードがランダムに選択された属性を出力するのはなぜですか?

  23. 23

    iconvを使用しているときにこのファイルがUTF-8に変換されなかったのはなぜですか?

  24. 24

    Maven Javaコンパイラプラグインを1.5から1.6に変更すると、UTF-8をエンコードするためにマップできない文字が表示されるのはなぜですか?

  25. 25

    Javaコンパイラがこの変数が常に初期化されていることを理解しないのはなぜですか?

  26. 26

    typescriptクラスのこの構造が、正常にコンパイルされたときにランタイムエラーが発生するのはなぜですか?

  27. 27

    バニラJSプロジェクトのCSSがReactJSコンパイラによって上書きされるのはなぜですか?

  28. 28

    エラー出力にルーティングされたドキュメントが、ULTRAタスクで使用されたときにパイプラインが失敗するのはなぜですか?

  29. 29

    スコープ内に不変の借用文字列スライス参照があるのに、コンパイラがこの可変借用でエラーを起こさなかったのはなぜですか?

ホットタグ

アーカイブ