2011-07-04 53 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