1

我正在尝试学习一些汇编编程。我遇到了这段代码。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:
~                            
4

1 回答 1

3

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

有更长的指令序列也是有效的NOPs。许多汇编器支持更灵活的.p2align指令;例如,所有最近的基于 GNU 的汇编器。

于 2013-08-24T02:00:21.817 回答