Linux Assembly --김도집 (2006.1.) [[TableOfContents]] = Assembly Code = {{{ .ifdef xxx .else .endif }}} {{{ .align 5 }}} {{{ .equ xxx,0x000000000 }}} {{{ .include "xxx.inc" }}} {{{ .text }}} {{{ .macro xxx,val mov r0, \val .endm }}} {{{ .glbl xxx }}} = Inline Assembly = 다음은 인라인 어셈블리의 한 예이다. {{{#!vim c __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__}}}의 경우엔 생략이 가능하나 컴파일러의 임의 변경을 막고자 한다면 넣어야 한다. 출력, 입력, 변경된 레지스터 등에는 어떤 값도 들어가지 않을 수도 있다. 반대로 하나 이상의 값이 필요하다면 컴마(,)로 구분하면 된다. 앞서 예에서 "r"과 같이 사용되는 것이 constraint라고 한다. 자주 사용되는 constratint를 다음과 같다. ||'''Constraint'''||'''설명'''|| ||m||메모리 주소|| ||r||레지스터|| ||i||상수 값|| ||g||앞서 설명한 어느 것도 될 수 있다|| ||0, 1, 2 ... ||앞서 선언한 값|| ||=||출력용으로 사용한다||