ANEWSMENT

ANEWSMENT
●システム機器統括事業部
●平成 13年
2月
1日発行
CS1
インデックスレジスタを使いこなそう(5)
いままで4回にわたって、インデックスレジスタを使った回路事例を
紹介してまいりましたが、どうも基本的な事柄がよく分からない
どうも基本的な事柄がよく分からないとい
どうも基本的な事柄がよく分からない
うお声があるようですので、今回は、インデックスレジスタ処理の原
点に戻って、アドレス修飾
アドレス修飾の考え方と技法について整理してみました。
アドレス修飾
Ⅰ.アドレス修飾とは?
インデックスレジスタの使い方を知るうえで避けて通れないのがアドレス修飾(
アドレス修飾(Address
アドレス修飾(Address Modification)
Modification)
の考え方です。アドレス修飾の手法は、もともと、コンピュータのプログラミング技法のひとつとして発
展してきたものですが、PLCの世界に於いても四則演算処理やデータのテーブル処理が一般化するにつ
れて、命令セットの一環として組み込まれてきたものです。
ここでは、アドレス修飾の意味を理解するために、図1のように、<5×3×2×4>という乗算処理を
例に考えてみましょう。
最終的な姿
< 図1>
5×3×2×4=?の計算方法
1回目の演算命令
2回目の演算命令
3回目の演算命令
*B(BCD 乗算)
*B(BCD 乗算)
*B(BCD 乗算)
A番地 (5)
×B番地 (3)
Z番地(15)
5 × 3 = 15
Z番地(15)
×C番地 (2)
Z番地(30)
15 × 2 = 30
Z番地 (30)
×D番地
(4)
Z番地(120)
30 × 4 = 120
A番地
B番地
C番地
D番地
Z番地
5
3
2
4
120
5×3×2×4の乗算処理は、<図1>のように掛け算を3回行うことによって、Z番地に120
という答が得られる訳ですが、上の例のように乗算の回数が3回程度ですと、命令の数もたかが知
れていますが、これが10回、15回となりますと<*B命令>が乗算の回数分だけズラ∼ッと並
んでしまうことになります。
可変アドレス
■アドレス修飾の技法とは、プログラム・コンパクト化の技法と見つけたり!
B 番地→C 番地
<図1> の演算処理プログラムの構造をヨ∼ク見つめている
と分かることなのですが、1回目だけは“A×B=Z”となっ
→D 番地と変化する
ていますが、2回目、3回目は、“Z×C=Z”、“Z×D=
Z”のように、「乗数」のエリアだけがC番地、D番地と変化
Z番地 × → Z番地
しているだけで、「被乗数」も「積」もZ番地と、参照アドレ
スが固定していることに気づきます。そこで、上記プログラム
被乗数
乗数
積
の「乗数」の部分だけを変数扱いにして次頁<図2>のように
繰り返しループ形のプログラムを組んでみました。
固定アドレス
固定アドレス
ANEWSMENT
●システム機器統括事業部
●平成 13年
2月
1日発行
< 図2>“アドレス修飾の技法”で参照番地を<変数>として処理する
A番地(5)
ワークエリア/Z 番地に
→ Z番地(5)
A 番地の内容・
A+0番地
A+1番地
A+2番地 A+3番地 5
3
2
4
5 を転送する
Z番地
(Z番地)
×(A+n番地)
→ (Z番地)
NO
3回完了か?
YES
NEXT
ワーク エ リア
n: 1 → 2 → 3
<乗算処理>
Z番地
1回目 5
A+n番地 Z番地 × 3(A+1番地) =
15
2回目
15
× 2(A+2番地) = 30
3回目
30
× 4(A+3番地) =
120
ループ処理の結果として、Z番地に
乗算結果の120が残る!
<図1>と<図2>の違いがお分かりでしょうか。<図1>は、B番地、C番地、D番地と連続した
アドレスに格納されている<乗数データ>を取り出すのに、都度、命令語によって、B番地、C番地、
D番地といった絶対アドレス
絶対アドレスで指定しています。
絶対アドレス
これに対して、<図2>のメモリへのアクセス方法は、
基点
図3のように、A番地を基点
基点にして、A番地からどれだけ
基点
離れているかという相対アドレス
相対アドレスによって指定するものです。
相対アドレス
A 番地
A+1番地
A+2番地 A+3番地 5
3
2
4
そして、この基点
基点となるアドレスからどれだけ離れているか
基点
を示す値を変位
変位と
変位 いいます。
変位
<図1>のA番地とB番地の変位は1、A番地とC番地の変位
は2ということになり、図3のように、B番地のことをA+1番地、
図3.アドレス修飾の考え方
C番地のことをA+2番地と表現することができます。
このように、ある基点
基点となるアドレスを定め、そこからの変位
変位で処理の対象となるメモリ番地を指定
基点
変位
することをアドレス修飾
アドレス修飾といいます。そして、変位量を示すパラメータのことをオフセット
オフセットと呼んでいる
アドレス修飾
オフセット
のです。また、このようなアドレス修飾
アドレス修飾の技法は、通常、<図2>の
FOR∼NENT 文のようなループ回路
アドレス修飾
と組み合わせて使用されます。
以上、コンピュータのソフトウェア技術の世界で古くから用いられてきたアドレス修飾
アドレス修飾の考え方につい
アドレス修飾
て説明してまいりましたが、次章では、CS1で使用されているアドレス修飾の技法
アドレス修飾の技法について、前述の
アドレス修飾の技法
「基点」と「変位」
「基点」 「変位」という2つの観点から説明させていただきます。
「変位」
ANEWSMENT
●システム機器統括事業部
●平成 13年
2月
1日発行
Ⅱ.CS1におけるアドレス修飾の技法
∼インデックスレジスタとデータレジスタの使い方∼
インデックスレジスタ(
データレジスタ(DR0
CS1 には、インデックスレジスタ
インデックスレジスタ(IR0∼
データレジスタ(DR0∼
IR0∼IR15)
IR15)とデータレジスタ(
DR0∼DR15)
DR15)というアドレス
修飾のためのレジスタがあります。
1.アドレスの基点を設定する / MOVR と MOVRW
基点設定の 種類
命令語(ニモニッ
ク) シ
ン ボ ル
チャネル番号の 基点設定 MOVR
MOVR
0020
IR0
動 作 説 明
0020CHの I/Oメモリ実効アドレス をイ ンデック ス レジ ス タ
/IR0に 格納します
* 0020CHの I/Oメモリ実効アドレス (*1):
0C014
IR0 0000C014
リレー番号の 基点設定 MOVR
MOVR
0000.13
IR0
0000CH・13BITの I/Oメモリ実効アドレス をイ ンデック ス レジ ス タ /I
R0に 格納します
* 0000CH・
13BITの I/Oメモリ実効アドレス : 0C000D
IR0 000C000D
タイマ / カウンタ番号の
基点設定
現在値エ リアの
・
基点設定
MOVRW
MOVRW
TIM0000の 現在値エ リアの I/Oメモリ実効アドレス をイ ンデッ
ク ス レジ ス タ /IR0に 格納します 。
T0000
IR0
* TIM0000の 現在値エリアの I/Oメモリ実効アドレス :0E000
IR0
同 上
同 上
・
タ イ ムアップフラグ
MOVR
0000E000
MOVR
TIM0000の タイムアッ
プ
フラグ
の I/Oメモリ実効アドレス をイ ンデッ
カ ウ ントアップフラグ
T0000
ク ス レジ ス タ /IR0に 格納
IR0
の 基点設定
* TIM0000の タイムアップ
フラク
の I/Oメ
モリ
実効アド
レス:0BE000
IR0
(*1)
000BE000
I/O メモリ実効アドレスとは?
入出力リレー、内部補助リレー、DM エリア、タイマ現在値等々、すべての I/O メモリエリアに
おける連続アドレスのことで、MOVR 命令もしくは MOVRW 命令でインデックスレジスタにチャ
ネル番号あるいはリレー番号を設定した時、そのレジスタに格納される内部コードのことを I/O
メモリ実効アドレスといいます。あくまで、内部処理用のコードですからラダープログラムで直接
メモリ実効アドレス
指定することは避けるようにしてください。
(註)I/O
「アドレス修飾」の項をお読みいただけば、お分か
I/O メモリ実効アドレスの意味は、次の「アドレス修飾」
メモリ実効アドレス
「アドレス修飾」
りいただけると思いますが、ここでは、MOVR 命令もしくは MOVRW 命令を実行した時、
インデックスレジスタに格納されるアドレス情報であるとだけ理解しておいてください。
ANEWSMENT
●システム機器統括事業部
●平成 13年
2月
1日発行
2.アドレス修飾の技法
前節では、MOVR
MOVRやMOVRW命令
基点をインデックスレジスタに
MOVR MOVRW命令を使って、メモリ・アドレスの基点
MOVRW命令
基点
設定する方法についてお話ししましたが、ここでは、そこで設定されたアドレスの基点
アドレスの基点にオフセット値
アドレスの基点 オフセット値
を加減算して、アドレス修飾(
アドレス修飾(Address
Modification)を行う方法について説明いたします。
アドレス修飾(Address Modification)
メモリ・アドレスの基点
+/−
=
オフセット値
MOVR や MOVRW 命令で
命令
参照アドレス
この章で勉強します!
変位量
インデックスレジスタに
アドレス修飾
アドレスの基点を設定します
アドレスの基点
2−1.インデックスレジスタ番号を指定することによって、メモリ・アドレスを
2−1.インデックスレジスタ番号を指定することによって、メモリ・アドレスを
オフセットなしで間接的に指定する
オフセットなし
で間接的に指定する < ,IR□
,IR□ >
“
,”
IR□に格納されている
I/O メモリ実効
IR□
IR□
,,IR□
を
アドレスが示すチャネル
チャネルまたはリレー番号
リレー番号
アドレス
チャネル
忘れないでネッ!
□: 0∼
0∼15 までの数字
を指定します
オフセットなし
,IR□は、オフセットなし
IR□
間接指定とも呼ばれています
間接指定
MOVR と,IR□の関係について
,IR□の関係について
アドレスの基点を設定するMOVR命令と
メモリ・アドレスの間接指定 ,IR□の関係
,IR□の関係
についてまとめてみました!
MOVR
D00000
IR0
D00000(の I/O
MOVR
メモリ実効アドレス)
0000.13
IR1
を IR0 にセット
,IR1
MOV
#0000
,IR0
(の I/O メモリ実効ア
ドレス)を
を IR1 に
セット
(IR0 が指し示す)
D00000 に
定数 0000 を転送
MOV
#0000
非常に重要です!
非常に重要です!
リレー番号/0000.13
0000.13
リレー番号/
D00000
IR1 が指し示すリレー番号/0000.13
が指し示すリレー番号/0000.13
をロードする
0000.13
ANEWSMENT
●システム機器統括事業部
●平成 13年
2月
1日発行
2−2.IR□の内容に“定数”を+/−
2−2.IR□の内容に“定数”を+/−する<定数オフセット指定>
IR□の内容に“定数”を+/−する<定数オフセット指定>
IR0 が指し示すアドレスに
+3 ,IR0
メモリ・アドレスの基点
+/−
MOVR/MOVRW
MOVR MOVRW 命令で
命令
+3します
定
数
=
参照アドレス
オフセット値(変位量)
アドレスの基点を
アドレスの基点 IR□に設定
回 路 例
リレー番号/0000.13
0000.13
リレー番号/
(の I/O メモリ実効アドレス)
D00010(の
I/O メモリ実効アドレス)を
を
D00010
IR0 にセット
を IR1 にセット
MOVR
0000.13
IR1
+5 ,IR1
MOVR
D00010
IR0
MOV
#0000
-3,IR0
IR0 が指し示す
IR1 が指し示すリレー番号/0000.13
が指し示すリレー番号/0000.13 に
+5 番地したリレー番号/0001.02
番地したリレー番号/0001.02 をロードする
0001.02
D00010 から−3番地
した D00007 に
定数 0000 を転送する
MOV
#0000
D00007
ANEWSMENT
●システム機器統括事業部
●平成 13年
2月
1日発行
2−3.IR□の内容にDR□の内容をプラスする<DRオフセット指定>
2−3.IR□の内容にDR□の内容をプラスする<DRオフセット指定>
IR0 が指し示すアドレスに
DR1 ,IR0
DR1 の内容をプラスします
オフセット値(変位量)
メモリ・アドレスの基点
+
DR□の内容
DR□の内容
=
参照アドレス
MOVR/MOVRW
MOVR MOVRW 命令で
命令
DR□には、あらかじめ MOV 命令等
アドレスの基点を
アドレスの基点 IR□に設定
で定数
定数を格納しておきます
定数
回 路 例
(註)DR0
定数0003が格納されているものとします。
DR0には、あらかじめ MOV 命令等で定数0003
定数0003
D00100(の
I/O
D00100
メモリ実効アドレス)を
を
I/O メモリ
リレ--番号/0001.05
0001.05
リレ
番号/0001.05(の
IR0 にセット
実効アドレス)を
を IR1 にセット
MOVR
D00100
MOVR
IR0
0001.05
IR1
DR0 ,IR1
MOV
#0000
DR0,IR0
IR0 が指し示す D00100 に DR0 の
IR1 が指し示すリレー番号/0001.05
が指し示すリレー番号/0001.05 に
内容 0003 をプラスした
をプラスした D00103 に
DR0 の内容 0003 をプラスして
定数 0000 を転送
リレー番号/0001.08
番号/0001.08 をロード
0001.08
MOV
#0000
D00103
ANEWSMENT
●システム機器統括事業部
●平成 13年
2月
1日発行
2−4.命令実行の直後に、
2−4.命令実行の直後に、IR
命令実行の直後に、IR□の内容を+1(または+2)する<オートインクリメント>
IR□の内容を+1(または+2)する<オートインクリメント>
,IR1+
命令実行の直後にIR1の内容 (*1) を+1します
IR1++
,,IR1++
命令実行の直後にIR1の内容 (*1) を+2します
(*1) I/O メモリ実効アドレス
MOVR
0001.05
IR1
,IR1++
リレー番号/0001.05(の
0001.05
LD 命令実行直後にリレー番号が
I/O メモリ実効アドレス)
を IR1
0001.05 から 0001.07 に更新され、
にセット
次の LD 命令の実行に備えます
LD 0001.05 を実行後、IR1 の示すアドレスを
0001.05
+2して 0001.07 にします
2−5.IR
2−5.IR□の内容を−1(または−2)してから命令を実行する<オートデクリメント>
IR□の内容を−1(または−2)してから命令を実行する<オートデクリメント>
,−IR2
IR2の内容 (*1) を−1してから命令を実行します
,−−IR2
IR2の内容 (*1) を−2してから命令を実行します
(*1) I/O メモリ実効アドレス
■ オートインクリメント/
MOVR
0001.05
IR1
,--IR1
リレー番号 0001.05
(の I/O メモリ実効アドレ
ス)を
を IR1 にセット
デクリメント制御の意味合い
CS1 に限らず、アドレス修飾の技法
アドレス修飾の技法とは、
アドレス修飾の技法
インデックスレジスタが指し示すアドレス
を如何にコントロールするか?に掛かって
います。オートインクリメント
オートインクリメントやデクリ
オートインクリメント デクリ
IR1 の示すリレー番号/0001.05
の示すリレー番号/0001.05 から2番地
を引いたリレー番号/
リレー番号/0001.03
を引いた
リレー番号/0001.03 をロード
0001.03
メントの技法は、本資料の2頁-図2でも
メント
述べたような FOR∼NEXT 等のループ回路
との併用により、参照アドレスの更新処理
参照アドレスの更新処理
(±1/±2)に重要な役割を果たしています。
ANEWSMENT
●システム機器統括事業部
●平成 13年
2月
1日発行
Ⅲ.まとめ
アドレス修飾の意味とCS1に於ける各種技法についてお分かりいただけましたでしょうか?
今回、学習した<アドレス修飾の考え方>は、建造物に例えると「基礎」とか「土台」の部分に相当すると
思います。そして、この土台のうえに、どのような建物を建てることができるかは、ひとえに皆様の応用力に
掛かっているように思いますし、そのような応用力を養っていただく為に、本シリーズの既刊分である(1)
∼(4)の「インデックスレジスタの応用事例」との併読をお勧めする次第です。
最後に、前章でご紹介した「アドレス修飾の技法」と「既刊資料」の掲載関係を<表1>にリストアップし
ておきましたので参考になさってください。
<表1> 各種技法の掲載リスト
掲 載 資 料
(1) (2) (3) (4)
MOVR
MOVRW
○
/
○
○
○
/
○
/
○
○
○
○
○
○
,IR□
,IR□ +
○
○
,IR□ ++
/
/
○
/
/
/
/
○
/
/
○
/
/
/
/
+1,IR□
,-IR□
DR□ ,IR□
(註)<表1>の補足説明
(1)∼(4)の数字は、本シリーズ<インデックス
<インデックス
レジスタを使いこなそう>のシリアル・ナンバーを
レジスタを使いこなそう>
示しています。
(○印: 掲載あり)
/
本シリーズ / 今後の予定
次回、もう一度、インデックスレジスタの基本仕様
インデックスレジスタの基本仕様に対して解説を加えたうえで、次々回以降
インデックスレジスタの基本仕様
から再び、インデックスレジスタの応用事例
インデックスレジスタの応用事例を掲載してまいりたいと思っております。
インデックスレジスタの応用事例
ご期待の程を・・・・。
《 お知らせ 》
インデックスレジスタに関するアプリ事例を募集しています!
“こんな回路があるのだが、インデックスレジスタを使用できないか?”といったような
こんな回路があるのだが、インデックスレジスタを使用できないか?
テーマがございましたら下記へご相談ください。急を要するもの以外でしたらどのような
ものでも受け付けております。