インラインアセンブリ言語.あれは何ですか.
4317 ワード
インラインアセンブラは、C言語などの高級言語からコンパイルされたコードの中で、アセンブリ言語で書かれた低レベルコードをプログラム内に埋め込むコンパイラを許可する部分です.
通常、アセンブリ言語コードの埋め込みは、これらの理由の一つに対して行われます.の最適化. は、プロセッサ特有の指示にパスします. コンパイラでサポートされていない特定の呼び出し規約に渡します. システムコールと割り込み:高レベル言語は、任意のシステムコールを作成するための直接的な機能を持っていないため、アセンブリコードが使用されます. はリンカまたはアセンブラのための特別な指示を発します. 例:
GCCコンパイラが提供する2種類のインラインアセンブリ構文を示します.このプログラムはLinuxでのx 86 - 64プラットフォームでのみ動作します.
代替の構造体はしばしばコンパイラとプログラマのための仕事を簡素化するために提供されます.ほとんどのコンパイラは特別な命令に固有の関数を提供し、任意のシステムコールのC関数ラッパーはUNIXプラットフォームで利用可能です
通常、“intrinsics”は、組み込み関数に対するガイドである.すなわち、ライブラリ内の基本的な関数を呼び出すのではなく、コンパイラが/行を引き起こすことができる最も一般的なライブラリ関数.例えば、コールセットのmemset ( array1 , 10 , 0 )はx 86のようにコンパイルできます.
正直、私はこの質問について多くを捜して、この情報だけを見つけました.このブログ記事を今進行中の作品として残すつもりです.コメントがあれば、共有してください.ありがとう、私はこの研究にどんな助けを感謝します.
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で私について来てください
🖇 フォローミーオン
私のソフトウェアの移植性と最適化のクラスのために作られました.
通常、アセンブリ言語コードの埋め込みは、これらの理由の一つに対して行われます.
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で私について来てください
🖇 フォローミーオン
私のソフトウェアの移植性と最適化のクラスのために作られました.
Reference
この問題について(インラインアセンブリ言語.あれは何ですか.), 我々は、より多くの情報をここで見つけました https://dev.to/aserputoff/inline-assembly-language-what-is-that-f9cテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol