pic18匯編指令集_第1頁(yè)
pic18匯編指令集_第2頁(yè)
pic18匯編指令集_第3頁(yè)
pic18匯編指令集_第4頁(yè)
pic18匯編指令集_第5頁(yè)
已閱讀5頁(yè),還剩95頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、pic18系列家族指令集pic指令指令指令說(shuō)明影響旗號(hào)參考說(shuō)明頁(yè)數(shù)位元組運(yùn)算指令 (byte-oriented file register operations)addwff, d, a將w與f做相加,並將結(jié)果放至w或f。c, dc, z, ov, n7addwfcf, d, a將w與c做相加,並將結(jié)果放至w或f。c, dc, z, ov, n10andwff, d, a將w與f做and運(yùn)算,並將結(jié)果放至w或f。z, n14clrff, a將f內(nèi)的值都清為0。z31comff, d, a將f內(nèi)的值取補(bǔ)數(shù),並將結(jié)果放至w或f。z, n33cpfseqf, a若f與w的值相等,則跳過(guò)下一個(gè)指令。無(wú)

2、35cpfsgtf, a若f大於w,則跳過(guò)下一個(gè)指令。無(wú)36cpfsltf, a若f小於w,則跳過(guò)下一個(gè)指令。無(wú)37decff, d, a將f內(nèi)的值減1,並將結(jié)果放至w或f。c, dc, z, ov, n40decfszf, d, a將f內(nèi)的值減1,若為0則跳過(guò)下一個(gè)指令,並將結(jié)果放至w或f。無(wú)43dcfsnzf, d, a將f內(nèi)的值減1,若不為0則跳過(guò)下一個(gè)指令,並將結(jié)果放至w或f。無(wú)45incff, d, a將f內(nèi)的值加1,並將結(jié)果放至w或f。c, dc, z, ov, n48incfszf, d, a將f內(nèi)的值加1,若為0則跳過(guò)下一個(gè)指令,並將結(jié)果放至w或f。無(wú)51infsnzf, d,

3、 a將f內(nèi)的值加1,若不為0則跳過(guò)下一個(gè)指令,並將結(jié)果放至w或f。無(wú)53iorwff, d, a將w與f做or運(yùn)算,並將結(jié)果放至w或f。z, n57movff, d, a將f內(nèi)的值搬到w或f。z, n61movff將內(nèi)的資料搬到中。無(wú)63movwff, a將w內(nèi)的值搬到f中。無(wú)66mulwff, a將w與f做相乘。無(wú)68negff, a將f內(nèi)的值取2的補(bǔ)數(shù)。c, dc, z, ov, n70rlcff, d, a將f內(nèi)的值與c一起做左移動(dòng)作,並將結(jié)果放至w或f。c, z, n80rlncff, d, a將f內(nèi)的值做左移動(dòng)作,並將結(jié)果放至w或f。z, n82rrcff, d, a將f內(nèi)的值與c一

4、起做右移動(dòng)作,並將結(jié)果放至w或f。c, z, n84rrncff, d, a將f內(nèi)的值做右移動(dòng)作,並將結(jié)果放至w或f。z, n86setff, a將f內(nèi)的值設(shè)為0xff。無(wú)88subfwbf, d, a將w內(nèi)的值減掉c及f,並將結(jié)果放至w或f。c, dc, z, ov, n90subwff, d, a將w內(nèi)的值減掉f,並將結(jié)果放至w或f。c, dc, z, ov, n94subwfbf, d, a將f內(nèi)的值減掉w及c,並將結(jié)果放至w或f。c, dc, z, ov, n96swapff, d, a將f內(nèi)的值高4位元與低4位元對(duì)調(diào),並將結(jié)果放至w或f。無(wú)98tstfszf, a測(cè)試f內(nèi)的值是否等於

5、0,若為0則跳過(guò)下一個(gè)指令。無(wú)105xorwff, d, a將w與f做xor運(yùn)算,並將結(jié)果放至w或f。z, n108位元運(yùn)算指令 (bit-oriented file register operations)bcff, b, a將f內(nèi)某個(gè)位元 (bit) 設(shè)定為0。無(wú)17bsff, b, a將f內(nèi)某個(gè)位元 (bit) 設(shè)定為1。無(wú)24btfscf, b, a測(cè)試f內(nèi)某個(gè)位元 (bit) 的值是否等於0,若為0則跳過(guò)下一個(gè)指令。無(wú)25btfssf, b, a測(cè)試f內(nèi)某個(gè)位元 (bit) 的值是否等於1,若為1則跳過(guò)下一個(gè)指令。無(wú)26btgf, d, a將f內(nèi)某個(gè)位元 (bit) 做not運(yùn)算。無(wú)

6、27note:f f表示暫存器。f d表示資料存放的地方,d = 0表示存放在w累加器;d = 1表示存放在f暫存器。f b表示暫存器的第b個(gè)位元。f k表示8位元常數(shù)。f a表示資料存放在那個(gè)記憶體位置,a = 0表示放在目前的記憶體位置;a = 1表示放在bsr暫存器內(nèi)所指定的記憶體位置。f n表示程式記憶體的位址。pic18系列家族指令快速索引 (續(xù))指令指令說(shuō)明影響旗號(hào)參考說(shuō)明頁(yè)數(shù)程式流程控制指令 (control operations)bcn若c = 1則跳到位址n去。無(wú)16bnn若n = 1則跳到位址n去。無(wú)18bncn若c = 0則跳到位址n去。無(wú)19bnnn若n = 0則跳到位

