プロが教える店舗&オフィスのセキュリティ対策術

PICのプログラムを学んでおります。
Include fileの中の「pic16f84a.inc」を見ると、下記のように「Label」に対応するアドレスが重複しているものがあります。
ある特定の「Label」には特定のアドレスが一つ与えられるのだとばかり理解していたので、このように重複していて、さっぱり混乱しています。

これはどのように理解したらよいのでしょうか?
よろしくお願いいたします。

--------------------
// Register: TMR0

TMR0 equ 0001h

// Register: PCL
PCL equ 0002h

// Register: STATUS
STATUS equ 0003h
// bitfield definitions
STATUS_C_POSN equ 0000h

STATUS_C_POSITION equ 0000h

STATUS_C_SIZE equ 0001h

STATUS_C_LENGTH equ 0001h

STATUS_C_MASK equ 0001h

STATUS_DC_POSN equ 0001h

STATUS_DC_POSITION equ 0001h

STATUS_DC_SIZE equ 0001h

STATUS_DC_LENGTH equ 0001h

STATUS_DC_MASK equ 0002h

STATUS_Z_POSN equ 0002h

STATUS_Z_POSITION equ 0002h

STATUS_Z_SIZE equ 0001h

STATUS_Z_LENGTH equ 0001h
---------------------------

A 回答 (5件)

PICに詳しくはないですが、資料をざっと見る限り、これらは、只の定数と思われます。


C言語風に書くなら
f = (STATUS >> STATUS_Z_POSITION ) & STATUS_Z_MASK
として、STATUSレジスタから、特定のフラグを0ビット目にシフトして、不要なビットを0にする、やるための定数です。


こういうマクロを記憶しているのは、アセンブラです。
アセンブリする際には、ソースコードの該当箇所を、数値に変換します
f = (STATUS >> STATUS_Z_POSITION ) & STATUS_Z_MASK
だったら
f = (STATUS >> 0002h ) & 0001h

0001hが、元がSTATUS_Z_MASKだったのかSTATUS_C_MASKだったのか、などと、CPUは考えません。
    • good
    • 0
この回答へのお礼

おかげさまでおとといより理解がだいぶましになりました。
ありがとうございました。

お礼日時:2013/09/07 00:47

単に変数に値を設定しているだけって考えればいいと思う。


A、B、Cそれぞれの変数に同じ値を設定したって、何も困ることはないでしょ?

ラベルだとしても同様。
例えば同じアドレスにSubA、SubBって2つのラベルを割り当てたとして、
call SubAもcall SubBもまったく同じ処理をするけど、それで困ることはない。
人間(プログラマ)がそれを把握しておけばいいだけのことです。

jmp命令と、jp命令と、br命令がまったく同じ動作をするのも同様。
同じ命令コードが割り当てられているだけなのでCPUからすれば違いはなく、区別するのはプログラマです。

この回答への補足

すみませんねぇ、お手間かけますよ、、、みなさんのおかげでだいぶイメージがとれてきたような気がします。
アドレス空間ということをいいますけど、何かの変数を宣言しておいて、その変数のためのアドレス空間を作った、というような意味と同じ??

補足日時:2013/09/06 16:58
    • good
    • 0
この回答へのお礼

おかげさまです。ありがとうございました。

お礼日時:2013/09/07 00:48

「PIC が」という観点でいくなら


そもそも PIC は「TMR0」や「STATUS_C_POSN」なんてものを知らない
としか言いようがない.

PIC にとって「TMR0」や「STATUS_C_POSN」なんてものはなく, ただ「0」とか「1」とかの数字があるにすぎない. ただ, そうすると人間にとって困るかもしれない (単に「0」と書いてあって, 意味を理解できますか?) ので, そ~いうひとのために「TMR0」とか「STATUS_C_POSN」とかの名前を付けているだけ.

この回答への補足

わざわざご回答いただいたのに、ちょっと意味がわかりません。もう少しわかるようにお願いできませんかねぇ、、、

補足日時:2013/09/06 12:12
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2013/09/07 00:48

ラベル equ 数値



これは、ラベルに数値を設定(定義)するものでアドレスとは限らない。
アドレス、データ、ビット位置、データインデックスなど何を意味する数値なのかは、どういう意図を持って定義したかによります。
したがって、数値の重複はいくらでもありえます。

この回答への補足

そんなにたくさんの数値をInclude fileで決めておいて、それをIncludeしてきてもどれがどれだかわからなくなる(PICが)、ということは無いのですか?
うううーー、どこが理解できていないのでしょうか?
どこにしぼって読み直せばここが理解できるか?教えてくださいませんか。

補足日時:2013/09/06 07:42
    • good
    • 0
この回答へのお礼

おかげさまです。ありがとうございました。

お礼日時:2013/09/07 00:48

?



ある特定の「Label」には特定のアドレスが一つ与えられる
という点では, 何も困るところはないと思うが?

そもそも「アドレス」じゃないだろうけど.

この回答への補足

ご教示いただいたフレーズが私の理解には短すぎてわかりにくいです。
「そもそも「アドレス」じゃない」のですか?
いったいどこにフォーカスして学べばここがわかるのか???わかりません。

補足日時:2013/09/06 07:37
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!