저는 현재이 대학에서 특정 C/C++ 구조의 배후에있는 어셈블러 코드에 대해 배웁니다.Apple g ++/Visual C++ 같은 GNU g ++ 인라인 어셈블리 블록?
워크 플로는 일반적으로 다음과 같이 진행됩니다. 실험 조교는 주제에 대해 간단히 말하고, 단점을 파악한 다음 인라인 어셈블리를 사용하여 완전히 임의의 문제를 해결합니다.
(예를 들어 그는 잠시 struct
이 (회원) 메모리에 저장됩니다, 우리는 패턴을 파악하고 우리는 우리가 struct
를 사용하는 간단한 문제에 인라인 어셈블리를 사용하여 솔루션을 작성하는 방법에 대해 이야기합니다.)
실험실 보조원 (나머지 그룹과 마찬가지로)은 논증 때문에 Visual C++
컴파일러 및 디버거 (디스 어셈블리 용)를 사용하고 있지만 윤리적 인 이유로 사용할 수 없으므로 g++
및 gdb
을 선택했습니다. 나는 약 어색 찾을 무엇
g ++의 인라인 어셈블리 비주얼 C++에 비해 사실이다 :
내가 쓰고 싶은 경우 '인라인 어셈블리의 블록을'나는 두 가지 옵션이 있습니다 : 하나의
asm("..")
구조를 가지고는 각 명령어의 앞에는\n\t
(많은 혼란을 야기 함)이 있습니다. 또는 각 명령을 자체적으로asm("..")
블록으로 만들면 많은 타이핑이 발생합니다.인라인 어셈블리에서 로컬 변수를 참조하려면 확장 구문을 사용하거나
esp
/ebp
으로 오프셋을 사용하여 참조해야합니다. 나는 위해 내가 할 일은__asm { .. }
인 ASM 블록을 작성하고에 새로운 라인에 순서대로 각 명령을 작성하는 비주얼 C++의 인라인 어셈블리 스타일을 선호하는 위의 두 가지 문제에 관련하여
변수를 참조하기 만하면 그 이름을 써야합니다.
내 검색을 통해 Apple의 g++
은 Visual C++와 동일한 구문을 스위치 (-fasm-blocks)로 지원하지만 GNU g++
의 경우는 그렇지 않은 것으로 나타났습니다.
GNU g++
에서 인라인 어셈블리 블록과 같은 Visual C++
을 컴파일하는 것이 가능한지 궁금한 점이 있습니다.
Microsoft는 64 비트 프로그램에서 인라인 asm을 지원하지 않으며 어쩌면 그렇게 좋은 생각이 아니 었나요? –