汇编指令转机器码

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

你能告诉我如何得到正确答案吗?

谢谢

1个回答

2

一切都很好。

movff是一个2个字的指令(每个字长16位)。

movff指令字以b'1100'位开始,然后跟着12位源字节地址,在你的情况下为0x10。然后指令后跟着“目标指令字”,它以b'1111'位开始,然后跟着12位目标字节地址,在你的情况下为0x15。

如果你只跳转(分支)到“目标指令”,那么应该执行nop指令。

通过这种方式,可以在PIC18下寻址4096字节的RAM(即整个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

我不理解NOP的部分。 - Prof. Falken
NOP是空操作指令,需要一个MCPU指令周期。因此,如果第一个指令未执行,则以b'1111'开头的下一个指令将不执行任何操作。 - GJ.
但我不明白为什么这两个单词的第三列是0010而不是0001? - user
增加了PIC18F1220的简单测试输出文件,所以请检查它。那应该是你的错误! - GJ.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接