.align指令正确用于.align(5)和0x90

时间:2013-08-23 23:01:00

标签: assembly macros preprocessor

我正在尝试学习一些汇编编程。我遇到了这段代码。在asm文件中使用的宏ENTRY。但我无法理解这段代码实际意味着什么?。

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

0x90是什么意思?我是装配新手。为什么ALIGN(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:
~                            

1 个答案:

答案 0 :(得分:3)

它是2次幂对齐,例如,ALIGN(4)用于16字节对齐,ALIGN(5)用于32字节等。0x90指定NOPs的操作码3}}指令 - 用作填充指令以实现对齐。

有更长的指令序列也有效{{1}}。许多汇编程序支持更灵活的NOP指令;例如,所有最近基于GNU的汇编程序。