2011-07-04 70 views
3

我試圖將MOVFF 0x10, 0x15轉換爲機器碼。微控制器是Microchip PIC 18F1220。參考手冊說:組裝指令到機器代碼

MOVFF fs,fd 

編碼:
第1個字:1100 ffff ffff ffffs
第2個字: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(即意味着整個RAM)下處理4096個字節的RAM。

編輯: 添加簡單的測試用例輸出文件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無操作並需要一個MCPU指令週期。所以如果不執行第一條指令,那麼以b'1111'開始的下一條指令將不會執行任何操作。 –

+0

但我不明白爲什麼這兩個詞的第三列是0010而不是0001? – user