
前回に続き、A64の論理演算命令群、AND一族の2回目です。今回は演算結果をフラグに反映する「S」のついた命令どもをエクササイズしてみます。またands命令の「エイリアス」、tst命令についてもそのコード生成確認とともに練習してみます。Arm64ビットのクセに慣れればこれはこれでらくちん。
デバイス作る人>>デバイス使う人>>デバイスおたく
前回に続き、A64の論理演算命令群、AND一族の2回目です。今回は演算結果をフラグに反映する「S」のついた命令どもをエクササイズしてみます。またands命令の「エイリアス」、tst命令についてもそのコード生成確認とともに練習してみます。Arm64ビットのクセに慣れればこれはこれでらくちん。
前回ようやく終わったadd系(足し算)の次はsub系(引き算)かというと似たことを繰り返しても仕方ないなと思いました。そこで算術演算命令の中で「微妙な」cmp系へ行きたいと思います。RISCあるあるの「実はcmp命令なんて無い」というオチの命令群です。勿論ちゃんと動作します。裏ではsub系命令が暗躍?していますぞ。
前回はArmの64ビット命令の即値Addを眺めてみました。それだけでも4形式の命令があったのですが、前回作成した命令表には、まったく同等な加算動作を行う命令Addsが隣に並んでいます。整数加算することはAddと同じですが、副作用、フラグを立てたり下ろしたりする、ということのみが違う命令です。なお演習はスマホ上です。
前々回、デフォルトでインストール済であったlldb (LLVM系?のデバッガ)を使ってみましたが、アセンブラレベルの表示がちょいと思うような感じと違っておりました。gdbとほぼほぼ互換とはいいつつも違うところはあるみたいです。そこで本家gdbをインストールし、TUIモードで動作させてみました。この感じかね。
前回スマホ上でアセンブラとデバッガを動かし、ARM64(AArch64)のレジスタなど眺めてみました。ARM64はARM32と大分様子が違うので主要なレジスタだけでも一覧しておくべしと図を作り始めてハマリました。調べて図を描いているだけで時間がたちます。レジスタ多すぎ?