📄 the04.htm
字号:
</table>
</div>
<div align="center" class="lh15">表4.2 </div>
<p class="lh15">四、注释 </p>
<p class="lh15">以分号(;)起始,用户可以注释程序。 </p>
<p class="lh15">CLRF F10 ; 清F10寄存器
</p>
<p class="lh15" ><b><font size="2">§4.3 伪指令</font></b> </p>
<p class="lh15">所谓伪指令,是一些用来控制汇编器的命令。它们可放在源程序(.ASM)中,但不是被翻译成可执行的机器代码,而是用来控制汇编器的输入/输出以及数据的定位等。</p>
<p class="lh15">在MPASM中,有四类伪指令:</p>
<p class="lh15">1、数据伪指令:用于控制程序存储器的定位,定义数据的名称等。</p>
<p class="lh15">2、列表伪指令:用于控制MPASM产生的列表文件(.LST)的格式等。</p>
<p class="lh15">3、控制伪指令:用于控制汇编的路径,如条件汇编等。</p>
<p class="lh15">4、宏汇编指令:用于控制宏定义体中的运行和数据定位。</p>
<p class="MsoNormalIndent"><span class="lh15">一、数据伪指令</span></p>
<p class="lh15" > 1. DATA——定义程序存储器的值。</p>
<p class="lh15" > 格式:〔<标号>〕
DATA <操作数>,〔<操作数>…〕</p>
<p class="lh15" >
例:DATA 1,2+AB,“Test”</p>
<p class="lh15" > 2. DEFINE——定义字符串变量。</p>
<p class="lh15" > 格式:#DEFINE<变量名>〔<字符串>〕</p>
<p class="lh15" >
例:#DEFINE Length 20</p>
<p class="lh15" >
#DEFINE control 0x19,7</p>
<p class="lh15" >
#DEFINE position (X,Y,Z) (Y-(2×Z+X))</p>
<p class="lh15" >
…</p>
<p class="lh15" >
… </p>
<p class="lh15" >
test_Lable DATA position(1,Length,52)</p>
<p class="lh15" >
bsf control
; 置0X19寄存器的bit7</p>
<p class="lh15" > 3. SET——对标号赋值。</p>
<p class="lh15" > 格式: <标号>
SET <表达式></p>
<p class="lh15" >
例: width SET 9</p>
<p class="lh15" >
area SET 0x16</p>
<p class="lh15" >
width SET area+8</p>
<p class="lh15" > 用SET可对标号任意重新赋值,见上例3。这和下面的另一条标号赋不同。 </p>
<p class="lh15" > 4. EQU——对标号赋值。</p>
<p class="lh15" > 格式:<标号>
EQU <表达式></p>
<p class="lh15" >
例: lable EQU 0x16</p>
<p class="lh15" > 标号一旦由EQU赋值后,其值便不能再重新定义,参考上面SET命令。 </p>
<p class="lh15" > 5. RES——保留某段程序存贮区。</p>
<p class="lh15" > 格式: RES
<单元个数></p>
<p class="lh15" >
例: RES 10</p>
<p class="lh15" > 保留10个空白字节。</p>
<p class="lh15" > 6. INCLUDE——调入外部文件,通常是定义文件,对一些标号和变量进行定义。</p>
<p class="lh15" >
MPASM提供一个名为PICREG.EQU的定义文件,读文件中定义了</p>
<p class="lh15" >
PIC寄存器的地址,复位向量及状态位址。</p>
<p class="lh15" > 格式: INCLUDE
“文件名”</p>
<p class="lh15" >
例: INCLUDE “picreg.egu”</p>
<p class="lh15" > 7. Radix——进制定义指令。</p>
<p class="lh15" > 格式: RADIX
<进制表达式></p>
<p class="lh15" >
例: RADIX dec ; 十进制</p>
<p class="lh15" >
RADIX Hex ; 十六进制</p>
<p class="lh15" >
RADIX oct ; 八进制</p>
<p class="MsoNormalIndent"><span class="lh15">二、列表伪指令</span></p>
<p class="lh15" > 1. LIST——列表选择指令,设置各种汇编参数。</p>
<p class="lh15" > 格式: LIST〔<选择项>…<选择项>〕</p>
<p class="lh15" >
例: LIST F=INHX8M, R=DEC, P=16C84</p>
<p class="lh15" > 以下是LIST选项表:</p>
<table border="1" cellspacing="0" cellpadding="0" align="center">
<tr>
<td valign="top" class="lh15"> 选项 </td>
<td valign="top" class="lh15"> 默 认 值 </td>
<td valign="top" class="lh15"> 作 用 </td>
</tr>
<tr>
<td valign="top" > <p class="lh15" >C=nnn</p></td>
<td valign="top" class="lh15"> 80 </td>
<td valign="top" > <p class="lh15" >行宽</p></td>
</tr>
<tr>
<td valign="top" > <p class="lh15" >N=nnn</p></td>
<td valign="top" class="lh15"> 59 </td>
<td valign="top" > <p class="lh15" >每页的行数</p></td>
</tr>
<tr>
<td valign="top" > <p class="lh15" >T=ON/OFF</p></td>
<td valign="top" class="lh15"> OFF </td>
<td valign="top" > <p class="lh15" >ON截去超长行的超出部分</p></td>
</tr>
<tr>
<td valign="top" > <p class="lh15" >P=<type></p></td>
<td valign="top" class="lh15"> 无 </td>
<td valign="top" > <p class="lh15" >PIC12C/16C/17C</p></td>
</tr>
<tr>
<td valign="top" > <p class="lh15" >R=<radix></p></td>
<td valign="top" class="lh15"> hex </td>
<td valign="top" > <p class="lh15" >常数进制选择:hex,dec,oct</p></td>
</tr>
<tr>
<td valign="top" > <p class="lh15" >F=<format></p></td>
<td valign="top" class="lh15"> INHX8M </td>
<td valign="top" class="lh15" > 烧写文件格式:INHX16,INHX32和INHX8M </td>
</tr>
</table>
<div align="center" class="lh15">表4.3 </div>
<p class="lh15" > 2. PAGE——分页命令。</p>
<p class="lh15" > 格式: PAGE</p>
<p class="lh15" > 在列表文件中(.lst)中产生分页效果,即下面的文件输出将从新页面开始。</p>
<p class="lh15" > 3. TITLE——程序标头命令。</p>
<p class="lh15" > 格式: TITLE
'程序标头'</p>
<p class="lh15" >
例: TITLE 'This is for PIC12C50X demo'</p>
<p class="lh15" > 标头最长不超过60个字符。TITLE令会造成分页,即标头总是在一页的第一行上。</p>
<p class="MsoNormalIndent"><span class="lh15">三、控制伪指令</span></p>
<p class="lh15" > 1. ORG——定义程序存放起始地址。</p>
<p class="lh15" > 格式:<标号>
ORG <地址表达式></p>
<p class="lh15" > 例:
ORG 0h
; 起始程序存放地址</p>
<p class="lh15" >
START: MOVWF OSCCAL</p>
<p class="lh15" >
…</p>
<p class="lh15" >
…</p>
<p class="lh15" > 若ORG不带地址参数,则默认为0。若ORG带标号,则地址参数也赋值给该标号。</p>
<p class="lh15" > 2. END——程序结束命令。</p>
<p class="lh15" > 格式:
END</p>
<p class="lh15" >
例: END</p>
<p class="lh15" > 这条指令告诉MPASM这是源程序(.ASM)的结束行,后面若还有语句将被视为无效。 </p>
<p class="lh15" > 3. IF——条件汇编命令。</p>
<p class="lh15" > 格式: IF
<条件表达式></p>
<p class="lh15" >
<源程序行></p>
<p class="lh15" >
<ELSE></p>
<p class="lh15" >
<源程序行></p>
<p class="lh15" >
ENDIF</p>
<p class="lh15" >
例: IF VER==100</p>
<p class="lh15" >
MOVLW 5</p>
<p class="lh15" >
WOVWF F11</p>
<p class="lh15" >
ELSE</p>
<p class="lh15" >
MOVLW 6</p>
<p class="lh15" >
MOVWF F11</p>
<p class="lh15" >
ENDIF</p>
<p class="lh15" >
…</p>
<p class="lh15" >
…</p>
<p class="lh15">如果条件表达式为真,MPASM将汇编IF和ELSE之间的语句,反之汇编ELSE和ENDIF之间的语句。ELSE可以缺省,这样条件为真则汇编,反之不汇编。</p>
<p class="lh15" > 4. WHILE——条件循环命令。</p>
<p class="lh15" > 格式: WHILE
<条件表达式></p>
<p class="lh15" >
…</p>
<p class="lh15" >
…</p>
<p class="lh15" >
ENSW </p>
<p class="lh15" >
例: VARIABLE i</p>
<p class="lh15" >
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -