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
---------------------------
No.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は考えません。
No.4
- 回答日時:
単に変数に値を設定しているだけって考えればいいと思う。
A、B、Cそれぞれの変数に同じ値を設定したって、何も困ることはないでしょ?
ラベルだとしても同様。
例えば同じアドレスにSubA、SubBって2つのラベルを割り当てたとして、
call SubAもcall SubBもまったく同じ処理をするけど、それで困ることはない。
人間(プログラマ)がそれを把握しておけばいいだけのことです。
jmp命令と、jp命令と、br命令がまったく同じ動作をするのも同様。
同じ命令コードが割り当てられているだけなのでCPUからすれば違いはなく、区別するのはプログラマです。
この回答への補足
すみませんねぇ、お手間かけますよ、、、みなさんのおかげでだいぶイメージがとれてきたような気がします。
アドレス空間ということをいいますけど、何かの変数を宣言しておいて、その変数のためのアドレス空間を作った、というような意味と同じ??
No.3
- 回答日時:
「PIC が」という観点でいくなら
そもそも PIC は「TMR0」や「STATUS_C_POSN」なんてものを知らない
としか言いようがない.
PIC にとって「TMR0」や「STATUS_C_POSN」なんてものはなく, ただ「0」とか「1」とかの数字があるにすぎない. ただ, そうすると人間にとって困るかもしれない (単に「0」と書いてあって, 意味を理解できますか?) ので, そ~いうひとのために「TMR0」とか「STATUS_C_POSN」とかの名前を付けているだけ.
No.2
- 回答日時:
ラベル equ 数値
これは、ラベルに数値を設定(定義)するものでアドレスとは限らない。
アドレス、データ、ビット位置、データインデックスなど何を意味する数値なのかは、どういう意図を持って定義したかによります。
したがって、数値の重複はいくらでもありえます。
この回答への補足
そんなにたくさんの数値をInclude fileで決めておいて、それをIncludeしてきてもどれがどれだかわからなくなる(PICが)、ということは無いのですか?
うううーー、どこが理解できていないのでしょうか?
どこにしぼって読み直せばここが理解できるか?教えてくださいませんか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- 英語 SPECS の所の LENGTH というのは、BARREL LENGTH なのか?全体の長さなのか? 1 2022/04/27 20:05
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- JavaScript vertical sliderをautoplayしたい 2 2022/08/25 14:47
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- その他(年金) 企業型確定拠出年金(DC年金)について教えてください。 昨年からDC年金を初めて2年目になります。 4 2023/08/21 09:55
- JavaScript アップロードファイルの種類によって処理を分岐させたいのですが書き方が分からずアドバイスお願いします 4 2023/06/17 19:12
- バッテリー・充電器・電池 小型シール鉛蓄電池の放電後の電池電圧について教えてください。 5 2022/09/08 10:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
0xffffとは?
-
ビットシフトってどんな時使うの?
-
命令について
-
文字参照は10進数と16進数では...
-
符号無し整数xを右にnビット回転
-
エクセルVBAのIf,Then 構...
-
剰余の法が大きい場合のアルゴ...
-
コンピュータが処理できるビッ...
-
浮動小数点演算と固定小数点演...
-
if($a & $b) の意味
-
03分22秒36のような時間の単位...
-
アセンブリの論理演算命令のCPL...
-
浮動小数点数の内部表現につい...
-
整数除算の意味とは?
-
アルゴリズムの計算量とオーダ
-
アセンブリ言語の質問のコト
-
算術右シフトの結果が1/2になる...
-
シーケンサで時間計算
-
三菱PLCについて聞きたいです。...
-
ものづくりに向いているプログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
0xffffとは?
-
エクセルVBAのIf,Then 構...
-
8ビットのデータの、先頭ビット...
-
ビットシフトってどんな時使うの?
-
verilog 符号付加減算(最上位...
-
一般のソフトで画像を扱う場合...
-
符号無し整数xを右にnビット回転
-
文字参照は10進数と16進数では...
-
シーケンス制御についての質問...
-
BMP画像のネガを作成するプログ...
-
アクセス(2003)のVBAでビット...
-
03分22秒36のような時間の単位...
-
命令について
-
10進数(+-)→2進数への変換(2)
-
C言語で128bitの2進数のビット...
-
1の補数
-
ビット列を表示するプログラム
-
Python: 数値を反転させたい
-
ビットの取り出し方法
-
PS3に搭載されている"Cell"は、...
おすすめ情報