Armでのnopの扱い
Armにはnop
という「何もしない命令」が存在する。これは主に以下のような用途で使用される。
- 遅延処理
- 別の命令のダミー
- 命令のパディング
上記はあくまで一例であり、他にも用途は様々。 こんなnopだが、すべてのバージョンで同じようにnopを扱えるわけではない。
疑似命令として
従来のアセンブラではnopは疑似命令として扱われており、専用の命令が存在していなかった。ArmモードとThumbモードで扱いが異なり、以下のように変換される。
モード | 16進表現 | 意味 |
---|---|---|
Arm | 0xE1A00000 | mov r0, r0 |
Thumb | 0x46C0 | mov r8, r8 |
どちらも「同じレジスタに値をコピーする」という処理になるため、当然何も更新されない。
専用命令として
ArmにはARMv6Kから、ThumbにはARMv6T2から、「nop命令」というnop専用の命令が登場する。命令は以下の通り。
モード | 16進表現 |
---|---|
Arm | 0xE320F000 |
16-bit Thumb | 0xBF00 |
32-bit Thumb | 0x8000F3AF |
※対応バージョン以外では、これらの16進表現はnopの意味を成さないので注意。