【问题标题】:How does mulw, prodl and prodh work together in assembler programming?mulw、prodl 和 prodh 在汇编程序编程中如何协同工作?
【发布时间】:2019-08-06 12:08:56
【问题描述】:

我不明白指令 MULLW 以及寄存器 PRODL 和 PRODH 是如何工作的。我有这段代码:

        MOVLW 0x0D
        MULLW 0x09
        MOVF PRODL,W

实际发生了什么?我一直在尝试对这些值进行与运算,这在乘法方面似乎是合乎逻辑的:

0000 1101

0000 1001

但这会给出错误的 0x09。答案已移至 PRODL,为 0x75。我不知道它是如何变成 0x75 的,我已经尝试了所有值的门,但没有任何意义。在 Internet 上,我找到的关于 mullw、PRODL 和 PRODH 的所有信息都是汇编程序手册,它没有显示解释为什么答案会变成这样的每一步。

我所知道的是有一些 16 位的初始操作,结果的低值和高值(不知道过程)分别放在 PRODL 和 PRODH 中。

知道PRODL、PRODH和MULLW的人可以举个例子详细解释一下吗?

谢谢。

【问题讨论】:

  • 结果明明是0x75希望你没问题吧?这只是0x0D*0x09 乘法。 MOVLW 加载第一个操作数,MULLW 进行乘法运算。结果是 16 位,PRODL(产品低)中的低 8 位,PRODH(产品高)中的高 8 位。不知道你为什么要AND 值,也许你把它和单位乘法混淆了?

标签: assembly cpu-registers microchip


【解决方案1】:
        MOVLW 0x0D
        MULLW 0x09     

0x0D x 0x09 = 0x0075

这条指令之后是 PRODH = 0x00 和 PRODL = 0x75
PRODLPRODH 都是 8 位寄存器,它们一起保存 16 位结果。只有 LSB 和 MSB。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2013-04-18
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多