珍しくシリーズもので書いてみたいと思います。
このご時世ではありますが、書かなくちゃいけないことになったアセンブラ言語!
せっかく勉強せざるを得ない状況に追い込まれているので、ブログで連載しつつ、
継続的な学習に繋げていきたいと思います。
アセンブラ言語はハードウェアのアーキテクチャに依存するので、
大まかな書き方こそあるものの、命令からしてコンピューターごとに異なってきます。
コンピューターが異なれば、また全然勝手が違うという、スキル横展開困難なところが…
逆に渋い
ですよね(笑)
今回の場合は、IBM System z(z/Architecture)で使用するアセンブラ言語ですね。*1
かちっとまとめようとすると、三日坊主になってしまうので、まずがメモ書きレベルから始めたいと思います。
最終的にまとまって俯瞰でき1ら、@IT エンジニアライフやこのブログ上で、公開する予定です。
それでは、第一回のメモ書き行ってみましょう〜。
【基本命令形】
IBMシステムには以下の6つの基本命令形式がある。
RR、RX、RS、SI、S、SS*2
これらは機会命令形式なので、コンピューターで直ちに実行できる形式である。
しかし、プログラミングする人は通常、この形式で直接コードは書かない。
言語翻訳プログラム(コンパイラーやインタプリターなどですね)が、最終的にこの形式に落とす、というわけ。
さすがのアセンブラ言語でも、ここからは書かないということで、ちょっと安心しました。*3
とはいえ、どんな言語でプログラムする上でも、基本命令形式について習熟しておくのは重要(と、書いてあるが、まだ実感はない)。
アセンブラーでプログラムを書くときには、簡略コード(Mnemonic)を使用する。
これは、命令の名前を簡略化したもので、例えばAdd Register(加算)はARなど。
OPコード(Operation Code)は機会命令形式の最初の1バイトに示される内容であるが、プログラマーが覚える必要はない。簡略コードを覚えましょう。
例えば、
AP D1(L1,B1),D2(L2,B2)
というふうにD、L、Bの各要素を命令ごとにプログラマーが明示することもできるが、煩雑なので普通はやらない。
通常はメモリーの必要な箇所にラベルを付けて指定する。
例えば、第1オペランドのデータをZAIKO、第2オペランドのデータをNYUKOとラベル付けしていれば、
AP ZAIKO,NYUKO
と書くことができる。
IBMメインフレームでは、プログラムの実行をPSW(Program Status Word)が制御している。
現PSWの命令アドレスフィールドに次に実行する命令が入っており、実行したら、自動的に次の命令へ移動する。命令の長さは2ビットの倍数(ハーフワードBound)になるので、2とか4とか(あるいは8とか)移動することになる。*4
ただし、ブランチ命令を受けることで、命令アドレスフィールドが、ブランチ先のアドレスに置き換えられる。命令結果やステータスに応じてブランチしたい場合があるので、条件ブランチ命令も用意されている。この場合、参照するステータスはPSWの条件コードに書かれている。
条件コードはPSWの18,19ビット目にあり、2ビットで状態を表す。この2ビットがどのような意味を持つかは、条件コードをセットした命令によって定義されることになる。中には条件コードをセットしない命令もある。
条件コードの例として、算術計算の場合は以下の状態を示す。
条件コード 演算結果
0 ゼロ
1 ゼロより小(負)
2 ゼロより大(正)
3 桁あふれ
比較演算の場合は以下のようになる。
第1回 総括
あまりにぐちゃぐちゃ過ぎて、総括できませんでした(笑)
こんな感じで、しばらくは混沌と進みたいと思います。
読んでいる方がいたら、ご容赦ください…。
また、情報提供、問い合わせなどありましたら、勉強になりますので、ぜひご連絡ください。