【问题标题】:Assembly instruction to machine code汇编指令到机器码
【发布时间】:2011-07-04 05:52:27
【问题描述】:

我正在尝试将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

你能解释一下如何得到正确的答案吗?

谢谢

【问题讨论】:

    标签: assembly binary microcontroller microchip pic18


    【解决方案1】:

    一切正常。

    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 的部分。
    • NOP 是空操作,占用一个 MCPU 指令周期。所以如果第一个指令没有执行,那么以 b'1111' 开头的下一条指令将什么也不做。
    • 但是我不明白为什么这两个词的第三列是0010而不是0001?
    • 为 PIC18F1220 添加了简单的测试输出文件,因此请检查它。那应该是你的错!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 1970-01-01
    • 2014-05-28
    • 2014-05-27
    • 1970-01-01
    • 2015-12-03
    相关资源
    最近更新 更多