×
单片机 > 单片机程序设计 > 详情

PIC的35条指令扭曲理解法

发布时间:2020-06-18 发布时间:
|

以下理解纯属恶搞,例子使用搜狗输入法输入,全角还是半角的懒得理了!


第一条当然是NOP,
NOP 垃圾指令
操作数:垃圾当然不用说最好是没有的就好!
指令编码:00 0000 0xx0 0000   这个全是0啦,还要xx
执行时间:清理垃圾也要一个指令的
执行过程:扫垃圾,除了清理外其他什么都没变
状态标志:垃圾当然无视
说明:这个垃圾除了用来浪费时间外什么也实现不了,一般用来延时
指令例子:   

BSF         PORTB,0      ;   PORTB  端口0输出高电平
NOP                      ;丢个垃圾浪费下时间让IO输出稳定

第二条应该是MOVWF

MOVWF  拆开 解释一下先,
MOV就是寄存器缩写的意思,
W就是一个叫W的SB老爸给它起的名字,
F==??发(fa的缩写?),发送或者传送的意思,
整个串起来就是把W寄存器里面的数传到数据寄存器。

语法形式:MOVWF     f
操作数:f是数据寄存器的低7位地址(0x00-0x7f)
指令编码:00 0000 1fff ffff  (要反反复复)

执行时间:一个指令周期

执行过程:把W那个SB的数传送到数据寄存器 里面,W那个SB是不会变的
状态标志影响:无
说明:一般是给数据寄存器赋值(给别人做嫁妆啦)
指令例子:     

MOVLW    0x55    ;W那个SB在吃饭 
MOVWF    Data    ;W那个SB给人家添饭

             ;Data = 0x55  

第三条   MOVF   寄存器发送
把数据寄存器的数传到目的寄存器
语法形式:MOVF    f,d
操作数:        f是数据寄存器的低7位地址(0x00-0x7f)
            d=w,这d真虚伪,把W添的饭又退回去了!
         d=f,这d真坏,把饭又拿回来,还看看碗里的饭是不是没了!
指令编码:    00 1000 dfff ffff (是人都讨厌的d竟然还要定了得反反复复)
执行时间:    一个指令周期  (还好只用了一个,要不然跑不了非得被人家敲死)
执行过程;     [f] -d  (连数据寄存器都要给d给恶搞了)
状态标志影响:  Z      (搞成这样子要是Z还没被影响的绝对是个SB)
说明:    这个指令通过W寄存器把数据寄存器的数传到别的地方,或者对数据寄存器判0操作,如果发现是0就会把标志Z置位。(这家伙够坏的吧,先把W那个SB当跳板把数据寄存器的饭搞到别的地方去,还要看看碗里是否有饭,没饭的话就大呼小叫的!)
指令例子:   

例1    ;数据传送
MOVF    Var1,w    ;Var1把饭添给W那个SB
MOVWF   Var2      ;W那个SB只能当传饭的传送给Var2
              ;Var2 = Var1 (不用说这碗饭是不变的)
例2    ;数据判0(看看这个饭碗里面有没有饭)
MOVF    Var3,f     ;Var3的数被传送给自身(Var3添完饭后给自己)
BTFSC    STATUS,Z   ;如果Var3不等于0就会跳到下一指令(自己给自己添饭就这样的)
GOTO    Var3Zero    ;如果Var3等于0就转做相关操作(自己添不到饭肯定要干别的了)


第四条 CLRW  W寄存器的数清0(W这个SB的饭被抢了)
CLR就是清除的缩写,W。。。。。。这个SB又被搞了。。。。。。无语中
语法形式:   CLRW
操作数:    无(饭都被抢了还吃个毛啊)
指令编码:   00 0001 0000 0011 (被抢了还幺幺的叫)
执行时间:   一个指令周期(抢的速度也不慢啊)
执行过程:   0x00 - W  (饭就这样被抢了)
       1 - W  (要是不叫才怪了)
状态标志影响:Z              (W叫得也不小,把Z给惊动了)
说明:该指令对W寄存器清0,同时置位0标志Z,另外有一条指令movlw 0x00也可以使W寄存器清0,但不影响任何状态。(看来W的饭被抢也要看看谁抢的,l去抢的话连声都不干吭一声)


指令例子:CLRW  ;W=0(W的饭没了)

第五条 CLRF  数据寄存器的数清0 (看来连传送过程也会被抢)
语法形式:CLRF    f
操作数:f是数据寄存器的低7位地址(0x00-0x7f)指令编码:    00 0001 1fff ffff  (叫了两下就拂拂裤子就走了)
执行时间:一个指令周期 (抢的速度)
执行过程:

0x00 - f        (f被抢,还叫两声)
1 - Z    (结果还是把Z惊动)


状态标志影响:Z  (还是这个家伙被惊动)
说明:该指令对数据寄存器清0,同时置位0标志Z(f在传送过程中被抢,同时Z被惊动)
指令例子:CLRF TRISB ;端口B的所有I/O引脚设为输出模式(因为饭在传送中被抢了,结果全部挨饿)

第六条 ADDWF 数据寄存器的数和W寄存器相加
(传送中的饭和W的饭不满要求服务员加饭)
语法形式:ADDWF    f,d    (这次被搞的是f和d)
操作数:        

f是数据寄存器的低7位地址(0x00-0x7f)
d=f,结果放在数据寄存器内,W的数不变(饭加进f的碗里,W碗里的饭没变)
d=w,结果放在W寄存器里,数据寄存器的数不变(饭加进W碗里去了,f碗里不变)


指令编码:00 0111 dfff ffff  (都是叫饭的)
执行时间:一个指令周期(加饭的效率也够快的)
执行过程:[f] + [W] -d
状态标志影响:Z  DC  C (加饭要求惊动了睡觉的家伙和服务员还有煮饭的家伙)
说明:数据寄存器的数和W寄存器相加,结果按照d指定的目的地存数
(送饭的和W要求加饭,结果按照d指定放在哪个碗里面)
指令例子:    

MOVLW 0x55 ;W=0x55,假定 Sum=0xaa(W碗里有小半碗饭,假定sun碗里有大半碗)  
ADDWF Sum,f   ;W不变,Sum=0xff(W碗里没加成,Sum加满了) 

关键字:PIC  35条指令  扭曲理解法

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项