7、址n去。無(wú)20bnovn若ov = 0則跳到位址n去。無(wú)21bnzn若z = 0則跳到位址n去。無(wú)22bovn若ov = 1則跳到位址n去。無(wú)28bran無(wú)條件跳到位址n去 () 。無(wú)23bzn若z = 1則跳到位址n去。無(wú)29calln, s將下一個(gè)指令的pc值存到堆疊的最上層,並跳到位址n去 () 。無(wú)30clrwdt將看門(mén)狗計(jì)時(shí)器清為0。無(wú)32daw將w內(nèi)的值做bcd調(diào)整。無(wú)38goton無(wú)條件跳到位址n去 () 。無(wú)47nop空指令。無(wú)72pop將堆疊最上層的值取出來(lái)。無(wú)73push將下一個(gè)指令的pc值存到堆疊的最上層。無(wú)74rcalln將下一個(gè)指令的pc值存到堆疊的最上層,並跳到位址

8、n去 () 。無(wú)75reset利用軟體將系統(tǒng)重置。無(wú)76retfies由中斷副程式返回主程式,並將堆疊最上層的值取出來(lái)放至pc中,而主程式由目前pc值開(kāi)始執(zhí)行。無(wú)77returns由副程式返回主程式,並將堆疊最上層的值取出來(lái)放至pc中,而主程式由目前pc值開(kāi)始執(zhí)行。無(wú)79sleep進(jìn)入睡眠狀態(tài)。無(wú)89note:f f表示暫存器。f d表示資料存放的地方,d = 0表示存放在w累加器;d = 1表示存放在f暫存器。f b表示暫存器的第b個(gè)位元。f k表示8位元常數(shù)。f n表示程式記憶體的位址。f a表示資料存放在那個(gè)記憶體位置,a = 0表示放在目前的記憶體位置;a = 1表示放在bsr暫存器內(nèi)

9、所指定的記憶體位置。pic18系列家族指令快速索引 (續(xù))指令指令說(shuō)明影響旗號(hào)參考說(shuō)明頁(yè)數(shù)立即常數(shù)定址 (literal operations)addlwk將常數(shù)k與w做相加。c, dc, z, ov, n4andlwk將常數(shù)k與w做and運(yùn)算。z, n12iorlwk將常數(shù)k與w做or運(yùn)算。z, n55lfsrf, k將常數(shù)k (12-bit) 搬到第f個(gè)fsr暫存器去 (f = 0 2 ) 。無(wú)59movlbk將常數(shù)k搬到bsr暫存器去。無(wú)64movlwk將常數(shù)k搬到w去。無(wú)65mullwk將常數(shù)k與w做乘法運(yùn)算。無(wú)67retlwk將堆疊最上層的值取出來(lái)放至pc中,並將w的值設(shè)為k ()

10、,而主程式由目前pc值開(kāi)始執(zhí)行。無(wú)78sublwk將常數(shù)k與w做減法。c, dc, z, ov, n92xorlwk將常數(shù)k與w做xor運(yùn)算。z, n106程式記憶體讀寫(xiě)指令 (data memory <-> program memory operations)tblrd*以tblptrh與tblptrl記錄器之內(nèi)容為位址指標(biāo),讀取程式記憶體之內(nèi)容至tablat暫存器中。無(wú)99tblrd*+以tblptrh與tblptrl記錄器之內(nèi)容為位址指標(biāo),讀取程式記憶體之內(nèi)容至tablat暫存器中,然後將位址指標(biāo)自動(dòng)加1。無(wú)99tblrd*-以tblptrh與tblptrl記錄器之內(nèi)容為位址

11、指標(biāo),讀取程式記憶體之內(nèi)容至tablat暫存器中,然後將位址指標(biāo)自動(dòng)減1。無(wú)99tblrd+*先將tblptrh與tblptrl記錄器先加1,然後以tblptrh與tblptrl記錄器之內(nèi)容為位址指標(biāo),讀取程式記憶體之內(nèi)容至tablat暫存器中。無(wú)99tblwt*以tblptrh與tblptrl記錄器之內(nèi)容為位址指標(biāo),將tablat暫存器內(nèi)的值寫(xiě)入程式記憶體中。無(wú)102tblwt*+以tblptrh與tblptrl記錄器之內(nèi)容為位址指標(biāo),將tablat暫存器內(nèi)的值寫(xiě)入程式記憶體中,然後將位址指標(biāo)自動(dòng)加1。無(wú)102tblwt*-以tblptrh與tblptrl記錄器之內(nèi)容為位址指標(biāo),將tabla

12、t暫存器內(nèi)的值寫(xiě)入程式記憶體中,然後將位址指標(biāo)自動(dòng)減1。無(wú)102tblwt+*先將tblptrh與tblptrl記錄器先加1,然後以tblptrh與tblptrl記錄器之內(nèi)容為位址指標(biāo),將tablat暫存器內(nèi)的值寫(xiě)入程式記憶體中。無(wú)102note:f f表示暫存器。f d表示資料存放的地方,d = 0表示存放在w累加器;d = 1表示存放在f暫存器。f b表示暫存器的第b個(gè)位元。f k表示8位元常數(shù)。f n表示程式記憶體的位址。f a表示資料存放在那個(gè)記憶體位置,a = 0表示放在目前的記憶體位置;a = 1表示放在bsr暫存器內(nèi)所指定的記憶體位置。指令名稱:addlw原 意:add lite

