インラインアセンブリ言語.あれは何ですか.


インラインアセンブラは、C言語などの高級言語からコンパイルされたコードの中で、アセンブリ言語で書かれた低レベルコードをプログラム内に埋め込むコンパイラを許可する部分です.
通常、アセンブリ言語コードの埋め込みは、これらの理由の一つに対して行われます.
  • の最適化.
  • は、プロセッサ特有の指示にパスします.
  • コンパイラでサポートされていない特定の呼び出し規約に渡します.
  • システムコールと割り込み:高レベル言語は、任意のシステムコールを作成するための直接的な機能を持っていないため、アセンブリコードが使用されます.
  • はリンカまたはアセンブラのための特別な指示を発します.
  • 例:
    GCCコンパイラが提供する2種類のインラインアセンブリ構文を示します.このプログラムはLinuxでのx 86 - 64プラットフォームでのみ動作します.
    #include <stdio.h>
    
    extern int func(void);
    // the definition of func is written in assembly language
    __asm__(".globl func\n\t"
            ".type func, @function\n\t"
            "func:\n\t"
            ".cfi_startproc\n\t"
            "movl $7, %eax\n\t"
            "ret\n\t"
            ".cfi_endproc");
    
    int main(void)
    {
        int n = func();
        // gcc's extended inline assembly
        __asm__ ("leal (%0,%0,4),%0"
               : "=r" (n)
               : "0" (n));
        printf("7*5 = %d\n", n);
        fflush(stdout); // flush is intentional
    
        // standard inline assembly in C++
        __asm__ ("movq $60, %rax\n\t" // the exit syscall number on Linux
                 "movq $2,  %rdi\n\t" // this program returns 2
                 "syscall");
    }
    
    出力
    7*5 = 35
    
    それは個々の変数は、レジスタの割り当ての重要な部分に行われているの崩壊を混乱させるとして.パフォーマンスが落ちるかもしれません.インラインアセンブラもプログラムの将来の移植とメンテナンスを複雑にします.
    代替の構造体はしばしばコンパイラとプログラマのための仕事を簡素化するために提供されます.ほとんどのコンパイラは特別な命令に固有の関数を提供し、任意のシステムコールのC関数ラッパーはUNIXプラットフォームで利用可能です
    通常、“intrinsics”は、組み込み関数に対するガイドである.すなわち、ライブラリ内の基本的な関数を呼び出すのではなく、コンパイラが/行を引き起こすことができる最も一般的なライブラリ関数.例えば、コールセットのmemset ( array1 , 10 , 0 )はx 86のようにコンパイルできます.
    mov ecx, 10
     xor eax, eax
     mov edi, offset FLAT:array1
     rep stosb
    
    このような本質は純粋に最適化です.コンパイラを使うことができないコードを開発することができます(通常は生成されません).明白な例のために、X 86のためのかなりの数のコンパイラはMMX命令のちょうど直接表現である「機能」を使用させる「MMX intrinsics」を持ちます.

    JavaScriptでイントインジクスまたはインラインアセンブリがあります。


    正直、私はこの質問について多くを捜して、この情報だけを見つけました.このブログ記事を今進行中の作品として残すつもりです.コメントがあれば、共有してください.ありがとう、私はこの研究にどんな助けを感謝します.
    https://github.com/WebAssembly/design/issues/1206
    https://webassembly.org
    https://stackoverflow.com/questions/12168575/executing-generated-assembler-inline

    資源


    https://wiki.cdot.senecacollege.ca/wiki/Inline_Assembly_Language
    https://en.cppreference.com/w/c/language/asm
    https://en.wikipedia.org/wiki/Inline_assembler
    https://stackoverflow.com/questions/2268562/what-are-intrinsics
    https://www.codeproject.com/Articles/15971/Using-Inline-Assembly-in-C-C
    https://stackoverflow.com/questions/48518225/what-are-intrinsic-types-in-javascript
    https://stackoverflow.com/questions/12168575/executing-generated-assembler-inline
    https://github.com/v8/v8/blob/master/src/objects/dictionary.h

    結論


    ⚠️ コンピュータ建築ブログ

    リンク


    🖇 GitHubで私について来てください
    🖇 フォローミーオン
    私のソフトウェアの移植性と最適化のクラスのために作られました.