2013-08-23 2 views
1

일부 어셈블리 프로그래밍을 배우려고합니다.이 코드를 발견했습니다. 매크로가 asm 파일에서 사용되었습니다. 그러나이 코드가 실제로 무엇을 의미하는지 이해할 수 없습니까? ..align (5) 및 0x90을 사용하여 .align 지시어를 올바르게 사용합니다.

#define ALIGN(log) .align(log) ,0x90; 

0x90은 무엇을 의미합니까? 나는 ALIGN 이유 assembly.and하는 것은 매우 새로운 오전 (5) 대신 일반 ALIGN의 사용 (4) 또는 ALIGN (8)

#if defined(__APPLE__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) 
# define ALIGN_LOG 
#endif 

#ifdef ALIGN_LOG 
# define ALIGN(log) .align (log), 0x90; 
#else 
# define ALIGN(log) .align 1 << (log), 0x90; 
#endif 

#define ENTRY(name)  \ 
    ALIGN(5);    \ 
    .globl name;   \ 
    .globl _##name;  \ 
    name: ;    \ 
    _##name: 
~        

답변

3

그것은 16 바이트의 전력의-2 정렬, 예를 들어, ALIGN(4)입니다 정렬, 32 바이트 용 ALIGN(5) 등이 있습니다. 0x90NOP 명령어의 opcode를 지정합니다. 정렬을 수행하기위한 패딩 명령어로 사용됩니다.

더 효과적인 명령 시퀀스도 있습니다. NOPs. 많은 어셈블러가보다 유연한 .p2align 지시문을 지원합니다. 최근의 모든 GNU 기반 어셈블러.