Linux Assembly
--김도집 (2006.1.)
Contents
- 1 Assembly Code
- 2 Inline Assembly
1 Assembly Code #
.macro xxx,val
mov r0, \val
.endm
2 Inline Assembly #
다음은 인라인 어셈블리의 한 예이다.
__asm__ __volatile__ ("\n\
mrc p6, 0, r1, c1, c, 0 @ Read out ICMR\n\
and r1, r1, %0 \n\
mcr p6, 0, r1, c1, c0, 0 @ Write back"
:
:"r"(temp)
:"r1");
위에서 보는 바와 같이 인라인 어셈블리의 형식은 다음과 같다.
__asm__ __volatile__(어셈블리 문장 : 출력 : 입력 : 변경된 레지스터);
__volatile__의 경우엔 생략이 가능하나 컴파일러의 임의 변경을 막고자 한다면 넣어야 한다.
출력, 입력, 변경된 레지스터 등에는 어떤 값도 들어가지 않을 수도 있다. 반대로 하나 이상의 값이 필요하다면 컴마(,)로 구분하면 된다.