1

アセンブリ プログラミングを学習しようとしています。このコードに出くわしました。asm ファイルでマクロ ENTRY が使用されています。しかし、このコードが実際に何を意味するのか理解できません。

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

0x90 とはどういう意味ですか? 私はアセンブリにまったく慣れていません.そして、なぜ典型的なALIGN(4)またはALIGN(8)の代わりにALIGN(5)が使用されるのですか

#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 に答える