13、ral to w語(yǔ) 法:label addlw k運(yùn) 算 元:運(yùn)算說(shuō)明:(w) + k -> w影響旗標(biāo):n, ov, c, dc, z指令說(shuō)明:w累加器中的值與k值相加,並將運(yùn)算結(jié)果放回w累加器中。類 別:立即常數(shù)定址法。組 別:數(shù)學(xué)運(yùn)算加法指令。範(fàn)例一:addlw 0x11;將0x11的值與w累加器相加,結(jié)果放回w累加器中。執(zhí)行前:w = 0x1f;假設(shè)執(zhí)行前w累加器的值為0x1f。n = ov = c = dc = z = 0;假設(shè)執(zhí)行前狀態(tài)暫存器的值皆為0。執(zhí)行後:w = 0x30;執(zhí)行後w累加器的值為0x30。n = ov = c = 0,dc = 1;半進(jìn)位旗標(biāo)等於1,因?yàn)榈?/p>

14、四位元相加之後有進(jìn)位的情形發(fā)生,因此半進(jìn)位旗標(biāo)dc等於1其餘旗標(biāo)狀態(tài)不變。範(fàn)例二:addlw 0x11;將0x11的值與w累加器相加,結(jié)果放回w累加器中。執(zhí)行前:w = 0x7f;假設(shè)執(zhí)行前w累加器的值為0x7f。n = ov = c = dc = z = 0;假設(shè)執(zhí)行前狀態(tài)暫存器的值皆為0。執(zhí)行後:w = 0x90;執(zhí)行後w累加器的值為0x90。n = ov = dc = 1,z = c = 0;半進(jìn)位旗標(biāo)dc等於1,因?yàn)榈退奈辉嗉俞嵊羞M(jìn)位情形發(fā)生;溢位旗標(biāo)ov等於1,因?yàn)閮蓴?shù)相加後第7個(gè)位元有進(jìn)位情形發(fā)生;負(fù)號(hào)旗標(biāo)n等於1,因?yàn)閮蓴?shù)相加後結(jié)果大於127,因?yàn)槭褂?的補(bǔ)數(shù)作運(yùn)算,所以結(jié)果大

15、於127便算是負(fù)號(hào)。範(fàn)例三:addlw 0x11;將0x11的值與w累加器相加,結(jié)果放回w累加器中。執(zhí)行前:w = 0x9f;假設(shè)執(zhí)行前w累加器的值為0x9f。n = ov = c = dc = z = 0;假設(shè)執(zhí)行前狀態(tài)暫存器的值皆為0。執(zhí)行後:w = 0xb0;執(zhí)行後w累加器的值為0xb0。n = dc = 1,ov = z = c = 0;半進(jìn)位旗標(biāo)dc等於1,因?yàn)榈退奈辉嗉俞嵊羞M(jìn)位情形發(fā)生;負(fù)號(hào)旗標(biāo)n等於1,因?yàn)槭褂?的補(bǔ)數(shù)作運(yùn)算,因此兩數(shù)相加後結(jié)果大於127,n等於1。範(fàn)例二與範(fàn)例三之不同是在於範(fàn)例二在相加前第七個(gè)位元為0,相加後第七個(gè)位元為1,因此溢位旗標(biāo)ov等於1 (根據(jù)mic

16、rochip的定義) ,而範(fàn)例三不同的是在相加前第七個(gè)位元為1,相加後第七個(gè)位元為1,因此溢位旗標(biāo)ov不變,依然是等於0。範(fàn)例四:addlw 0x01;將0x01的值與w累加器相加,結(jié)果放回w累加器中。執(zhí)行前:w = 0xff;假設(shè)執(zhí)行前w累加器的值為0xff。n = ov = c = dc = z = 0;假設(shè)執(zhí)行前狀態(tài)暫存器的值皆為0。執(zhí)行後:w = 0x00;執(zhí)行後w累加器的值為0x00,因?yàn)槔奂悠鳛? bits的暫存器,因此相加後結(jié)果超過(guò)255 (0xff) 便會(huì)歸0。n = ov = 0,c = dc = z = 1;由於兩數(shù)相加後結(jié)果超過(guò)255 (0xff) ,因此進(jìn)位旗標(biāo)c會(huì)被設(shè)

17、定為1;又相加後w累加器的值為0x00,因此零位旗標(biāo)z會(huì)被設(shè)定為1;又由於低四位元相加後有進(jìn)位情形發(fā)生,因此半進(jìn)位旗標(biāo)dc被設(shè)定為1。指令名稱:addwf原 意:add w to f語(yǔ) 法:label addwf f , d, a運(yùn) 算 元:運(yùn)算說(shuō)明:(w) + (f) -> dest影響旗標(biāo):n, ov, c, dc, z指令說(shuō)明:w累加器中的值與f暫存器中的值相加,並將運(yùn)算結(jié)果放回 d 所指定的暫存器中。若d = 0,則運(yùn)算後的結(jié)果放到w累加器中;若d = 1,則運(yùn)算後的結(jié)果放到f暫存器中,存放運(yùn)算結(jié)果的暫存器若是存放到w累加器中,我們也可以寫(xiě)成w (表w累加器) ;若存放運(yùn)算結(jié)果的

18、暫存器若是存放到暫存器中,我們也可以寫(xiě)成f (表暫存器) 。若a = 0,則運(yùn)算後的結(jié)果放到目前ram的位址中;若a = 1,則運(yùn)算後的結(jié)果放到bsr暫存器所指定的ram位址中。類 別:資料轉(zhuǎn)移指令。組 別:數(shù)學(xué)運(yùn)算加法指令。範(fàn)例一:addwf reg, 0, 0;將暫存器 (reg) 的值與w累加器的值相加,結(jié)果放回w累加器中。執(zhí)行前:w = 0x11;假設(shè)執(zhí)行前w累加器的值為0x11。reg = 0x0f;假設(shè)執(zhí)行前reg暫存器的值為0x0f。n = ov = c = dc = z = 0;假設(shè)執(zhí)行前狀態(tài)暫存器的值皆為0。執(zhí)行後:w = 0x20reg = 0x0fn = ov = c =

