인라인 어셈블러를 C와 유사한 언어로 함수에 삽입 할 때 스크래치에 사용할 수있는 레지스터에 대한 규칙은 무엇입니까? 컴파일러는 asm
블록을 입력하기 전에 저장해야하는 모든 레지스터의 값을 저장해야합니까? asm
블록을 종료하기 전에이 레지스터에 값을 저장하고 복원하는 것은 프로그래머의 책임입니까? 일반적인 규칙이 있습니까, 아니면 매우 구현 관련입니까?인라인 어셈블러 : 어떤 스크래치 레지스터를 사용할 수 있습니까?
6
A
답변
9
인라인 어셈블리는 정의에 따라 컴파일러에 따라 다릅니다.
인라인 어셈블리를 지원하는 대부분의 컴파일러에는 어셈블리에서 수정할 레지스터를 나타낼 수있는 구문이 있습니다. 그런 다음 컴파일러는 필요할 때 해당 레지스터를 저장하고 복원 할 수 있습니다.
2
일부 호출 규칙 here에서 레지스터 사용법을 읽을 수 있습니다.
7
매우 컴파일러마다 다릅니다. 그러나 현실적인 예제에서는 x86에서 gcc를 사용합시다. 형식은 다음과 같습니다
asm (assembler template
: output operands (optional)
: input operands (optional)
: list of clobbered registers (optional)
);
는 "사방 레지스터의 목록은"당신은 당신의 코드가 사용하는 등록 컴파일러를 이야기입니다.
이 다음은 간단한 메모리 복사 코드의 이러한 방향을 감안할 때
asm ("movl $count, %%ecx;
up: lodsl;
stosl;
loop up;"
: /* no output */
:"S"(src), "D"(dst) /* input */
:"%ecx", "%eax"); /* clobbered list */
, GCC는 블록의 다른 것들에 대한 EAX와 ECX를 사용하지 않습니다.
자세한 정보 here.
관련 문제
- 1. 인라인 어셈블리 코드에서 특정 레지스터를 강제로 사용할 수 있습니까?
- 2. 속도 성능을 위해 CPU 레지스터를 사용할 수 있습니까?
- 3. 링커 인라인 기능을 사용할 수 있습니까?
- 4. Jinja 템플릿에서 인라인 코드를 사용할 수 있습니까?
- 5. reStructuredText에서 인라인 Raw LaTeX을 사용할 수 있습니까?
- 6. 어떤 SmtpStatusCodes를 사용할 수 있습니까?
- 7. 어떤 Adpater를 사용할 수 있습니까?
- 8. MSVC x86 인라인 어셈블러 스위치 문
- 9. VS2008 IDE에서 CPU 레지스터를 수정할 수 있습니까?
- 10. 인라인 어셈블리에 포함
- 11. StarTeam에서는 어떤 검색 옵션을 사용할 수 있습니까?
- 12. 어떤 C++ 프로파일 러를 사용할 수 있습니까?
- 13. NSDictionary에서 어떤 클래스를 키로 사용할 수 있습니까?
- 14. 하위 쿼리는 어떤 위치에서 사용할 수 있습니까?
- 15. 어떤 .NET Framework에서 DotNetOpenAuth를 사용할 수 있습니까?
- 16. 아직 어떤 키보드 매핑을 사용할 수 있습니까?
- 17. WebKit에서 어떤 기능을 사용할 수 있습니까?
- 18. ListBox에서 어떤 FontFamily 글꼴을 사용할 수 있습니까?
- 19. 어떤 데이터베이스 프로그램을이 용도로 사용할 수 있습니까?
- 20. VisualSVNServerHooks.exe에는 어떤 옵션을 사용할 수 있습니까?
- 21. 어떤 python mpi 라이브러리를 사용할 수 있습니까?
- 22. 어떤 종류의 WPF 컨트롤을 사용할 수 있습니까?
- 23. Blackberry에서는 어떤 프로그래밍 언어를 사용할 수 있습니까?
- 24. 어떤 python XML api를 사용할 수 있습니까?
- 25. 어떤 CMS 또는 플러그인을 사용할 수 있습니까?
- 26. ASP dll에서 어떤 디스어셈블러를 사용할 수 있습니까?
- 27. 어떤 소프트웨어 라이센스를 사용할 수 있습니까?
- 28. 어떤 Amazon EC2 인스턴스를 사용할 수 있습니까?
- 29. 어떤 CMS가 Oracle을 데이터베이스로 사용할 수 있습니까?
- 30. 어떤 맞춤법 검사기를 사용할 수 있습니까?