PIC指令系統
巨集觀理解
核心助記符
助記符 | 功能說明 | 英文全稱 |
---|---|---|
ADD | 相加 | add |
SUB | 相減 | substract |
RL | 迴圈左移 | rotate left |
RR | 迴圈右移 | rotate right |
AND | 與 | and |
IOR | 或 | inclusive or |
XOR | 異或 | exclusive or |
COM | 取反 | complement |
INC | 加1 | increase |
DEC | 減1 | decrease |
MOV | 傳送 | move |
CLR | 清零 | clear |
RET | 返回 | return |
BTF | 位測試 | bit test |
指令系統補充字元說明
字元 | 功能說明 | 英文全稱 |
---|---|---|
W | 工作暫存器(即累加器) | - |
f | 暫存器地址(取7位暫存器地址,00H~7FH) | - |
b | 8位暫存器f內位地址(0~7) | bit |
K | 立即數(8位常數或11位地址)、常量或標號 | - |
L | 指令運算元中含有8位立即數K | - |
d | 目標地址選擇:d=0,結果至W;d=1,結果至f | destination |
FSZ | 暫存器f為0,則間跳 | skip if 0 |
FSC | 暫存器f的b位為0,則間跳 | skip if clear |
FSS | 暫存器f的b位為1,則間跳 | skip if set |
( ) | 表示暫存器的內容 | - |
(( )) | 表示暫存器間接定址的內容 | - |
→ | 表示運算結果送入目標暫存器 | - |
常用指令例項
指令沒找到?點這裡查詢晶片手冊
標誌位暫存器:STATUS
暫存器加1指令:INCF
【格式】 INCF F,d
【功能】暫存器F加1
【說明】
(1)INCF是Increment F的縮寫;
(2)在PIC系列8位微控制器中,常用符號F代表片內的各種暫存器和F的序號地址;
(3)d=0時,結果存入W;d=1時,結果存入F。
【例項】
INCF PORTC,1 ;將PORTC加1
暫存器減1指令:DECF
【格式】 DECF F,d
【功能】暫存器F減1
【說明】
(1)DECF是Decrement F的縮寫;
(2)d=0時,結果存入W;d=1時,結果存入F。
【例項】
ENCODER EQU 0X21
……
DECF ENCODER,1 ;將ENCODER減1
暫存器清零指令:CLRF
【格式】 CLRF F
【功能】暫存器清零
【說明】
(1)CLRF是Clear F的縮寫;
(2)F暫存器被清為全0,使狀態位Z=1。
【例項】
CLRF TRISC ;對TRISC 清零
W清零指令:CLRW
【格式】 CLRW
【功能】暫存器W清零
【說明】
(1)CLRW是Clear W的縮寫;
(2)W為PIC微控制器的工作暫存器;
(3)W暫存器被清為全0,使狀態位Z=1。
【例項】
CLRW ;W=00H
F暫存器傳送指令:MOVF
【格式】 MOVF F,d
【功能】將F暫存器內容傳送到F或W
【說明】
(1)MOVF是Move F的縮寫;
(2)當d=1時,傳到F本身;當d=0時,傳到W;
(3)影響狀態位Z
【例項】
MOVF PORTB,0 ;PORTB口內容送W
MOVWF PORTA ;W內容即PORTB口內容送PORTA
W暫存器傳送指令:MOVWF
【格式】 MOVWF F
【功能】 W暫存器傳送
【說明】
(1)MOVWF是Move W to F的縮寫;
(2)將W暫存器內容傳到F,W內容不變;
(3)不影響狀態位。
【例項】
MOVLW 0x0B ;送0BH送W
MOVWF PORTB ;送W內容到PORTB口
遞增跳轉指令:INCFSZ
【格式】 INCFSZ F,d
【功能】 遞增跳轉
【說明】
(1)INCFSZ是Increment F,Skip if 0的縮寫;
(2)F暫存器內容加1後,當d=1時結果存入F,當d=0時存入W;
(3)若結果為0則跳過下一條指令,否則順序執行;
(4)影響狀態位Z。
【例項】
LOOP INCFSZ COUNT1,1 ;COUNT1加1,結果存到COUNT1
GOTO LOOP ;結果不為零,迴圈
MOVWF COUNT2 ;結果為零時,執行該語句
遞減跳轉指令:DECFSZ
【格式】 DECFSZ F,d
【功能】遞減跳轉
【說明】
(1)DECFSZ是Decrement F,Skip if 0的縮寫;
(2)F暫存器內容減1,結果存入F本身(d=1)或W(d=0);
(3)如果結果為0則跳過下一條指令,否則順序執行;
(4)影響狀態位Z;
(5)實際指令中,當d=1時,該項常常被略去。
【例項】
DELAY MOVLW 25 ;延時子程式
MOVWF N ;給N賦值25
LOOP DECFSZ N,1 ;N-1送回N並判結果=0?是!跳出迴圈
GOTO LOOP ;否!迴圈回去
RETURN ;返回
位清零指令:BCF
【格式】 BCF F,B
【功能】位清0
【說明】
(1)BCF是Bit Clear F的縮寫;
(2)符號B是表示片內某個8位資料暫存器F的位號(或位地址);
(3)指令的意思是:將暫存器的第B位清0。
【例項】
BCF REG1,2 ;把暫存器REG1的第2位清零
位置1指令:BSF
【格式】 BSF F,B
【功能】位置1
【說明】(1)BSF是Bit Set F的縮寫;
(2)將暫存器F的第B位置1。
【例項】
BSF STATUS,RP0 ;設定檔案暫存器的體1
位測試為零跳轉指令:BTFSC
【格式】 BTFSC F,B
【功能】位測試為0跳轉
【說明】
(1)BTFSC是Bit Test,Skip if Clear的縮寫;
(2)測試F暫存器的第B位,若F(B)=0則調到下一條指令,否則順序執行。
【例項】
BTFSC PORTB,0 ;檢測PORTB口中的第0位是否為0?是!跳過下一條指令
GOTO CHECK ;否!則轉到標號為CHECK的語句
CALL DELAY ;PORTB的第0位是1則直接執行該語句,呼叫延時子程式
位測試為1跳轉指令:BTFSS
【格式】 BTFSS F,B
【功能】位測試位1跳轉指令
【說明】
(1)BTFSS是Bit Test F,Skip if Set的縮寫;
(2)測試F暫存器的第B位,若F(B)=1,則跳轉到下一條指令,否則順序執行。
【例項】
BTFSS PORTB,0 ;檢測PORTB口中的第0位是否為1?是!跳過下一條指令
GOTO CHECK ;否!則轉到標號為CHECK的語句
CALL DELAY ;PORTB的第0位是1則直接執行該句,呼叫延時子程式
常數傳送指令:MOVLW
【格式】 MOVLW K
【功能】常數傳送
【說明】(1)MOVLW是Move literal to W的縮寫;
(2)將8位立即數傳送到W暫存器,k表示常數、立即數和標號;
(3)不影響狀態位
【例項】
MOVLW 0x1E ;常數30送W
子程式呼叫指令:CALL
【格式】 CALL K
【功能】子程式呼叫
【說明】
(1)CALL是CALL subroutine的縮寫;
(2)K為立即地址;
(3)不影響狀態位。
【例項】
CALL DELAY ;呼叫延時子程式
DELAY …… ;延時子程式DELAY
……
RETURN
無條件跳轉指令:GOTO
【格式】 GOTO K
【功能】無條件跳轉
【說明】
(1)GOTO是Go to address的縮寫;
(2)指令中的K,常與程式中的標號聯絡起來;
(3)不影響狀態位。
【例項】
STOP GOTO STOP ;迴圈執行GOTO語句,從而停機
子程式返回指令:RETURN
【格式】 RETURN
【功能】子程式返回
【說明】
(1)RETURN是Return from Subroutine的縮寫;
(2)將堆疊頂端單元內容彈出並送入PC,從而返回主程式斷點處;
(3)不影響狀態位。
【例項】
SUB MOVLW 01H ;子程式
……
RETURN ;子程式返回
空操作指令:NOP
【格式】 NOP
【功能】空操作
【說明】
(1)NOP是No Operation的縮寫;
(2)不產生任何操作,僅使PC加1,消耗一個指令週期NOP;
(3)不影響狀態位。
【例項】
MOVLW 0xOF ;送OFH到W
MOVWF PORTB ;W內容寫入B口
NOP ;空操作
MOVF PORTB,W ;讀操作
常用偽指令例項
符號名賦值偽指令:EQU
【格式】符號名 EQU nn
【功能】符號名賦值
【說明】
(1)給符號名或暫存器賦值,符號名一旦由EQU賦值,其值就不能再重新定義;
(2)nn是一個長度不同的二進位制數值。
【例項】
COUNT EQU 100 ;定義COUNT為常數100
程式起始地址偽指令:ORG
【格式】 ORG nnnn
【功能】程式起始地址
【說明】
(1)用於指定該偽指令後面的源程式存放的起始地址,也就是彙編後的機器碼目標程式在微控制器的程式存貯器中開始存放的首地址;
(2)nnnn是一個13為長的地址引數。
【例項】
ORG 0x00 ;程式彙編地址從00H開始
程式結束偽指令:END
【格式】 END
【功能】程式結束
【說明】
(1)指令末的偽指令END是通知彙編程式MPASM結束對源程式的彙編,即使後面還有語句,也不再予以彙編;
(2)在一個源程式中必須有END偽指令;
(3)只能有一個END;
(4)放在整個程式的最後。
【例項】直接在程式末尾使用,從而結束程式
調入外部函式偽指令:INCLUDE
【格式】 INCLUDE “檔名”
【功能】調入外部函式
【說明】
(1)用來告訴彙編器,將一個預先編好的外部程式檔案包含進來,作為本源程式的一部分;
(2)這樣可以減少重複勞動,提高程式設計效率。
彙編指令速查
指令 | 功能 |
---|---|
AAA | 調整加 |
AAD | 調整除 |
AAM | 調整乘 |
AAS | 調整減 |
ADC | 進位加 |
ADD | 加 |
AND | 與 |
ARPL | 調整優先順序 |
BOUND | 檢查陣列 |
BSF | 位右掃描 |
BSR | 位左掃描 |
BSWAP | 交換位元組 |
BT | 位測試 |
BTC | 位測試求反 |
BTR | 位測試清零 |
BTS | 位測試置一 |
CALL | 過程呼叫 |
CBW | 轉換位元組 |
CDQ | 轉換雙字 |
CLC | 進位清零 |
CLD | 方向清零 |
CLI | 中斷清零 |
CLTS | 任務清除 |
CMC | 進位求反 |
CMOVA | 高於傳送 |
CMOVB | 低於傳送 |
CMOVE | 相等傳送 |
CMOVG | 大於傳送 |
CMOVL | 小於傳送 |
CMOVNA | 不高於傳送 |
CMOVNB | 不低於傳送 |
CMOVNE | 不等傳送 |
CMOVNG | 不大於傳送 |
CMOVNL | 不小於傳送 |
CMOVNO | 不溢位傳送 |
CMOVNP | 非奇偶傳送 |
CMOVNS | 非負傳送 |
CMOVO | 溢位傳送 |
CMOVP | 奇偶傳送 |
CMOVS | 負號傳送 |
CMP | 比較 |
CMPSB | 比較位元組串 |
CMPSD | 比較雙字串 |
CMPSW | 比較字串 |
CMPXCHG | 比較交換 |
CMPXCHG486 | 比較交換486 |
CMPXCHG8B | 比較交換8位元組 |
CPUID | CPU標識 |
CWD | 轉換字 |
CWDE | 擴充套件字 |
DAA | 調整加十 |
DAS | 調整減十 |
DEC | 減一 |
DIV | 除 |
ENTER | 建立堆疊幀 |
HLT | 停 |
IDIV | 符號整除 |
IMUL | 符號乘法 |
IN | 埠輸入 |
INC | 加一 |
INSB | 埠輸入位元組串 |
INSD | 埠輸入雙字串 |
INSW | 埠輸入字串 |
JA | 高於跳轉 |
JB | 低於跳轉 |
JBE | 不高於跳轉 |
JCXZ | 計數一六零跳轉 |
JE | 相等跳轉 |
JECXZ | 計數三二零跳轉 |
JG | 大於跳轉 |
JL | 小於跳轉 |
JMP | 跳轉 |
JMPE | 跳轉擴充套件 |
JNB | 不低於跳轉 |
JNE | 不等跳轉 |
JNG | 不大於跳轉 |
JNL | 不小於跳轉 |
JNO | 不溢位跳轉 |
JNP | 非奇偶跳轉 |
JNS | 非負跳轉 |
JO | 溢位跳轉 |
JP | 奇偶跳轉 |
JS | 負號跳轉 |
LAHF | 載入標誌低八 |
LAR | 載入訪問許可權 |
LDS | 載入資料段 |
LEA | 載入有效地址 |
LEAVE | 清除過程堆疊 |
LES | 載入附加段 |
LFS | 載入標誌段 |
LGDT | 載入全域性描述符 |
LGS | 載入全域性段 |
LIDT | 載入中斷描述符 |
LMSW | 載入狀態字 |
LOADALL | 載入所有 |
LOADALL286 | 載入所有286 |
LOCK | 鎖 |
LODSB | 載入源變址位元組串 |
LODSD | 載入源變址雙字串 |
LODSW | 載入源變址字串 |
LOOP | 計數迴圈 |
LOOPE | 相等迴圈 |
LOOPNE | 不等迴圈 |
LOOPNZ | 非零迴圈 |
LOOPZ | 為零迴圈 |
LSL | 載入段界限 |
LSS | 載入堆疊段 |
LTR | 載入任務 |
MONITOR | 監視 |
MOV | 傳送 |
MOVSB | 傳送位元組串 |
MOVSD | 傳送雙字串 |
MOVSW | 傳送字串 |
MOVSX | 符號傳送 |
MOVZX | 零傳送 |
MUL | 乘 |
MWAIT | |
NEG | 求補 |
NOP | 空 |
NOT | 非 |
OR | 或 |
OUT | 埠輸出 |
OUTSB | 埠輸出位元組串 |
OUTSD | 埠輸出雙字串 |
OUTSW | 埠輸出字串 |
POP | 出棧 |
POPA | 全部出棧 |
POPF | 標誌出棧 |
PUSH | 壓棧 |
PUSHA | 全部壓棧 |
PUSHF | 標誌壓棧 |
RCL | 進位迴圈左移 |
RCR | 進位迴圈右移 |
RDMSR | 讀專用模式 |
RDPMC | 讀執行監視計數 |
RDSHR | |
RDTSC | 讀時間戳計數 |
REP | 重複 |
REPE | 相等重複 |
REPNE | 不等重複 |
RET | 過程返回 |
RETF | 遠過程返回 |
RETN | 近過程返回 |
ROL | 迴圈左移 |
ROR | 迴圈右移 |
RSM | 恢復系統管理 |
SAHF | 恢復標誌低八 |
SAL | 算術左移 |
SALC | |
SAR | 算術右移 |
SBB | 借位減 |
SCASB | 掃描位元組串 |
SCASD | 掃描雙字串 |
SCASW | 掃描字串 |
SETA | 高於置位 |
SETB | 低於置位 |
SETE | 相等置位 |
SETG | 大於置位 |
SETL | 小於置位 |
SETNA | 不高於置位 |
SETNB | 不低於置位 |
SETNE | 不等置位 |
SETNG | 不大於置位 |
SETNL | 不小於置位 |
SETNO | 不溢位置位 |
SETNP | 非奇偶置位 |
SETNS | 非負置位 |
SETO | 溢位置位 |
SETP | 奇偶置位 |
SETS | 負號置位 |
SGDT | 儲存全域性描述符 |
SHL | 邏輯左移 |
SHLD | 雙精度左移 |
SHR | 邏輯右移 |
SHRD | 雙精度右移 |
SIDT | 儲存中斷描述符 |
SLDT | 儲存區域性描述符 |
SMI | |
SMINT | |
SMINTOLD | |
SMSW | 儲存狀態字 |
STC | 進位設定 |
STD | 方向設定 |
STI | 中斷設定 |
STOSB | 儲存位元組串 |
STOSD | 儲存雙字串 |
STOSW | 儲存字串 |
STR | 儲存任務 |
SUB | 減 |
SYSCALL | 系統呼叫 |
SYSENTER | 系統進入 |
SYSEXIT | 系統退出 |
SYSRET | 系統返回 |
TEST | 數測試 |
UD0 | 未定義指令0 |
UD1 | 未定義指令1 |
UD2 | 未定義指令2 |
UMOV | |
VERW | 校驗寫 |
WAIT | 等 |
WBINVD | 回寫無效快取記憶體 |
WRMSR | 寫專用模式 |
WRSHR | |
XADD | 交換加 |
XBTS | |
XCHG | 交換 |
XLAT | 換碼 |
XOR | 異或 |
XSTORE |