19、 z = 0,dc = 1Ø 結(jié)果放回w累加器中。範(fàn)例二:addwf reg, w, 0執(zhí)行前:w = 0x17reg = 0xc2n = ov = c = dc = z = 0執(zhí)行後:w = 0xd9reg = 0xc2n = ov = c = dc = z = 0Ø 結(jié)果放回w累加器中。範(fàn)例三:addwf reg, f, 1 (if bsr = 0x01)執(zhí)行前:w = 0x17reg = 0xc2n = ov = c = dc = z = 0執(zhí)行後:w = 0x17reg = 0xc2ram位址100 = 0xd9n = ov = c = dc = z = 0

20、6; 結(jié)果放在bsr暫存器所指定的位址中。範(fàn)例四:addwf reg, w執(zhí)行前:w = 0x17reg = 0xc2n = ov = c = dc = z = 0執(zhí)行後:w = 0xd9reg = 0xc2n = ov = c = dc = z = 0Ø 結(jié)果放回w累加器中。範(fàn)例五:addwf reg, f執(zhí)行前:w = 0x01reg = 0x10n = ov = c = dc = z = 0執(zhí)行後:w = 0x01reg = 0x11n = ov = c = dc = z = 0Ø 結(jié)果放回暫存器中。指令名稱:addwfc原 意:add w and carry bit

21、 to f語(yǔ) 法:label addwfc f , d, a運(yùn) 算 元:運(yùn)算說(shuō)明:(w) + (f) + (c) -> dest影響旗標(biāo):n, ov, c, dc, z指令說(shuō)明:w累加器中的值與f暫存器中的值與進(jìn)位旗標(biāo)三者相加,並將運(yùn)算結(jié)果放回 d 所指定的暫存器中。若d = 0,則運(yùn)算後的結(jié)果放到w累加器中;若d = 1,則運(yùn)算後的結(jié)果放到f暫存器中,存放運(yùn)算結(jié)果的暫存器若是存放到w累加器中,我們也可以寫(xiě)成w (表w累加器) ;若存放運(yùn)算結(jié)果的暫存器若是存放到暫存器中,我們也可以寫(xiě)成f (表暫存器) 。若a = 0,則運(yùn)算後的結(jié)果放到f所指定的暫存器中;若a = 1為不存在狀態(tài)。類 別

22、:資料轉(zhuǎn)移指令。組 別:數(shù)學(xué)運(yùn)算加法指令。範(fàn)例一:addwfc reg, 0, 1執(zhí)行前:w = 0x4dreg = 0x02carry=1n = ov = dc = z = 0執(zhí)行後:w = 0x50reg = 0x02carry=0n = ov = dc = z = 0Ø 結(jié)果放回w累加器中,進(jìn)位旗標(biāo)c = 0。範(fàn)例二:addwfc reg, f, 0執(zhí)行前:w = 0x4dreg = 0x02carry=1n = ov = dc = z = 0執(zhí)行後:w = 0x4dreg = 0x50carry=0n = ov = dc = z = 0Ø 結(jié)果放回暫存器中,進(jìn)位旗標(biāo)

23、c = 0。指令名稱:andlw原 意:and literal with w語(yǔ) 法:label andlw k運(yùn) 算 元:運(yùn)算說(shuō)明:(w) .and. k -> w影響旗標(biāo):n, z指令說(shuō)明:w累加器中的值與k值做邏輯的and運(yùn)算,並將運(yùn)算結(jié)果放回w累加器中。類 別:立即常數(shù)定址法。組 別:邏輯運(yùn)算and指令。範(fàn)例一:andlw 0x5f執(zhí)行前:w = 0xa3 = 10100011n = z = 0執(zhí)行後:w = 0x03n = z = 0範(fàn)例二:andlw 0x00執(zhí)行前:w = 0x5f = 01011111n = z = 0執(zhí)行後:w = 0x00n = 0;z=1指令名稱:an

24、dwf原 意:and w with f語(yǔ) 法:label andwf f , d, a運(yùn) 算 元:運(yùn)算說(shuō)明:(w) .and. (f) -> dest影響旗標(biāo):n, z指令說(shuō)明:w累加器中的值與f暫存器中的值做邏輯and運(yùn)算,並將運(yùn)算結(jié)果放回 d 所指定的暫存器中。若d = 0,則運(yùn)算後的結(jié)果放到w累加器中;若d = 1,則運(yùn)算後的結(jié)果放到f暫存器中,存放運(yùn)算結(jié)果的暫存器若是存放到w累加器中,我們也可以寫(xiě)成w (表w累加器) ;若存放運(yùn)算結(jié)果的暫存器若是存放到暫存器中,我們也可以寫(xiě)成f (表暫存器) 。若a = 0,則運(yùn)算後的結(jié)果放到f所指定的暫存器中;若a = 1不存在 (系統(tǒng)預(yù)設(shè)值)

25、 。類 別:邏輯運(yùn)算指令。組 別:邏輯運(yùn)算and指令。範(fàn)例一:andwf reg, 0, 0執(zhí)行前:w = 0x17reg = 0xc2n = z = 0執(zhí)行後:w = 0x02reg = 0xc2n = z = 0Ø 結(jié)果放回w累加器中。範(fàn)例二:andwf reg, f執(zhí)行前:w = 0x01reg = 0xffn = z = 0執(zhí)行後:w = 0x01reg = 0x01n = z = 0Ø 結(jié)果放回暫存器中。指令名稱:bc原 意:branch if carry語(yǔ) 法:label bc label name運(yùn) 算 元:運(yùn)算說(shuō)明:if carry bit is 1, ju

