2016-12-21 6 views
0

stm8sf103マイクロコントローラ用のアセンブリ言語でプログラムを書き込もうとしています。 私はラム・レジスタ($など0)で即座に16進数の値を保存したいと思いますが、なぜこれが動作していないと私は疑問に思って:STM8SF103アセンブリ - RAMレジスタに即値をロード

as1 : Error 54: Can't match Addressing mode ' ld $0,#5'

stm8/ 
    segment 'rom' 

loop 
    ld $0,#5 
    jp loop 

    end 

が、私はエラーを取得します

答えて

4

使用

MOV $0, #5 

命令は、任意の条件フラグには影響を与えません。 ST8 Programming Manualから

MOVの説明はld $0,#5が働くことができない理由を理解できるようにするには、サポートされるアドレッシングモード(合計20)のためにそのマニュアルを参照することができ

Moves a byte of data from a source address to a destination address. Data is examined as it is moved1. The accumulator is not affected.

There are 3 addressing modes for the MOV instruction:

  • An immediate byte to a direct memory location
  • A direct memory location to another direct memory location (from $00 to $FF)
  • A direct memory location to another direct memory location (from $0000 to $FFFF)

です(は直接はありませんイミディエイトアドレッシング)。


私はこのフレーズを理解することはできません、私はタイプミスがあると信じている(それはデータを調べていない...でなければなりません)。このマニュアルでは、フラグは影響を受けていないことを明確に述べています。

+0

ありがとう、 'mov'は正しい命令です。 – binaryBigInt

+0

しかし、なぜこれは機能しませんか? 'ld $ 1、$ 7F0A' – binaryBigInt

+3

@binaryBigInt私が答えて言ったように、マニュアルを見ることができます。 ST8はmem-to-memロードを持っていないことがわかります(MOV $ 1、$ 7F0A'が行います)。真剣に、そのリンクを開き、その文書を読んで1時間を過ごす、それは非常によく書かれており、非常に簡単です。それは非常に便利です。 :) –

関連する問題