조립 코드를 C에 삽입할 수 있는 방법이 있나요?
옛날에는 오래된 볼랜드 DOS 컴파일러로 다음과 같은 작업을 할 수 있었던 것으로 기억합니다.
asm {
mov ax,ex
etc etc...
}
현재 준플랫폼에 의존하지 않는 방법이 있습니까?BIOS를 호출할 필요가 있기 때문에 ASM 코드를 사용하지 않고 할 수 있는 방법이 있다면 마찬가지로 도움이 될 것입니다.
GCC 사용
__asm__("movl %edx, %eax\n\t"
"addl $2, %eax\n\t");
VC++ 사용
__asm {
mov eax, edx
add eax, 2
}
GCC에는 그 이상의 것이 있습니다.명령어에서는 컴파일러의 옵티마이저가 망치지 않도록 무엇이 변경되었는지 컴파일러에 알려야 합니다.난 전문가는 아니지만 가끔은 이렇게 보이기도 해
asm ("lock; xaddl %0,%2" : "=r" (result) : "0" (1), "m" (*atom) : "memory");
샘플 코드를 C로 작성하고 GCC에 어셈블리 리스트를 작성하도록 의뢰한 후 코드를 수정하는 것이 좋습니다.
C/C++의 인라인어셈블리에 대해 설명하는 다음 기사를 읽는 것이 좋습니다.
http://www.codeproject.com/KB/cpp/edujini_inline_asm.aspx
기사의 예:
#include <stdio.h>
int main() {
/* Add 10 and 20 and store result into register %eax */
__asm__ ( "movl $10, %eax;"
"movl $20, %ebx;"
"addl %ebx, %eax;"
);
/* Subtract 20 from 10 and store result into register %eax */
__asm__ ( "movl $10, %eax;"
"movl $20, %ebx;"
"subl %ebx, %eax;"
);
/* Multiply 10 and 20 and store result into register %eax */
__asm__ ( "movl $10, %eax;"
"movl $20, %ebx;"
"imull %ebx, %eax;"
);
return 0 ;
}
Microsoft 컴파일러의 경우 인라인 어셈블리는 x86에서만 지원됩니다.다른 타겟의 경우 전체 함수를 별도의 어셈블리소스 파일에 정의하고 어셈블러에 전달하여 결과 객체 모듈을 링크해야 합니다.
보호 모드 운영 체제에서는 BIOS를 호출할 수 없기 때문에 해당 시스템에서 사용할 수 있는 모든 기능을 사용해야 합니다.커널 모드라도 안전하지 않을 수 있습니다.BIOS가 OS 상태에 대해 올바르게 동기화되지 않을 수 있습니다.
의 사용.asm
또는__asm__
function (컴파일러에서는 차이가 있습니다)
또한 포트란 코드를 작성할 수 있습니다.fortran
기능.
asm("syscall");
fortran("Print *,"J");
언급URL : https://stackoverflow.com/questions/61341/is-there-a-way-to-insert-assembly-code-into-c
'source' 카테고리의 다른 글
vuexjs 인수 getter (0) | 2022.08.18 |
---|---|
Jackson에서 Java 개체를 JsonNode로 변환 (0) | 2022.08.17 |
각 해시맵에 대해 어떻게 합니까? (0) | 2022.08.17 |
의 웹 팩JSP 인덱스 파일 (0) | 2022.08.17 |
Vue에서 "v-html"과 함께 추가된 콘텐츠에 "v-on"을 설정하는 방법 (0) | 2022.08.17 |