26、mp to label name.影響旗標(biāo):無(wú)指令說(shuō)明:當(dāng)狀態(tài)暫存器中的進(jìn)位旗標(biāo)c等於1時(shí),就跳到指定的位址。類 別:程式流程控制指令。組 別:比較跳躍指令。範(fàn)例一:here bc lab1;若是進(jìn)位旗標(biāo)c等於1就跳到lab1的位址,若是進(jìn)位旗標(biāo)c不等於1則程式往下執(zhí)行。執(zhí)行前:pc = 在目前here的位址c = 1執(zhí)行後:pc = 跳到lab1的位址c = 1指令名稱:bcf原 意:bit clear f語(yǔ) 法:label bcf f, b運(yùn) 算 元:運(yùn)算說(shuō)明:0 -> f < b >影響旗標(biāo):無(wú)指令說(shuō)明:將暫存器中的某一個(gè)位元清除為0。類 別:位元定址指令。組 別:?jiǎn)我?/p>

27、位元清除指令。範(fàn)例一:bcf reg,2;將reg暫存器的第2個(gè)位元清除為0。執(zhí)行前:reg = 11111111 = 0xff;reg暫存器的值為0xff。執(zhí)行後:reg = 11111011 = 0xfb;將reg暫存器的第2個(gè)位元清除為0,從右邊算起為第0個(gè)位元、第1個(gè)位元、第2個(gè)位元,以下依此類推。指令名稱:bn原 意:branch if negative語(yǔ) 法:label bn label name運(yùn) 算 元:運(yùn)算說(shuō)明:if negative bit is 1, jump to label name.影響旗標(biāo):無(wú)指令說(shuō)明:當(dāng)狀態(tài)暫存器中的負(fù)號(hào)旗標(biāo)n等於1時(shí),就跳到指定的位址。類 別:

28、程式流程控制指令。組 別:比較跳躍指令。範(fàn)例一:here bn lab1;若是負(fù)號(hào)旗標(biāo)n等於1就跳到lab1的位址,若是負(fù)號(hào)旗標(biāo)n不等於1則程式往下執(zhí)行。執(zhí)行前:pc = 在目前here的位址n = 1執(zhí)行後:pc = 跳到lab1的位址n = 1指令名稱:bnc原 意:branch if not carry語(yǔ) 法:label bnc label name運(yùn) 算 元:運(yùn)算說(shuō)明:if carry bit is 0, jump to label name.影響旗標(biāo):無(wú)指令說(shuō)明:當(dāng)狀態(tài)暫存器中的進(jìn)位旗標(biāo)c等於0時(shí),就跳到指定的位址。類 別:程式流程控制指令。組 別:比較跳躍指令。範(fàn)例一:here b

29、c lab1;若是進(jìn)位旗標(biāo)c等於0就跳到lab1的位址,若是進(jìn)位旗標(biāo)c不等於0則程式往下執(zhí)行。執(zhí)行前:pc = 在目前here的位址c = 0執(zhí)行後:pc = 跳到lab1的位址c = 0指令名稱:bnn原 意:branch if not negative語(yǔ) 法:label bnn label name運(yùn) 算 元:運(yùn)算說(shuō)明:if negative bit is 0, jump to label name.影響旗標(biāo):無(wú)指令說(shuō)明:當(dāng)狀態(tài)暫存器中的負(fù)號(hào)旗標(biāo)n等於0時(shí),就跳到指定的位址。類 別:程式流程控制指令。組 別:比較跳躍指令。範(fàn)例一:here bn lab1;若是負(fù)號(hào)旗標(biāo)n等於0就跳到lab1

30、的位址,若是負(fù)號(hào)旗標(biāo)n不等於0則程式往下執(zhí)行。執(zhí)行前:pc = 在目前here的位址n = 0執(zhí)行後:pc = 跳到lab1的位址n = 0指令名稱:bnov原 意:branch if not overflow語(yǔ) 法:label bnov label name運(yùn) 算 元:運(yùn)算說(shuō)明:if overflow bit is 0, jump to label name.影響旗標(biāo):無(wú)指令說(shuō)明:當(dāng)狀態(tài)暫存器中的溢位旗標(biāo)ov等於0時(shí),就跳到指定的位址。類 別:程式流程控制指令。組 別:比較跳躍指令。範(fàn)例一:here bnov lab1;若是溢位旗標(biāo)ov等於0就跳到lab1的位址,若是溢位旗標(biāo)ov不等於0則程

31、式往下執(zhí)行。執(zhí)行前:pc = 在目前here的位址ov = 0執(zhí)行後:pc = 跳到lab1的位址ov = 0指令名稱:bnz原 意:branch if not zero語(yǔ) 法:label bnz label name運(yùn) 算 元:運(yùn)算說(shuō)明:if zero bit is 0, jump to label name.影響旗標(biāo):無(wú)指令說(shuō)明:當(dāng)狀態(tài)暫存器中的零位旗標(biāo)z等於0時(shí),就跳到指定的位址。類 別:程式流程控制指令。組 別:比較跳躍指令。範(fàn)例一:here bnz lab1;若是零位旗標(biāo)z等於0就跳到lab1的位址,若是零位旗標(biāo)z不等於0則程式往下執(zhí)行。執(zhí)行前:pc = 在目前here的位址z =

32、0執(zhí)行後:pc = 跳到lab1的位址z = 0指令名稱:bra原 意:unconditional branch語(yǔ) 法:label bra label name運(yùn) 算 元:運(yùn)算說(shuō)明:jump to label name.影響旗標(biāo):無(wú)指令說(shuō)明:無(wú)條件跳躍至指定的位址。類 別:程式流程控制指令。組 別:比較跳躍指令。範(fàn)例一:here bra lab1;跳到lab1的位址。執(zhí)行前:pc = 在目前here的位址執(zhí)行後:pc = 跳到lab1的位址指令名稱:bsf原 意:bit set f語(yǔ) 法:label bsf f, b運(yùn) 算 元:運(yùn)算說(shuō)明:1 -> f < b >影響旗標(biāo):無(wú)指

