FSTWikiRev. 1.5 김도집/Assembly
Login:
Password:
Join
U E D R S I H P RSS
FrontPage|FindPage|TitleIndex|RecentChanges

Linux Assembly

--김도집 (2006.1.)

Contents

1 Assembly Code
2 Inline Assembly

1 Assembly Code #

.ifdef xxx
.else
.endif

.align 5

.equ xxx,0x000000000

.include "xxx.inc"

.text

.macro xxx,val
   mov r0, \val
.endm

.glbl xxx

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__의 경우엔 생략이 가능하나 컴파일러의 임의 변경을 막고자 한다면 넣어야 한다.

출력, 입력, 변경된 레지스터 등에는 어떤 값도 들어가지 않을 수도 있다. 반대로 하나 이상의 값이 필요하다면 컴마(,)로 구분하면 된다.

앞서 예에서 "r"과 같이 사용되는 것이 constraint라고 한다. 자주 사용되는 constratint를 다음과 같다.
Constraint설명
m메모리 주소
r레지스터
i상수 값
g앞서 설명한 어느 것도 될 수 있다
0, 1, 2 ... 앞서 선언한 값
=출력용으로 사용한다

last modified 2006-03-08 08:21:45
ShowPage|FindPage|DeletePage|LikePages Valid XHTML 1.0! Valid CSS! powered by MoniWiki
0.0204 sec