1

私は asm と組み込みシステムの初心者です。「インダイレクション」レジスタを使用してメモリの場所をクリアするためのコードを見ていました(またはそのようなもの-よくわかりません)。コードは次のようになります。

    movlw 0x20
    movwf FSR
ループ clrf INDF
    incf FSR、F
    btfsc FSR、7
    ループに移動

私はその部分を理解していませんincf FSR, F。この命令incfは 2 つのオペランドを取ります。最初の場所で値をインクリメントし、2 番目の場所に結果を格納します。この場合F、インクリメントされた値があるのに、なぜテストを行うのFSRでしょうか?

4

3 に答える 3

2

F はファイル レジスタを意味し、コード d (宛先) 選択ビットです。d = 0: 結果を W に格納、d = 1: 結果をファイル レジスタ f に格納。デフォルトは d = 1 です。

コンパイラは次を理解する必要があります。

;Increment FSR byte and result store back to FSR
    incf FSR, F
    or
    incf FSR, 1
;Increment FSR byte and result store to W reg
    incf FSR, w
    or
    incf FSR, 0
于 2011-05-11T18:49:31.777 に答える
0

incf はインクリメント ファイル レジスタです。2 番目の引数は宛先で、レジスタ自体 (F) またはワーキング レジスタ (W) のいずれかであり、実際にはフラグです。PIC 命令はファイル レジスタ アドレスを 1 つしか持つことができないため、命令内の唯一のレジスタである FSR をインクリメントします。レジスターFなんてものはありません。

使用している PIC の命令セットのリファレンスをよく読んでください。

于 2011-05-11T17:24:34.413 に答える