33、令說(shuō)明:將暫存器中的某一個(gè)位元設(shè)定為1。類 別:位元定址指令。組 別:?jiǎn)我晃辉O(shè)定指令。範(fàn)例一:bsf reg,2;將reg暫存器的第2個(gè)位元設(shè)定為1。執(zhí)行前:reg = 00000000 = 0x00;reg暫存器的值為0x00。執(zhí)行後:reg = 00000100 = 0x04;將reg暫存器的第2個(gè)位元設(shè)定為1,從右邊算起為第0個(gè)位元、第1個(gè)位元、第2個(gè)位元,以下依此類推。指令名稱:btfsc原 意:bit test file, skip if clear語(yǔ) 法:label btfsc f, b運(yùn) 算 元:運(yùn)算說(shuō)明:skip if (f < b >) = 0影響旗標(biāo):無(wú)指令說(shuō)

34、明:比較暫存器中的某一個(gè)位元是否為0,假設(shè)是0則跳過(guò)下一個(gè)指令,若是不為0則往下執(zhí)行。類 別:程式流程控制指令。組 別:?jiǎn)我晃辉容^指令。範(fàn)例一:here btfsc reg,2;比較reg暫存器的第2個(gè)位元是否為0,假設(shè)是0則執(zhí)行here2這行指令,若不為0則執(zhí)行here1這行指令。here1 addlw 0x01;不為0則執(zhí)行here1這行指令。here2 addlw 0x03;為0則執(zhí)行here2這行指令。執(zhí)行前:reg = 11110000 = 0xf0;reg暫存器的值為0xf0。pc = 在目前here的位址執(zhí)行後:reg = 11110000 = 0xf0;reg暫存器的值為0x

35、f0。pc = 在here2的位址;由於reg暫存器的第2個(gè)位元為0,因此程式跳到here2的位址。指令名稱:btfss原 意:bit test file, skip if set語(yǔ) 法:label btfss f, b運(yùn) 算 元:運(yùn)算說(shuō)明:skip if (f < b >) = 1影響旗標(biāo):無(wú)指令說(shuō)明:比較暫存器中的某一個(gè)位元是否為1,假設(shè)是1則跳過(guò)下一個(gè)指令,若是不為1則往下執(zhí)行。類 別:程式流程控制指令。組 別:?jiǎn)我晃辉容^指令。範(fàn)例一:here btfss reg,2;比較reg暫存器的第2個(gè)位元是否為1,假設(shè)是1則執(zhí)行here2這行指令,若不為1則執(zhí)行here1這行指令。

36、here1 addlw 0x01;不為1則執(zhí)行here1這行指令。here2 addlw 0x03;為1則執(zhí)行here2這行指令。執(zhí)行前:reg = 11111111 = 0xff;reg暫存器的值為0xff。pc = 在目前here的位址執(zhí)行後:reg = 11111111 = 0xff;reg暫存器的值為0xff。pc = 在here2的位址;由於reg暫存器的第2個(gè)位元為1,因此程式跳到here2的位址。指令名稱:btg原 意:bit toggle f語(yǔ) 法:label btg f, b運(yùn) 算 元:運(yùn)算說(shuō)明:影響旗標(biāo):無(wú)指令說(shuō)明:將暫存器中的某一個(gè)位元取補(bǔ)數(shù)。類 別:位元定址指令。組 別

37、:?jiǎn)我晃辉壿嬛噶?。?fàn)例一:btg reg,2;將reg暫存器的第2個(gè)位元取補(bǔ)數(shù)。執(zhí)行前:reg = 00000000 = 0x00;reg暫存器的值為0x00。執(zhí)行後:reg = 00000100 = 0x04;將reg暫存器的第2個(gè)位元取補(bǔ)數(shù),從右邊算起為第0個(gè)位元、第1個(gè)位元、第2個(gè)位元,以下依此類推。指令名稱:bov原 意:branch if overflow語(yǔ) 法:label bov label name運(yùn) 算 元:運(yùn)算說(shuō)明:if overflow bit is 1, jump to label name.影響旗標(biāo):無(wú)指令說(shuō)明:當(dāng)狀態(tài)暫存器中的溢位旗標(biāo)ov等於1時(shí),就跳到指定的位址。

38、類 別:程式流程控制指令。組 別:比較跳躍指令。範(fàn)例一:here bov lab1;若是溢位旗標(biāo)ov等於1就跳到lab1的位址,若是溢位旗標(biāo)ov不等於1則程式往下執(zhí)行。執(zhí)行前:pc = 在目前here的位址ov = 1執(zhí)行後:pc = 跳到lab1的位址ov = 1指令名稱:bz原 意:branch if zero語(yǔ) 法:label bz label name運(yùn) 算 元:運(yùn)算說(shuō)明:if zero bit is 1, jump to label name.影響旗標(biāo):無(wú)指令說(shuō)明:當(dāng)狀態(tài)暫存器中的零位旗標(biāo)z等於1時(shí),就跳到指定的位址。類 別:程式流程控制指令。組 別:比較跳躍指令。範(fàn)例一:here

