Posts [Assembly] 매크로 사용하기
[Assembly] 매크로 사용하기
Cancel

[Assembly] 매크로 사용하기

매크로

어셈블리에서 매크로는 타 프로그래밍 언어에서 사용하는 매크로와 의미가 같다.
어셈블리 언어의 코드 블럭에 이름을 붙여 필요할 때마다 불러서 사용하는 개념이다.

✔️ 매크로 정의하기

매크로의 시작과 끝에 %macro, %endmacro 선언
매크로 이름매개변수 선언

✔️ 사용 예시

1
2
3
%macro CLEARXMMREG 1 ; clear one xmm register
xor xmm%1, xmm%1
%endmacro

위 매크로를 간단하게 설명하자면, xor 연산을 이용해서 xmm(MultiMedia eXtensions) 레지스터를 초기화 시키는 매크로이다.

매크로 이름 CLEARXMMREG 뒤에 정의한 매개변수 1은 한 개의 매개변수를 사용하겠다는 것을 의미한다.
컴파일러는 컴파일 시에 %1 자리에 입력한 매개변수 값을 넣어 코드를 재구성한다.

위에서 정의한 매크로는 다음과 같이 사용할 수 있다.

1
CLEARXMMREG 2

이 경우 매크로 내용에 매개변수 2가 들어가며 코드는 아래와 같이 구성된다.

1
xor xmm2, xmm2

✔️ 더 많은 매개변수를 가지는 매크로

매크로는 더 많은 수의 매개변수를 가질 수 있다.
두 개의 매개변수를 가지는 매크로를 예로 들어보고자 한다.

1
2
3
4
5
%macro read_perf_counter 2
mov rcx, %1
rdpmc
combine_rax_rdx(%2)
%endmacro

매크로 이름 read_perf_counter과 사용할 매개변수 개수 2 를 정의하였다.
매개변수를 입력하면 입력한 순서대로 %1, %2이 해당 값으로 대체된다.

사용 예제이다.

1
read_perf_counter counter_core_cyc, r12

두 개의 매개변수 counter_core_cyc, r12 를 입력했다.
컴파일 시 컴파일러가 %1counter_core_cye로, %2r12로 치환할 것이다.

1
2
3
mov rcx, counter_core_cyc
rdpmc
combine_rax_rdx(**r12**)



어셈블리 코드를 보는 게 생각보다 어렵다. 문법 하나하나 알아가다 보면 언젠간 c코드처럼 읽을 수 있겠지ㅠ!

This post is licensed under CC BY 4.0 by the author.

Contents

[Linux] 오류 메시지 출력 함수: perror()

[Operating Systems] Priority Inversion