PIC单片机指令

MOVF 20H,F 是将20H中的数据转了一圈之后又返回20H. 为啥上述指令实现了上述功能??F代表什么?? 而MOVF f,d 将f寄存器内容传送至W(d=0)或者(d=1),这是函数的原型!f代表寄存器地址!! 怎么都不能和MOVF 20H,F 这条指令相对应??怎么理解这条指令?? MOVF 30H,W ;将30H寄存器的内容送至W工作寄存器 ADDWF 50H,F ;将W的内容和50H寄存器的内容相加送到50H寄存器中 怎么目的操作数一会儿是右边的,一会儿是左边的???头都晕了!51单片机里面目的操作数都在右侧! 本身ADDWF的 原型是 ADDWF f,d 将W寄存器内容加f寄存器内容传送至W(d=0)或者f(d=1) d是个什么东西? ADDWF 50H,F中的F代表什么意思? ADDWH到底有多少个操作数? ADDWF 50H,F中已经有两个操作数了!如果再加上f的话,那不是有三个操作数了?? 不明白???求教! MOVF 6,0 ;RB口内容送W,此时d=0 还有就是这个指令为啥是实现上述功能的?? 怎么那个d一会儿有,一会儿没有? d到底代表什么???? 而且我发现PIC单片机的指令中目的操作数好像真的是一会儿在右边,一会儿在左边??是不是??真是这样的话岂不是转晕了?? 还有d的默认值也就是缺省值是不是等于一?看了书,还是不太明白!求证!

F代表本次操作的寄存器,
在MOVF
20H,
F
这句话里表示吧W寄存器的数据存到地址为20H的空间里.
你可以看看
头文件

宏定义
里,
F是等于1的,W等于0,
MOVF
20H,
F
其实是对应了MOVF
20H,
1
这句话.
只是为了让程序员写程序的时候好判断,特此在头文件里宏定义了
出现F就表示是1,如果出现W,就表示0.
MOVF
20H,
F
这句话最后的这个位置,
可以写F或W或1或0

ADDWF
f,d
和上面的MOVF
f,d一样,只是这个指令的说明而已.
并不能用在真正的程序里
,或者说它像一个公式
的解释,
你要用MOVF这条指令,
它的结构是MOVF
f,d这样的,
运用的时候,
MOVF不变,把小写f替换成你要操作的寄存器(这里是20H),然后
后面这个小写d
是替换成上面说的
F或W或1或0
或者
这个d的位置可以省略不写.
下面说一下这几个句子的区别,
咱们先假定程序有一个地址在20h的变量TMP
ADDWF
f,d
;
这只是一个
教科书上对这指令的解释,
告诉你f
应该填什么东西,
d应该填什么东西()
ADDWF
TMP,F
;
这才是程序,意思是吧W寄存器的数值和TMP相加结果存到TMP里,F在这里告诉单片机结果存到TMP里
.
操作数

W寄存器和TMP变量
ADDWF
20H
,F
;这和前面那句一样只是
不用TMP,直接用地址来表示变量
ADDWF
20H
,1
;这和前面那句一样只是
不用TMP,直接用地址来表示变量,并且F用1表示,
=======分界线,下面的指令和上面的逻辑上不同=============
ADDWF
TMP,W
这个是指W寄存器和TMP变量相加,结果存到W里
,
W在这里表示结果存到W寄存器里
ADDWF
TMP,
1
和前面那句话一样,只是W用1来表示.
ADDWF
TMP
这个是最常用的,如果TMP这个操作数后面的是W或者是0,那么它可以省略掉,跟前面的一个意思
,就是把W和TMP相加,结果存到W里.
ADDWF
20H
同上
综上所述,
这只是一个表述的问题而已.
另外指出一下你的错误
“将f寄存器内容传送至W(d=0)或者(d=1),这是函数的原型!”
这只是指令说明,没有什么函数的,不要把它看成是什么函数。汇编里没有函数的,没有类似数学的函数表达式,也没有
C程序
的那种函数(在汇编里类似于
C函数
的叫做“
子程序
”)

PIC单片机
的数据手册对初学者来说不太好理解的,
如果还有
不懂可以在
百度HI
里问我,或者发站内信。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-02-07
汇编不是一句两句就能说明白的。不明白也不要紧可以买本书搞个开发板,照书上的例子先实践实践,实践过程中就会悟到很多道理的
相似回答