39、bz lab1;若是零位旗標(biāo)z等於1就跳到lab1的位址,若是零位旗標(biāo)z不等於1則程式往下執(zhí)行。執(zhí)行前:pc = 在目前here的位址z = 1執(zhí)行後:pc = 跳到lab1的位址z = 1指令名稱:call原 意:subroutine call語(yǔ) 法:label call label name運(yùn) 算 元:運(yùn)算說(shuō)明:(pc) + 4 -> stack, label name- > pc影響旗標(biāo):無(wú)指令說(shuō)明:呼叫副程式,呼叫的範(fàn)圍最大到2 mbytes的記憶體範(fàn)圍。類 別:程式流程控制指令。組 別:呼叫副程式指令。範(fàn)例一:here call lab1;呼叫l(wèi)ab1的副程式。執(zhí)行前:p

40、c = 在目前here的位址執(zhí)行後:pc = 跳到lab1的位址指令名稱:clrf原 意:clear f語(yǔ) 法:label clrf f運(yùn) 算 元:運(yùn)算說(shuō)明:0x00 -> f, z ->1影響旗標(biāo):z指令說(shuō)明:將暫存器的值全部清除為0。類 別:資料轉(zhuǎn)移指令。組 別:位元組 (byte) 清除指令。範(fàn)例一:clrf reg;將reg暫存器的值全部清為0。執(zhí)行前:reg = 0xf5;reg暫存器的值為0xf5。z = 0;零位旗標(biāo)z等於0。執(zhí)行後:reg = 0x00;reg暫存器的值為0x00。z = 1;零位旗標(biāo)z等於1。指令名稱:clrwdt原 意:clear watchdo

41、g timer語(yǔ) 法:label clrwdt運(yùn) 算 元:無(wú)運(yùn)算說(shuō)明:0x00 -> wdt, 0x00 -> wdt postscaler, 影響旗標(biāo):, 指令說(shuō)明:將看門(mén)狗計(jì)時(shí)器的值全部清除為0。類 別:程式流程控制指令。組 別:清除指令。範(fàn)例一:clrwdt;將看門(mén)狗計(jì)時(shí)器的值全部清除為0。執(zhí)行前:wdt count = ?;看門(mén)狗計(jì)時(shí)器的值未知?執(zhí)行後:wdt count = 0x00;看門(mén)狗計(jì)時(shí)器的值為0x00。wdt postscaler = 0x00;看門(mén)狗後除器的值為0x00。 = 1;計(jì)時(shí)器溢位旗標(biāo)等於1。 = 1;電源下降旗標(biāo)等於1。指令名稱:comf原 意:c

42、omplement f語(yǔ) 法:label comf f, d運(yùn) 算 元:運(yùn)算說(shuō)明:影響旗標(biāo):n, z指令說(shuō)明:將暫存器的值取1的補(bǔ)數(shù),並將運(yùn)算結(jié)果放回 d 所指定的暫存器中。若d = 0,則運(yùn)算後的結(jié)果放到w累加器中;若d = 1,則運(yùn)算後的結(jié)果放到f暫存器中,存放運(yùn)算結(jié)果的暫存器若是存放到w累加器中,我們也可以寫(xiě)成w (表w累加器) ;若存放運(yùn)算結(jié)果的暫存器若是存放到暫存器中,我們也可以寫(xiě)成f (表暫存器) 。類 別:邏輯運(yùn)算指令。組 別:邏輯運(yùn)算not指令。範(fàn)例一:comf reg,0;將暫存器reg的值取1的補(bǔ)數(shù),並將運(yùn)算結(jié)果放回w累加器中。執(zhí)行前:reg = 0x7f;暫存器reg的值

43、為0x7f。w = 0x00;w累加器的值為0x00。z = n = 0;零位旗標(biāo)z與負(fù)號(hào)旗標(biāo)n皆為0。執(zhí)行後:reg = 0x7f;暫存器reg的值為0x7f。w = 0x80;w累加器的值為0x80。z = 0, n = 1;零位旗標(biāo)z等於0,因?yàn)檫\(yùn)算結(jié)果不為0x00,而負(fù)號(hào)旗標(biāo)n為1,因?yàn)檫\(yùn)算結(jié)果後最高位元等於1。範(fàn)例二:comf reg,f;將暫存器reg的值取1的補(bǔ)數(shù),並將運(yùn)算結(jié)果放回暫存器reg中。執(zhí)行前:reg = 0xff;暫存器reg的值為0xff。w = 0x00;w累加器的值為0x00。z = n = 0;零位旗標(biāo)z與負(fù)號(hào)旗標(biāo)n皆為0。執(zhí)行後:reg = 0x00;暫存器

44、reg的值為0x00。w = 0x00;w累加器的值為0x00。z = 1, n = 0;零位旗標(biāo)z等於1,因?yàn)檫\(yùn)算結(jié)果為0x00,而負(fù)號(hào)旗標(biāo)n為0,因?yàn)檫\(yùn)算結(jié)果後最高位元不等於1。指令名稱:cpfseq原 意:compare f with w, skip if f = w語(yǔ) 法:label cpfseq f運(yùn) 算 元:運(yùn)算說(shuō)明:(f) - (w), skip if (f) = (w)影響旗標(biāo):無(wú)指令說(shuō)明:將暫存器的值與w累加器的值作比較,若是兩個(gè)值相等則跳過(guò)下一個(gè)指令,若大於或是小於則往下執(zhí)行。類 別:程式流程控制指令。組 別:比較指令。範(fàn)例一:lab cpfseq reg;將暫存器reg的

45、值與w累加器的值作比較。here1 addlw 0x01;若暫存器reg的值與w累加器的值不相等,則執(zhí)行here1這行指令。here2 addlw 0x05;若暫存器reg的值與w累加器的值相等,則執(zhí)行here2這行指令。執(zhí)行前:reg = 0x04;暫存器reg的值為0x04。w = 0x04;w累加器的值為0x04。pc = 在目前l(fā)ab的位址執(zhí)行後:pc = 在here2的位址;暫存器reg的值與w累加器的值相等,因此執(zhí)行here2這行指令。指令名稱:cpfsgt原 意:compare f with w, skip if f > w語(yǔ) 法:label cpfsgt f運(yùn) 算 元:運(yùn)

