2011-07-04 22 views
3

MOVFF 0x10, 0x15を機械コードに変換しようとしています。マイクロコントローラはMicrochip PIC 18F1220です。リファレンスマニュアルは言う:機械コードへのアセンブリ命令

MOVFF fs,fd 

エンコード:
第一単語:1100 ffff ffff ffffs
第二の単語:1111 ffff ffff ffffd

ソリューションです:

1100 0000 0010 0000 
1111 0000 0010 0101 

しかし、私は取得しています解決策があるの

0x10 = 0001 0000 
0x15 = 0001 0101 
1100 0000 0001 0000 
1111 0000 0001 0101 

正解を得る方法を教えていただけますか?

ありがとうございます

答えて

2

すべては問題ありません。

movffは2ワードの命令です(各ワードは16ビット長です)。

movff命令語は、ビットb'1100 'で始まり、ケース0x10のソースバイトアドレスの12ビットに続きます。その後、命令はb'1111 'で始まり、あなたのケース0x15の宛先バイトアドレスの12ビットに続く「宛先命令語」に従います。

「分岐先命令」だけにジャンプする場合は、nopを実行する必要があります。

このようにして、PIC18の下で4096バイトのRAMをアドレス指定することができます(RAM全体の意味)。

EDIT: PIC18F1220のための簡単なテストケースの出力ファイルを追加しました:

--- C:\WORK\TEST\Test.asm ---------------------------------------------- 
                1:  org 0 
                2:  fs equ 0x10 
                3:  fd equ 0x15 
    000 C010  MOVFF 0x10, 0x15    4:  movff fs, fd 
    002 F015  NOP 
    004 C010  MOVFF 0x10, 0x15    5:  movff 0x10, 0x15 
    006 F015  NOP 
+0

私はNOPについての部分を理解していません。 –

+0

NOPは動作しておらず、1つのMCPU命令サイクルを要します。したがって、frist命令が実行されない場合、b'1111 'で始まる次の命令は何も行いません。 –

+0

しかし、2つの単語の3番目の列が0001ではなく0010である理由はわかりません。 – user

関連する問題