我正在尝试学习一些汇编编程。我遇到了这段代码。在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:
~
答案 0 :(得分:3)
它是2次幂对齐,例如,ALIGN(4)
用于16字节对齐,ALIGN(5)
用于32字节等。0x90
指定NOPs
的操作码3}}指令 - 用作填充指令以实现对齐。
有更长的指令序列也有效{{1}}。许多汇编程序支持更灵活的NOP
指令;例如,所有最近基于GNU的汇编程序。