46、算說(shuō)明:(f) - (w), skip if (f) > (w)影響旗標(biāo):無(wú)指令說(shuō)明:將暫存器的值與w累加器的值作比較,若是暫存器的值大於w累加器的值則跳過(guò)下一個(gè)指令,若小於或是等於則往下執(zhí)行。類 別:程式流程控制指令。組 別:比較指令。範(fàn)例一:lab cpfsgt reg;將暫存器reg的值與w累加器的值作比較。here1 addlw 0x01;若暫存器reg的值與w累加器的值小於或是等於,則執(zhí)行here1這行指令。here2 addlw 0x05;若是暫存器的值大於w累加器的值,則執(zhí)行here2這行指令。執(zhí)行前:reg = 0x10;暫存器reg的值為0x10。w = 0x04;w累

47、加器的值為0x04。pc = 在目前l(fā)ab的位址執(zhí)行後:pc = 在here2的位址;暫存器的值大於w累加器的值,因此執(zhí)行here2這行指令。指令名稱:cpfslt原 意:compare f with w, skip if f < w語(yǔ) 法:label cpfslt f運(yùn) 算 元:運(yùn)算說(shuō)明:(f) - (w), skip if (f) < (w)影響旗標(biāo):無(wú)指令說(shuō)明:將暫存器的值與w累加器的值作比較,若是暫存器的值小於w累加器的值則跳過(guò)下一個(gè)指令,若大於或是等於則往下執(zhí)行。類 別:程式流程控制指令。組 別:比較指令。範(fàn)例一:lab cpfslt reg;將暫存器reg的值與w累加器

48、的值作比較。here1 addlw 0x01;若暫存器reg的值與w累加器的值大於或是等於,則執(zhí)行here1這行指令。here2 addlw 0x05;若是暫存器的值小於w累加器的值,則執(zhí)行here2這行指令。執(zhí)行前:reg = 0x10;暫存器reg的值為0x10。w = 0x15;w累加器的值為0x15。pc = 在目前l(fā)ab的位址執(zhí)行後:pc = 在here2的位址;暫存器的值小於w累加器的值,因此執(zhí)行here2這行指令。指令名稱:daw原 意:decimal adjust w register語(yǔ) 法:label daw運(yùn) 算 元:無(wú)運(yùn)算說(shuō)明:if (w < 3:0 >) &

49、gt; 9 or dc = 1 then (w < 3:0 >) + 6 -> w < 3:0 > ;else(w < 3:0 >) -> w < 3:0 > ;if (w < 7:4 >) > 9 or dc = 1 then (w < 7:4 >) + 6 -> w < 7:4 > ;else(w < 7:4 >) -> w < 7:4 >.影響旗標(biāo):c指令說(shuō)明:將w累加器的低四位元與高四位元分別調(diào)整成bcd碼,也就是當(dāng)?shù)退奈辉闹荡箪?時(shí)就將低四位元加

50、6,然後將進(jìn)位加到高四位元去,若是小於9則維持原狀;若是高四位元的值大於9就將高四位元加6,然後將進(jìn)位加到狀態(tài)旗標(biāo)的進(jìn)位旗標(biāo)c中,若是小於9則維持原狀。類 別:程式流程控制指令。組 別:邏輯運(yùn)算bcd碼調(diào)整指令。範(fàn)例一:daw;將w累加器的低四位元與高四位元分別調(diào)整成bcd碼。執(zhí)行前:w = 0x0f;w累加器的值為0x0f。c = 0;進(jìn)位旗標(biāo)等於0。執(zhí)行後:w = 0x15;由於低四位元大於9,因此將低四位元加6並且將進(jìn)位加到高四位元。c = 0;進(jìn)位旗標(biāo)等於0。範(fàn)例二:daw;將w累加器的低四位元與高四位元分別調(diào)整成bcd碼。執(zhí)行前:w = 0xa0;w累加器的值為0xa0。c = 0;

51、進(jìn)位旗標(biāo)等於0。執(zhí)行後:w = 0x00;由於高四位元大於9,因此將高四位元加6並且將進(jìn)位加到進(jìn)位旗標(biāo)。c = 1;由於高四位元大於9,因此作bcd調(diào)整後會(huì)有進(jìn)位的情形,所以進(jìn)位旗標(biāo)等於1。範(fàn)例三:daw;將w累加器的低四位元與高四位元分別調(diào)整成bcd碼。執(zhí)行前:w = 0xaf;w累加器的值為0xaf。c = 0;進(jìn)位旗標(biāo)等於0。執(zhí)行後:w = 0x15;由於低四位元大於9,因此將低四位元加6並且將進(jìn)位加到高四位元,再者是高四位元大於9,因此將高四位元加6並且將進(jìn)位加到進(jìn)位旗標(biāo)。c = 1;由於高四位元大於9,因此作bcd調(diào)整後會(huì)有進(jìn)位的情形,所以進(jìn)位旗標(biāo)等於1。指令名稱:decf原 意:decrement f語(yǔ) 法:label decf f, d運(yùn) 算 元:運(yùn)算說(shuō)明:(f) 1 -> dest影響旗標(biāo):c, dc, n, ov, z指令說(shuō)明:將暫存器的值減1,並將運(yùn)算結(jié)果放回 d 所指定的暫存器中。若d = 0,則運(yùn)算後的結(jié)果放到w累加器中;若d = 1,則運(yùn)算後的結(jié)果放到f暫存器中,存放運(yùn)算結(jié)果的暫存器若是存放到w累

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論