さとまも談義|テクノロジーと体験とアートと

テクノロジーとビジネスと人の関係性にずっと興味があります。アートやダイバーシティのキーワードも含めて、世界がどう変わっていくか、変えていけるかをお酒を飲みつつ考えるブログ

IBM Assemblerを学ぶ その1

珍しくシリーズもので書いてみたいと思います。

このご時世ではありますが、書かなくちゃいけないことになったアセンブラ言語!

せっかく勉強せざるを得ない状況に追い込まれているので、ブログで連載しつつ、
継続的な学習に繋げていきたいと思います。

アセンブラ言語はハードウェアのアーキテクチャに依存するので、
大まかな書き方こそあるものの、命令からしてコンピューターごとに異なってきます。
コンピューターが異なれば、また全然勝手が違うという、スキル横展開困難なところが…

逆に渋い

ですよね(笑)

今回の場合は、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 桁あふれ


比較演算の場合は以下のようになる。

条件コード 比較結果
0 等しい
1 第1オペランドが小さい
2 第1オペランドが大きい

第1回 総括

あまりにぐちゃぐちゃ過ぎて、総括できませんでした(笑)

こんな感じで、しばらくは混沌と進みたいと思います。
読んでいる方がいたら、ご容赦ください…。


また、情報提供、問い合わせなどありましたら、勉強になりますので、ぜひご連絡ください。

*1:ちなみに、IBMはマニュアルを公開しているため、秘匿情報(Confidential)ではありません。
念のため。

*2:基本命令形の各内容は以前に学習したため、ここでは記述しない

*3:機械語で会話できるくらいになる必要があるのかと思っていたので…。

*4:ハーフワードは2バイト