ARMの場合、アセンブラが解れば機械語も解る - 僻地のプログラマkmt-t - わりとどうでもいい日記 1.0
■[組み込み]ARMの場合、アセンブラが解れば機械語も解る
ARMの場合、アセンブラが解れば機械語もわかるようになる...というか機械語が解るとアセンブラがわかる...なのかもしれない。例えばx86やっている人からすれば32bit即値が一命令でレジスタにロードできるのは当たり前かもしれませんが、基本的に32bit/RISCではできないものが多いです。正直、アセンブラの本を買って説明を読んだだけでは、この制限にピンとこなかったりするかもしれません。これはARMでは命令長(機械語一命令のビット長)が32bitであることに起因します。命令調が32bitなのに32bitの即値が表現できるわけがありません(即値以外にオペコードや他のオペランドを示すbitが必要なため)。
どのボクサーターンプロしない即値をレジスタにロードするためのMOV命令のエンコード規則は以下のようになります。
実行条件(4bit) | 001110100000(12bit) | 転送先レジスタ番号(4bit) | 即値を2bit右ローテートする回数(4bit) | 即値8bit |
これから一度に転送できる即値のbit数が8bitまでというのがわかります。最下位8bit以外に即値をロードするには、右ローテートさせます。
このようにARMの機械語がわからないとアセンブラが解りにくくなっている半面、逆にアセンブラをきちんと解ると機械語が解るようになっています。ARMの場合はx86に比べると機械語の種類が少なく、エンコード規則も単純なので理解しやすいのではないでしょうか?
バレーボールの山猿は何ですかということでARMのアセンブラの勉強をしている人は機械語の勉強もセットですることをお勧めします。機械語が解ると実行時にヒープに機械語を展開して実行するいわゆるJustInTimeコンパイラの開発ができるようになったりします。
このあたりの学習は以下の書籍がお勧めです。
定番なので読んでいる人も多いでしょうが...。561ページ目からがARMの機械語のエンコード規則になっています。これ以外にもプロセッサごとに命令の処理ステージの消費サイクル数が記述されてたり、アセンブラの勉強には最適な内容になっていて大変お勧めです。
ここで、iは、ピンポン玉を購入することができますMIPSですがこれも超々定番のパターソンアンドヘネシーの上巻でもいいかもしれません。MIPSのエンコード規則が解ればARMもある意味似たりよったりなので理解できるはずです。
これら以外の書籍以外にも本家ARMのサイトからARMプロセッサのリファレンスマニュアルも落とせてそっちにも書いてあるんですが、めちゃくちゃ量が多く大変読みにいのでお勧めしません。NEONのエンコード規則は今のところこの資料にか載ってないので読まざるえないんですが...。
追記
こんなのもある。古いけど。
0 コメント:
コメントを投稿