先週、啓二さんから自動販売機の中に入っているPLCの話 アドレッシングって何
を聞いた哲さん。自動販売機関係の仕事もやろうかと思い、
いろいろ調べてみた。PLCプログラムは、簡単に作成可能
とわかり、仕事にならないと諦めました。でも、PLCの話
で出たラダー言語が気になり、インターネットで調べている
と、GUIの環境で線を引っ張り、ラダー図を作成し、マイ
コンの機械語に変換するソフトを作れば、商売になるとニヤ
けていると、妻の瑞希さんに、怒られてしまいました。
慌ててロボを連れ、啓二さんの仕事部屋にやって来ました。
哲 :押忍。来たちゃったぜ。 啓二:どうした、慌てて。 哲 :儲け話を考えていて、ニヤけたらしいんだ。それで、 瑞希に怒られてしまった。いや、まいった。 啓二:何の儲け話を考えていたんだよ。 哲 :PLCのプログラム開発環境をGUIで作って売出せばってねえ。 啓二:お前、馬鹿か。そんなものPLC製造、販売企業でとっくの昔に 作って売っているよ。Windowsマシンで動く立派なのが。 哲 :ありゃ、もう作られているってか。 啓二:Windowsマシンよりも、自動販売機の台数の方が遥かに多いんだ。 それを放っておくわけないだろう。 哲 :それも、そうだな。で、今日は何の話だ。 啓二:アドレッシングの話だ。 哲 :ドレッシングだって。 啓二:違う、アドレッシング。 アセンブリ言語で、命令を書くときに、オペコードとオペランドが 必要だ。オペコードは、命令そのもの。そしてオペランドは、命令 が対象とする情報だ。 MOV A,#10 と、書くと、オペコードがMOV、オペランドがA,#10になる。 哲 :オペコードって、何かの略かな。 啓二:その通り。Operational Codeの略さ。オペコードとする。 哲 :で、A,#10の中に、アドレッシングは、入っているのか。 啓二:入っているよ。A,#10の中で、#10がイミーディエイトアドレッシングと 呼ぶ形態なんだ。 哲 :イミーディエイトって、immidiateか。直ちにとか、そんな意味だが。 啓二:その通り。10という値を、直ちに利用するから、イミーディエイト。 レジスタAには、数値の10が入るんだ。 アセンブラプログラムは、#があると、この後に続くアドレスを直ちに レジスタに複写する。 哲 :他に、どんなアドレッシング方法があるんだ。 啓二:相対、絶対、間接のアドレッシングがある。 相対は、プログラムカウンタの値を基準にして、2つ先とか4つ前の ように、アドレスを指定する方式。 絶対というのは、メモリにつけたアドレスをそのまま利用する方式。 間接は、レジスタペアに入っている値をアドレスとして、そのアドレスに 入っているデータを対象とする方式。 哲 :わかったような、わからないような。 啓二:用語は出したが、あまり気にしないで、実際に動くプログラムを作って みればよい。プログラムを作ってみると、違いなんて直ぐにわかる。 哲 :そうだと、いいんだが。 啓二:じゃあ、簡単な命令を書いて、図で説明してやるよ。 哲 :うん、頼むよ。 啓二:じゃあ、最もよく使うMOV命令で説明しよう。 MOV A,#10 MOV A,[HL] MOV A,B MOV B,A MOV A,!THR MOV HL,#THR この程度でいいかな。 哲 :まず、MOV A,#10は、レジスタAに10を入れることがわかった。 次に、MOV A,[HL]は、レジスタAにどんな値が入るんだ。 啓二:レジスタペアHLが指しているアドレスは、H、Lのレジスタの内容を 連結した1234hになる。だから、アドレス1234hの内容で56h がレジスタAに複写される。 哲 :hって、16進を意味するのか。 啓二:おっと、説明してなかったな。そうだ。他に2進のbがあるの アセンブラによっては、8進のqも許してくれることもある。 哲 :お次は、MOV A,Bだなあ。これは、レジスタアドレッシングとでも いうのかなあ。 啓二:そうだよ。 これは、レジスタBの内容をレジスタAに複写してしまう。 哲 :あのさ、この場合、レジスタAは転送先、レジスタBは転送元に なるんだよなあ。 啓二:そう。転送先、転送元をレジスタ、メモリのアドレス、メモリのアドレス で指定するデータなどに、どう割り振るかを決めて使うのかがアドレッシング とも言えるかな。 哲 :あっと、その説明の方がわかりすい。 啓二:そうか。人によって、理解できる表現は違うんだな。ま、それが個性だし。 哲 :MOV A,BとMOV B,Aは、動作は、同じじゃないのか。 啓二:そうさ。でも、命令によっては、転送先としてレジスタAのみという こともあるんだ。PDF形式のマニュアルを入手して、一覧表を見て その都度調べればいいだけだし、あまり深く考えないでいいよ。 アセンブラ動かせば、できるできないは教えてくれるし。 哲 :そうだよな。あまり、深く考えても、大事なことが見えないのでは 本末転倒だし。 啓二:そういうこと。残りを片づけてしまうか。 MOV A,!THR は、絶対アドレス指定だから、ラベルで指定したアドレスを利用して (この場合なら、100h番地)その内容をレジスタAに複写する。 MOVW HL,#THR は、イミディエイト指定だから、HLレジスタペアに、ラベルで指定 した値がそのまま入る。 哲 :アセンブリ言語に関連するアドレッシングも、図を描いて考えると よくわかるな。こんな図は、C言語のプログラムでも有用だな。 啓二:そういうこと。じゃあ、ここまでにしておくか。