【问题标题】:is it ever valid to use MOVF with a single operand ? If so, what is the advantage?将 MOVF 与单个操作数一起使用是否有效?如果有,有什么好处?
【发布时间】:2012-06-26 19:41:54
【问题描述】:

我遇到过几个在没有第二个操作数的情况下使用 MOVF 的例子,例如:

;incorrect context restore
MOVF  STATUS_Temp,w
MOVWF STATUS
MOVF  W_Temp ;this may change the Z bit    <------ !! MOVF with single operand !!
             ;in the Status register

;good context restore
MOVF  STATUS_Temp,w
MOVWF STATUS
SWAPF W_Temp,f ;swap in place
SWAPF W_Temp,w ;swap with Wreg destination

(取自 PICKIT2 LPC 板用户指南的示例)

MPLAB SIM 中的一项快速实验表明,第二个“目标”操作数是可选的,默认为工作寄存器。即

MOVF  W_Temp,w

这是那些编码“功能”之一,虽然严格来说是可能的,但只是另一种降低代码可读性的方法吗?或者还有更多的东西吗?

【问题讨论】:

    标签: assembly pic microchip


    【解决方案1】:

    这仅在我们离开 interrupt 程序时很重要,因此我们必须正确恢复所有 ALU 标志!

        ...   
        MOVF  STATUS_Temp,w ;Restore ALU flags
        MOVWF STATUS 
        MOVF  W_Temp,w      ;Restore the w register and also affect to the Zero flag
        RETFIE              ;Exit from interrupt
    

    指令MOVF W_Temp 应该像我们期望的那样复制回 w 文件寄存器的内容,但另一方面也会影响到作为 STATUS 文件寄存器一部分的零标志。因此,如果我们想在离开中断时正确恢复 privius 零标志状态,我们就不能使用它。

        ...
        MOVF  STATUS_Temp,w ;Restore ALU flags
        MOVWF STATUS 
        SWAPF W_Temp,f
        SWAPF W_Temp,w      ;Restore the w register  
        RETFIE              ;Exit from interrupt
    

    在第二种情况下,SWAPF(我们执行双重交换,以便正确恢复 w 寄存器的内容)指令不会影响零标志,因此使用它是安全的。

    编辑:

    如果您阅读过 Microchip 数据表,那么您会发现指令 MOVF 也有一个(位大小)操作数。

    这样您就可以在 MPLAB IDE 中编写代码了。

    MOVF  W_Temp, W    ;Copy W_Temp to W and set Zero flag if value is 0, otherwise clear.
    MOVF  W_Temp, F    ;Copy W_Temp back to W_Temp  and set Zero flag if value is 0, otherwise clear.
    MOVF  W_Temp       ;Is equal MOVF  W_Temp, F beacuse the defailt operant is F (1)
    

    如果我们不想测试W_Temp文件寄存器的零内容而不改变w寄存器的内容,使用MOVF W_Temp, F(或MOVF W_Temp)很有用。

    【讨论】:

    • 抱歉,我应该明确表示我的问题与上下文恢复无关,这只是我发现的一个示例,其中 MOVF 仅与一个参数一起使用。我选择这个例子是因为它来自 Microchip 自己编写的文档,所以(大概!)具有一定的权威性。
    • @thermalCat:您的示例可以在 Microchip 文档中找到并讨论恢复中断!因此MOVF 指令始终有效且非常有用,除非 wa 正在恢复中断,在这种情况下使用 double SWAPF 代替!
    • @thermalCat:检查我的上编辑以澄清。
    • 啊,我应该早点检查数据表。感谢您的帮助
    猜你喜欢
    • 2010-10-19
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-05
    • 2019-05-02
    • 1970-01-01
    相关资源
    最近更新 更多