pic18汇编指令集Word格式.docx
- 文档编号:6669219
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:105
- 大小:175.86KB
pic18汇编指令集Word格式.docx
《pic18汇编指令集Word格式.docx》由会员分享,可在线阅读,更多相关《pic18汇编指令集Word格式.docx(105页珍藏版)》请在冰点文库上搜索。
DCFSNZ
將f內的值減1,若不為0則跳過下一個指令,並將結果放至W或f。
45
INCF
將f內的值加1,並將結果放至W或f。
48
INCFSZ
將f內的值加1,若為0則跳過下一個指令,並將結果放至W或f。
51
INFSNZ
將f內的值加1,若不為0則跳過下一個指令,並將結果放至W或f。
53
IORWF
將W與f做OR運算,並將結果放至W或f。
57
MOVF
將f內的值搬到W或f。
61
MOVFF
將
內的資料搬到
中。
63
MOVWF
將W內的值搬到f中。
66
MULWF
將W與f做相乘。
68
NEGF
將f內的值取2的補數。
70
RLCF
將f內的值與C一起做左移動作,並將結果放至W或f。
C,Z,N
80
RLNCF
將f內的值做左移動作,並將結果放至W或f。
82
RRCF
將f內的值與C一起做右移動作,並將結果放至W或f。
84
RRNCF
將f內的值做右移動作,並將結果放至W或f。
86
SETF
將f內的值設為0xFF。
88
SUBFWB
將W內的值減掉C及f,並將結果放至W或f。
90
SUBWF
將W內的值減掉f,並將結果放至W或f。
94
SUBWFB
將f內的值減掉W及C,並將結果放至W或f。
96
SWAPF
將f內的值高4位元與低4位元對調,並將結果放至W或f。
98
TSTFSZ
測試f內的值是否等於0,若為0則跳過下一個指令。
105
XORWF
將W與f做XOR運算,並將結果放至W或f。
108
位元運算指令(BIT-ORIENTEDFILEREGISTEROPERATIONS)
BCF
f,b,a
將f內某個位元(Bit)設定為0。
17
BSF
將f內某個位元(Bit)設定為1。
24
BTFSC
測試f內某個位元(Bit)的值是否等於0,若為0則跳過下一個指令。
25
BTFSS
測試f內某個位元(Bit)的值是否等於1,若為1則跳過下一個指令。
26
BTG
將f內某個位元(Bit)做NOT運算。
27
Note:
☞f表示暫存器。
☞d表示資料存放的地方,d=0表示存放在W累加器;
d=1表示存放在f暫存器。
☞b表示暫存器的第b個位元。
☞k表示8位元常數。
☞a表示資料存放在那個記憶體位置,a=0表示放在目前的記憶體位置;
a=1表示放在BSR暫存器內所指定的記憶體位置。
☞n表示程式記憶體的位址。
PIC18系列家族指令快速索引(續)
程式流程控制指令(CONTROLOPERATIONS)
BC
n
若C=1則跳到位址n去。
16
BN
若N=1則跳到位址n去。
18
BNC
若C=0則跳到位址n去。
19
BNN
若N=0則跳到位址n去。
20
BNOV
若OV=0則跳到位址n去。
21
BNZ
若Z=0則跳到位址n去。
22
BOV
若OV=1則跳到位址n去。
28
BRA
無條件跳到位址n去(
)。
23
BZ
若Z=1則跳到位址n去。
29
CALL
n,s
將下一個指令的PC值存到堆疊的最上層,並跳到位址n去(
30
CLRWDT
將看門狗計時器清為0。
32
DAW
將W內的值做BCD調整。
38
GOTO
47
NOP
空指令。
72
POP
將堆疊最上層的值取出來。
73
PUSH
將下一個指令的PC值存到堆疊的最上層。
74
RCALL
75
RESET
利用軟體將系統重置。
76
RETFIE
s
由中斷副程式返回主程式,並將堆疊最上層的值取出來放至PC中,而主程式由目前PC值開始執行。
77
RETURN
由副程式返回主程式,並將堆疊最上層的值取出來放至PC中,而主程式由目前PC值開始執行。
79
SLEEP
進入睡眠狀態。
89
立即常數定址(LITERALOPERATIONS)
ADDLW
k
將常數k與W做相加。
4
ANDLW
將常數k與W做AND運算。
12
IORLW
將常數k與W做OR運算。
55
LFSR
f,k
將常數k(12-bit)搬到第f個FSR暫存器去(f=0~2)。
59
MOVLB
將常數k搬到BSR暫存器去。
64
MOVLW
將常數k搬到W去。
65
MULLW
將常數k與W做乘法運算。
67
RETLW
將堆疊最上層的值取出來放至PC中,並將W的值設為k(
),而主程式由目前PC值開始執行。
78
SUBLW
將常數k與W做減法。
92
XORLW
將常數k與W做XOR運算。
106
程式記憶體讀寫指令(DATAMEMORY<
->
PROGRAMMEMORYOPERATIONS)
TBLRD*
以TBLPTRH與TBLPTRL記錄器之內容為位址指標,讀取程式記憶體之內容至TABLAT暫存器中。
99
TBLRD*+
以TBLPTRH與TBLPTRL記錄器之內容為位址指標,讀取程式記憶體之內容至TABLAT暫存器中,然後將位址指標自動加1。
TBLRD*-
以TBLPTRH與TBLPTRL記錄器之內容為位址指標,讀取程式記憶體之內容至TABLAT暫存器中,然後將位址指標自動減1。
TBLRD+*
先將TBLPTRH與TBLPTRL記錄器先加1,然後以TBLPTRH與TBLPTRL記錄器之內容為位址指標,讀取程式記憶體之內容至TABLAT暫存器中。
TBLWT*
以TBLPTRH與TBLPTRL記錄器之內容為位址指標,將TABLAT暫存器內的值寫入程式記憶體中。
102
TBLWT*+
以TBLPTRH與TBLPTRL記錄器之內容為位址指標,將TABLAT暫存器內的值寫入程式記憶體中,然後將位址指標自動加1。
TBLWT*-
以TBLPTRH與TBLPTRL記錄器之內容為位址指標,將TABLAT暫存器內的值寫入程式記憶體中,然後將位址指標自動減1。
TBLWT+*
先將TBLPTRH與TBLPTRL記錄器先加1,然後以TBLPTRH與TBLPTRL記錄器之內容為位址指標,將TABLAT暫存器內的值寫入程式記憶體中。
指令名稱:
原意:
ADDliteraltoW
語法:
[label]ADDLWk
運算元:
運算說明:
(W)+K->
W
影響旗標:
N,OV,C,DC,Z
指令說明:
W累加器中的值與k值相加,並將運算結果放回W累加器中。
類別:
立即常數定址法。
組別:
數學運算加法指令。
範例一:
ADDLW0x11;
將0x11的值與W累加器相加,結果放回W累加器中。
執行前:
W=0x1F;
假設執行前W累加器的值為0x1F。
N=OV=C=DC=Z=0;
假設執行前狀態暫存器的值皆為0。
執行後:
W=0x30;
執行後W累加器的值為0x30。
N=OV=C=0,DC=1;
半進位旗標等於1,因為低四位元相加之後有進位的情形發生,因此半進位旗標DC等於1其餘旗標狀態不變。
範例二:
W=0x7F;
假設執行前W累加器的值為0x7F。
W=0x90;
執行後W累加器的值為0x90。
N=OV=DC=1,Z=C=0;
半進位旗標DC等於1,因為低四位元相加後有進位情形發生;
溢位旗標OV等於1,因為兩數相加後第7個位元有進位情形發生;
負號旗標N等於1,因為兩數相加後結果大於127,因為使用2的補數作運算,所以結果大於127便算是負號。
範例三:
W=0x9F;
假設執行前W累加器的值為0x9F。
W=0xB0;
執行後W累加器的值為0xB0。
N=DC=1,OV=Z=C=0;
負號旗標N等於1,因為使用2的補數作運算,因此兩數相加後結果大於127,N等於1。
範例二與範例三之不同是在於範例二在相加前第七個位元為0,相加後第七個位元為1,因此溢位旗標OV等於1(根據Microchip的定義),而範例三不同的是在相加前第七個位元為1,相加後第七個位元為1,因此溢位旗標OV不變,依然是等於0。
範例四:
ADDLW0x01;
將0x01的值與W累加器相加,結果放回W累加器中。
W=0xFF;
假設執行前W累加器的值為0xFF。
W=0x00;
執行後W累加器的值為0x00,因為累加器為8bits的暫存器,因此相加後結果超過255(0xFF)便會歸0。
N=OV=0,C=DC=Z=1;
由於兩數相加後結果超過255(0xFF),因此進位旗標C會被設定為1;
又相加後W累加器的值為0x00,因此零位旗標Z會被設定為1;
又由於低四位元相加後有進位情形發生,因此半進位旗標DC被設定為1。
ADDWtof
[label]ADDWFf,d,a
(W)+(f)->
dest
W累加器中的值與f暫存器中的值相加,並將運算結果放回’d’所指定的暫存器中。
若d=0,則運算後的結果放到W累加器中;
若d=1,則運算後的結果放到f暫存器中,存放運算結果的暫存器若是存放到W累加器中,我們也可以寫成W(表W累加器);
若存放運算結果的暫存器若是存放到暫存器中,我們也可以寫成F(表暫存器)。
若a=0,則運算後的結果放到目前RAM的位址中;
若a=1,則運算後的結果放到BSR暫存器所指定的RAM位址中。
資料轉移指令。
ADDWFREG,0,0;
將暫存器(REG)的值與W累加器的值相加,結果放回W累加器中。
W=0x11;
假設執行前W累加器的值為0x11。
REG=0x0F;
假設執行前REG暫存器的值為0x0F。
W=0x20
REG=0x0F
N=OV=C=Z=0,DC=1
Ø
結果放回W累加器中。
ADDWFREG,W,0
W=0x17
REG=0xC2
N=OV=C=DC=Z=0
W=0xD9
ADDWFREG,F,1(ifBSR=0x01)
RAM位址100=0xD9
結果放在BSR暫存器所指定的位址中。
ADDWFREG,W
範例五:
ADDWFREG,F
W=0x01
REG=0x10
REG=0x11
結果放回暫存器中。
ADDWandCarrybittof
[label]ADDWFCf,d,a
(W)+(f)+(c)->
W累加器中的值與f暫存器中的值與進位旗標三者相加,並將運算結果放回’d’所指定的暫存器中。
若a=0,則運算後的結果放到f所指定的暫存器中;
若a=1為不存在狀態。
ADDWFCREG,0,1
W=0x4D
REG=0x02
Carry=1
N=OV=DC=Z=0
W=0x50
Carry=0
結果放回W累加器中,進位旗標C=0。
ADDWFCREG,F,0
REG=0x50
結果放回暫存器中,進位旗標C=0。
ANDliteralwithW
[label]ANDLWk
(W).AND.k->
N,Z
W累加器中的值與k值做邏輯的AND運算,並將運算結果放回W累加器中。
邏輯運算AND指令。
ANDLW0x5F
W=0xA3=10100011
N=Z=0
W=0x03
ANDLW0x00
W=0x5F=01011111
W=0x00
N=0;
Z=1
ANDWwithf
[label]ANDWFf,d,a
(W).AND.(f)->
W累加器中的值與f暫存器中的值做邏輯AND運算,並將運算結果放回’d’所指定的暫存器中。
若a=1不存在(系統預設值)。
邏輯運算指令。
ANDWFREG,0,0
W=0x02
ANDWFREG,F
REG=0xFF
REG=0x01
BranchifCarry
[label]BClabelname
Ifcarrybitis‘1’,jumptolabelname.
當狀態暫存器中的進位旗標C等於1時,就跳到指定的位址。
程式流程控制指令。
比較跳躍指令。
HereBCLab1;
若是進位旗標C等於1就跳到Lab1的位址,若是進位旗標C不等於1則程式往下執行。
PC=在目前Here的位址
C=1
PC=跳到Lab1的位址
BitClearf
[label]BCFf,b
0->
f<
b>
將暫存器中的某一個位元清除為0。
位元定址指令。
單一位元清除指令。
BCFREG,2;
將REG暫存器的第2個位元清除為0。
REG=11111111=0xFF;
REG暫存器的值為0xFF。
REG=11111011=0xFB;
將REG暫存器的第2個位元清除為0,從右邊算起為第0個位元、第1個位元、第2個位元,以下依此類推。
BranchifNegative
[label]BNLabelname
Ifnegativebitis‘1’,jumptolabelname.
當狀態暫存器中的負號旗標N等於1時,就跳到指定的位址。
HereBNLab1;
若是負號旗標N等於1就跳到Lab1的位址,若是負號旗標N不等於1則程式往下執行。
N=1
BranchifNotCarry
[label]BNClabelname
Ifcarrybitis‘0’,jumptolabelname.
當狀態暫存器中的進位旗標C等於0時,就跳到指定的位址。
若是進位旗標C等於0就跳到Lab1的位址,若是進位旗標C不等於0則程式往下執行。
C=0
BranchifNotNegativ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- pic18 汇编 指令