ニッシー
1990年生まれ
血液型 O型

こんにちは。ITブログアルケーナム管理人のニッシーです。

詳細プロフィールへ

お問い合わせへ






2019-01-10

CASL2でフラグレジスタを変化させる命令の種類







基本情報技術者の午後試験をCASL2で受けようと思っている方の中には、フラグレジスタの動きについてイマイチ理解し難いと感じている方も多いのではないでしょうか?


CASL2では、命令によってフラグレジスタを変化さえるものそうでないものの2種類が存在しています。


今回はそれについて見てみたいと思います。














フラグレジスタを変化させる 命令一覧



以下に示す命令が、フラグレジスタの内容を変化せせる命令郡です。


実は、フラグレジスタの変化は、比較命令を除いた何らかの計算処理する命令のときだけに起こります。


これは、COMET2のハードウェアにおいてフラグレジスタが算術論理演算装置(ALU)に付属していることに関係しています。





【加算・減算命令】
算術加算
論理加算
算術減算
論理減算
ADDA
ADDL
SUBA
SUBL



【シフト演算命令】
算術左シフト
算術右シフト
論理左シフト
論理右シフト
SLA
SRA
SLL
SRL



【論理演算命令】
論理積
論理和
排他的論理和
AND
OR
XOR



【比較命令】
算術比較
論理比較
CPA
CPL





フラグレジスタを変化させない 命令一覧



以下の命令を実行した場合は、フラグレジスタの状態を変化させません。


【データ転送命令】
ロード
ロードアドレス
ストア
LD
LAD
ST



【分岐命令】
正分岐
負分岐
零分岐
JPL
JMI
JZE
非零分岐
オーバーフロー分岐
無条件分岐
JNZ
JOV
JUMP



【アセンブラ命令】
開始
終了
定数定義
容量定義
START
END
DC
DS



【マクロ命令】
入力
出力
IN
OUT



【スタック用の命令】
プッシュ
Rプッシュ
ポップ
Rポップ
PUSH
RPUSH
POP
RPOP



【その他の命令】
サブルーチン呼出
リターン
スーパーバイザーコール
ノーオペレーション
CALL
RET
SVC
NOP











フラグレジスタは 分岐命令 を使うときだけ気にすればOK



実は、フラグレジスタの内容を意識するタイミングというのは分岐命令を使用するときだけになります。


したがって、使用する命令が、フラグレジスタを変化させるか否かを把握しておくことが必要になります。


よく勘違いしてしまう例で以下のような場合があるので、見てみましょう。



同じ意味の命令でもフラグレジスタによって違う動きになってしまう



同じ意味の命令というのは、例えば...


  • SUBA GR1, =1 (SUBL GR1, =1)
  • LAD GR1, -1, GR1


のように、計算結果が同じになるような命令のことです。


この二つの命令は共にGR1の値をデクリメント( -1)する意味の記述です。





しかし、SUBA命令とLAD命令ではフラグレジスタに影響を与えるか否かの違いがあることに気づかない場合があります。


以下の例1、例2はどちらもGR11という値が格納されているものとして見てみます。



例1:SUBA命令での分岐


LP SUBA GR1, =1 
  JNZ LP 



例2:LAD命令での分岐


LP LAD GR1, -1, GR1 
  JNZ LP 



例1のSUBA命令による減算の場合、フラグレジスタが変化するので、JNZ命令で分岐せずに処理が終了します。


しかし、


例2のLAD命令による減算の場合、フラグレジスタを変化させることはできないので、JNZ命令が機能し続け無限にループしてしまいます。





このように、CASL2では記述の仕方は異なっても、同じ意味になる命令が存在します。


しかし、フラグレジスタの仕様の関係で違う動作をすることがあるため、同じ意味になるとはいえ命令を使用する際は注意してください。





最後に



フラグレジスタの動作と命令の関係について見てみました。


本番の試験でもフラグレジスタの動作を心得ているかを試されるので、フラグが変化する命令とそうでないものを覚えておくといいと思います。


それでは、続きはまた次回にご期待を!














プロフィール

ニッシー
1990年生まれ
血液型 O型

こんにちは。ITブログアルケーナム管理人のニッシーです。

詳細プロフィールへ

お問い合わせへ