인라인 어셈블리 언어. 저게 뭐에요?
4704 단어 computerscienceopensourcewebdev
어셈블리 언어 코드 포함은 일반적으로 다음 이유 중 하나로 수행됩니다.
예:
GCC 컴파일러에서 제공하는 두 종류의 인라인 어셈블리 구문을 보여줍니다. 이 프로그램은 Linux의 x86-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 플랫폼에서 사용할 수 있습니다._
일반적으로 "내장"은 내장 함수, 즉 컴파일러가 라이브러리에서 기본 함수를 호출하는 대신 인라인을 유발할 수 있는 가장 일반적인 라이브러리 함수를 안내합니다. 예를 들어, memset(array1, 10, 0)과 같은 호출은 다음과 같이 x86에 대해 컴파일할 수 있습니다.
mov ecx, 10
xor eax, eax
mov edi, offset FLAT:array1
rep stosb
이와 같은 내장 함수는 순전히 최적화입니다. "필요한"내장 함수는 컴파일러가 직접 생성할 수 없는(또는 일반적으로 생성하지 않는) 코드를 개발할 수 있도록 컴파일러가 내장 함수를 지원하는 경우일 가능성이 높습니다. 분명한 예를 들어, x86용 꽤 많은 컴파일러에는 MMX 명령의 직접적인 표현인 "함수"를 사용할 수 있는 "MMX 내장 함수"가 있습니다.
내장 함수 또는 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
🖇 팔로우
_p.s 이 게시물은 내 소프트웨어 이식성 및 최적화 수업을 위해 작성되었습니다.
Reference
이 문제에 관하여(인라인 어셈블리 언어. 저게 뭐에요?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aserputoff/inline-assembly-language-what-is-that-f9c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)