以下理解纯属恶搞,例子使用搜狗输入法输入,全角还是半角的懒得理了!
第一条当然是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加满了) |