📄 the02.htm
字号:
<p > 操作:
f+1→d</p>
<p > 影响状态位:
C,DC,Z</p>
<p > 说明:
f寄存器加1,结果存入f(d=1)或W(d=0)。</p>
<p > 例:
INCF 10,0
; F10+1→W</p>
<p >
INCF
10,1
; F10+1→F10</p>
<p > ─────────────────────────────────</p>
<p > 9、寄存器加1,结果为零则跳指令</p>
<p > 格式:
INCFSZ f,d</p>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="98" valign="top" > 指令码:</td>
<td width="70" valign="top" > 001111</td>
<td width="33" valign="top"> d</td>
<td width="56" valign="top"> fffff</td>
</tr>
</table>
<p > 指令周期:
1或2(产生跳转时为2)</p>
<p > 操作:
f+1→d,结果为零则跳(PC+1→PC)</p>
<p > 影响状态位:
无</p>
<p > 说明: 将f寄存器内容加1存入f(d=1)或W(d=0),如果结果为零则PC值</p>
<p >
加1跳过下一条指令。</p>
<p > 例:
L00P ┌─INCFSZ 8,1 ; 将F8寄存器加1,结果存入F8,</p>
<p >
│ GOTO LOOP ; 加1后结果为零则跳到MOVWFF9指令</p>
<p >
F8=0 └→MOVWF 9</p>
<p > ─────────────────────────────────</p>
<p > 10、寄存器或指令</p>
<p > 格式:
IORWF f,d</p>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="98" valign="top" > 指令码:</td>
<td width="70" valign="top"> 000100</td>
<td width="33" valign="top"> d</td>
<td width="56" valign="top"> fffff</td>
</tr>
</table>
<p > 指令周期:
1</p>
<p > 操作:
W∨f→d</p>
<p > 影响状态位: Z</p>
<p > 说明:
将f寄存器内容和W内容做逻辑或运算,结果存入f(d=1)或W(d=0)。</p>
<p > 例:
IORWF 18,1
; F18∨W→F18</p>
<p > IORWF
18,0
; F18∨W→W</p>
<p > ─────────────────────────────────</p>
<p > 11、f寄存器传送指令</p>
<p > 格式:
MOVF f,d</p>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="98" valign="top" > 指令码:</td>
<td width="70" valign="top" > 001000</td>
<td width="33" valign="top" > d</td>
<td width="56" valign="top" > fffff</td>
</tr>
</table>
<p > 指令周期:
1</p>
<p > 操作:
f→d</p>
<p > 影响状态位:
Z</p>
<p > 说明:
将f寄存器内容传送至W(d=0)或自己本身f(d=1)。如果是传给</p>
<p >
自己,一般是用来影响状态位Z,即可判断f是否为零。</p>
<p > 例:
MOVF 10,1 ; F10→F10</p>
<p >
BTFSS 3,2 ; 判断F3的第二位,即Z状态位。如果F10=0,则Z=1。</p>
<p > ─────────────────────────────────</p>
<p > 12、W寄存器传送指令</p>
<p > 格式:
MOVWF f</p>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="98" valign="top"> 指令码:</td>
<td width="70" valign="top" > 000000</td>
<td width="33" valign="top" > 1</td>
<td width="56" valign="top"> fffff</td>
</tr>
</table>
<p > 指令周期:
1</p>
<p > 操作:
W→f</p>
<p > 影响状态位:
无</p>
<p > 说明:
将W内容传给f寄存器。</p>
<p > 例:
MOVWF
6
; W→F6(B口)</p>
<p > ─────────────────────────────────</p>
<p > 13、空操作指令</p>
<p > 格式:
NOP</p>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="98" valign="top" > 指令码:</td>
<td width="77" valign="top" > 000000</td>
<td width="82" valign="top" > 000000</td>
</tr>
</table>
<p > 指令周期:
1</p>
<p > 操作:
无任何操作</p>
<p > 影响状态位:
无</p>
<p > 说明:
不做任何操作,只有使PC加1。</p>
<p > ─────────────────────────────────</p>
<p > 14、带进位位左移指令</p>
<p > 格式:
RLF f,d</p>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="98" valign="top"> 指令码:</td>
<td width="70" valign="top" > 001101</td>
<td width="33" valign="top"> d</td>
<td width="56" valign="top" > fffff</td>
</tr>
</table>
<p > 指令周期:
1</p>
<p > 操作:
f(n)→d(n+1),f(7)→c,c→d(0)</p>
<p > 影响状态位:
C</p>
<p > 说明:
将f寄存器左移,结果存入f(d=1)或W(d=0)。f左移时,其最高</p>
<p >
位(bit7)移入状态位C(进位位),如下图:</p>
<p >
进位位</p>
<p style="line-height:11.0pt;mso-line-height-rule:exactly">
┌──┐ ┌──┬──┬──┬──┬──┬──┬──┬──┐</p>
<p style="line-height:11.0pt;mso-line-height-rule:exactly">
┌─┤ C │← │D7 │ D6 │D5 │ D4 │D3 │ D 2│ D1 │ D0│ ←─┐</p>
<p style="line-height:11.0pt;mso-line-height-rule:exactly">
│ └──┘ └──┴──┴──┴──┴──┴──┴──┴──┘
│</p>
<p > └──────────────────────────────────┘</p>
<p > 例:
RLF 8,1
; F8左移→F8</p>
<p >
RLF 8,0
; F8左移→W</p>
<p > ─────────────────────────────────</p>
<p > 15、带进位位右移指令</p>
<p > 格式:
RRF f,d</p>
<table border="1" cellspacing="0" cellpadding="0">
<tr>
<td width="98" valign="top" > 指令码:</td>
<td width="70" valign="top"> 001100</td>
<td width="33" valign="top" > d</td>
<td width="56" valign="top" > fffff</td>
</tr>
</table>
<p > 指令周期:
1</p>
<p > 操作:
f(n)→d(n-1),f(0)→c,c→d(7)</p>
<p > 影响状态位: C</p>
<p > 说明:
将f寄存器右移,结果存入f(d=1)或W(d=0)。f右移时,其最低</p>
<p >
位(bito)移入状态位C,而原来的状态位C移入f最
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -