Výpisy instrukcí PIC - PIC instruction listings
The OBR instrukční sada odkazuje na soubor pokynů, které Technologie mikročipů PIC nebo dsPIC mikrokontrolér podporuje. Pokyny jsou obvykle naprogramovány do Flash paměť mikroprocesoru při spuštění.
Čipy PICmicro mají a Harvardská architektura a instrukční slova jsou neobvyklé velikosti. Původně 12bitové instrukce obsahovaly 5 adresových bitů pro určení paměťového operandu a 9bitové cíle větví. Pozdější revize přidaly bity opcode, což umožnilo další bity adresy.
V následujících tabulkách instrukčních sad se čísla registrů označují jako „f“, zatímco konstanty se označují jako „k“. Čísla bitů (0–7) se vybírají pomocí „b“. Bit „d“ vybírá cíl: 0 označuje W, zatímco 1 označuje, že výsledek je zapsán zpět do zdrojového registru f. Příznaky stavu C a Z mohou být nastaveny na základě výsledku; jinak jsou nemodifikované. Přidávejte a odečítejte (ale neotáčejte) pokyny, které nastavují C, také nastaví příznak DC (digit carry), přenos z bitu 3 do bitu 4, což je užitečné pro BCD aritmetický.
Architektura
Paměťové operandy se také označují jako „registry“. Většina z nich je jednoduše univerzální úložiště (RAM), zatímco některá místa jsou vyhrazena registry speciálních funkcí. S výjimkou jediného akumulátoru (tzv Ž
), téměř všechny ostatní registry jsou mapovány do paměti, dokonce i registry jako počítadlo programů a ALU stavový registr. (Dalšími výjimkami, které nejsou mapovány do paměti, jsou zásobník zpáteční adresy a trojstát registry používané ke konfiguraci GPIO kolíky.)
Sada instrukcí neobsahuje instrukce podmíněné větve. Místo toho obsahuje instrukce podmíněného přeskočení, které způsobí ignorování následující instrukce. Podmíněné přeskočení následované bezpodmínečnou větví provede podmíněné větev. Pokyny pro přeskočení otestují jakýkoli bit libovolného registru. Jednou z možností je ALU stavový registr.
Paměťové operandy jsou specifikovány absolutní adresa; umístění je stanoveno na čas kompilace. K zajištění nepřímého adresování je k dispozici dvojice registrů speciálních funkcí:
- The soubor vyberte registr (
FSR
) je zapsán s adresou požadovaného paměťového operandu, po kterém - The nepřímý soubor Registrovat (
INDF
) se stává alias pro operanda ukázal na FSR.
Tento mechanismus také umožňuje adresovat až 256 bajtů paměti, i když sada instrukcí umožňuje pouze 5- nebo 7bitové paměťové operandy. Modely s více registry (speciální funkční registry plus RAM), než se vejdou do instrukce, poskytují více bank paměti a pro přístup k nim používají jeden ze dvou mechanismů:
- Většina základních zařízení základní úrovně a některá základní zařízení střední třídy používají k výběru aktuální banky registrů bity vyššího řádu registru pro výběr souboru.
- Novější modely mají samostatný banka vyberte registra
MOVLB
instrukce k jeho nastavení.
Procesory PIC s více než 256 slovy programu používají stránkovanou paměť. Interní počítadlo programů a zpětný zásobník jsou tak široké, jak je to nutné k adresování celé paměti, ale software v PCL
(„PC low“) registr. K dispozici je další PCLATH
(„PC latch high“) registr, který je upraven pouze softwarem. Jakákoli operace, která neurčí úplnou cílovou adresu (například 9bitová JÍT DO
nebo 8bitový zápis do registru PC) vyplní další vysoké bity z odpovídající části PCLATH. (Některé procesory PIC18 to rozšiřují nad 16 bitů s registrem PCLATU a dodávají bity 16–23.)
Základní základní zařízení (12 bitů)
1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | C ? | Z ? | Popis |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | operační kód | Různé pokyny | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP | Žádná operace (MOVW 0, W) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | VOLBA | Zkopírujte W do OPTION registru | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | SPÁT | Přejděte do pohotovostního režimu | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | CLRWDT | Restartujte časovač hlídacího psa | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | F | TRIS F | Zkopírujte W do třístavového registru (F = 1, 2 nebo 3) | |||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | k | MOVLB k* | Nastavit registraci výběru banky na k | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | VRÁTIT SE† | Návrat z podprogramu, W beze změny | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | RETFIE† | Návrat z přerušení; vrátit a povolit přerušení | ||
0 | 0 | operační kód | d | Registrovat | ALU operace: dest ← OP (f, W) | ||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | F | MOVWF F | f ← Ž | ||||||
0 | 0 | 0 | 0 | 0 | 1 | d | F | CLR F,d | Z | dest ← 0, obvykle psaný CLRW nebo CLRF F | |||||
0 | 0 | 0 | 0 | 1 | 0 | d | F | SUBWF F,d | C | Z | cíl ← f − W (cíl ← f + ~ W + 1) | ||||
0 | 0 | 0 | 0 | 1 | 1 | d | F | DECF F,d | Z | dest ← f − 1 | |||||
0 | 0 | 0 | 1 | 0 | 0 | d | F | IORWF F,d | Z | dest ← f | W, logické včetně nebo | |||||
0 | 0 | 0 | 1 | 0 | 1 | d | F | ANDWF F,d | Z | dest ← f & W, logické a | |||||
0 | 0 | 0 | 1 | 1 | 0 | d | F | XORWF F,d | Z | dest ← f ^ W, logické výlučné nebo | |||||
0 | 0 | 0 | 1 | 1 | 1 | d | F | ADDWF F,d | C | Z | dest ← f + W | ||||
0 | 0 | 1 | 0 | 0 | 0 | d | F | MOVF F,d | Z | dest ← f | |||||
0 | 0 | 1 | 0 | 0 | 1 | d | F | COMF F,d | Z | dest ← ~ f, bitový doplněk | |||||
0 | 0 | 1 | 0 | 1 | 0 | d | F | INCF F,d | Z | dest ← f + 1 | |||||
0 | 0 | 1 | 0 | 1 | 1 | d | F | DECFSZ F,d | dest ← f − 1, pak přeskočte, pokud je nula | ||||||
0 | 0 | 1 | 1 | 0 | 0 | d | F | RRF F,d | C | dest ← CARRY << 7 | f >> 1, otočit doprava přes přenášení | |||||
0 | 0 | 1 | 1 | 0 | 1 | d | F | RLF F,d | C | dest ← F << 1 | NOSTE, otočte doleva přes přenášení | |||||
0 | 0 | 1 | 1 | 1 | 0 | d | F | SWAPF F,d | dest ← f << 4 | f >> 4, vyměňte okusovat | ||||||
0 | 0 | 1 | 1 | 1 | 1 | d | F | INCFSZ F,d | dest ← f + 1, pak přeskočte, pokud je nula | ||||||
0 | 1 | opc | bit | Registrovat | Bitové operace | ||||||||||
0 | 1 | 0 | 0 | bit | F | BCF F,b | Vymazat bit b z f | ||||||||
0 | 1 | 0 | 1 | bit | F | BSF F,b | Nastavte bit b f | ||||||||
0 | 1 | 1 | 0 | bit | F | BTFSC F,b | Je-li bit b f jasný, přeskočte | ||||||||
0 | 1 | 1 | 1 | bit | F | BTFSS F,b | Přeskočit, pokud je nastaven bit b z f | ||||||||
1 | 0 | opc | k | Ovládejte převody | |||||||||||
1 | 0 | 0 | 0 | k | ZÍSKEJTE k | Nastavte W ← k, pak se vraťte z podprogramu | |||||||||
1 | 0 | 0 | 1 | k | VOLÁNÍ k | Volejte podprogram, 8bitová adresa k | |||||||||
1 | 0 | 1 | k | JÍT DO k | Přejít na 9bitovou adresu k[1] | ||||||||||
1 | 1 | opc | 8bitové okamžité | Operace s W a 8bitovým literálem: W ← OP (k, W) | |||||||||||
1 | 1 | 0 | 0 | k | MOVLW k | W ← k | |||||||||
1 | 1 | 0 | 1 | k | IORLW k | Z | W ← k | W, bitové logické nebo | ||||||||
1 | 1 | 1 | 0 | k | ANDLW k | Z | W ← k & W, bitové a | ||||||||
1 | 1 | 1 | 1 | k | XORLW k | Z | W ← k ^ W, bitové exkluzivní nebo | ||||||||
1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | C ? | Z ? | Popis |
*: Rozšířená instrukce, není k dispozici na většině 12bitových PIC. Z modelů s prodlouženou pamětí RAM většina (např. 16C5x, 16F5x) rozšiřuje adresní prostor registru pomocí bitů vysokého řádu FSR. Několik (např.PIC12F529T39A) má samostatný registr pro výběr banky, který lze nastavit pomocí této instrukce.
†: Rozšířená instrukce, k dispozici pouze u PIC se zlepšenou základní úrovní. Tyto pokyny obsahuje pouze velmi málo modelů (16F527, 16F570, MCV20A) s podporou přerušení (a čtyřúrovňovým zásobníkem). Všechny tyto modely také obsahují MOVLB.
Klony mikroelektroniky ELAN (13 bitů)
ELAN Microelectronics Corp. vytvořit řadu mikrokontrolérů podobných PICmicro s 13bitovým instrukčním slovem.[2] Pokyny jsou většinou kompatibilní se středním rozsahem 14bitových instrukčních sad, ale jsou omezeny na 6bitovou adresu registru (16 účelových registrů a 48 bajtů paměti RAM) a 10bitový programový prostor (1024 slov).
10bitové počítadlo programů je přístupné jako R2. Přečte přístup pouze k nízkým bitům a zápisy k vyšším bitům zruší. Výjimkou je instrukce TBL, která upravuje dolní bajt při zachování bitů 8 a 9.
Pokyny 7 okamžitých akumulátorů jsou přečíslovány ve vztahu k 14bitovému PICmicro, aby se vešly do 3 bitů opcode namísto 4, ale jsou tam všechny, stejně jako další instrukce k přerušení softwaru.
Existuje několik dalších různých pokynů a terminologie obsahuje určité změny (registr PICmicro OPTION se nazývá registr CONTrol; registry PICmicro TRIS 1–3 se nazývají I / O řídicí registry 5–7), ale jejich ekvivalenty jsou zřejmé.
1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | C ? | Z ? | Popis |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | operační kód | Různé pokyny | ||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP* | Žádná operace (MOVW 0, W) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | DAA† | C | Desítková úprava po přidání | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | CONTW* | Napište registr CONT (CONT ← W) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | SLEP* | Přejít do pohotovostního režimu (WDT ← 0, stopky) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | WDTC* | Restartujte hlídací časovač (WDT ← 0) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | F | IOW F† | Zkopírujte W do I / O řídicího registru (F = 5–7, 11–15) | |||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | ENI† | Povolit přerušení | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | DISI† | Zakázat přerušení | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | RET | Návrat z podprogramu, W beze změny | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | RETI | Návrat z přerušení; vrátit a povolit přerušení | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | CONTR† | Číst registr CONT (W ← CONT) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | F | IOR F† | Zkopírujte I / O řídicí registr do W (F = 5–7, 11–15) | |||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | TBL† | C | Z | PCL + = W, zachovat PC bity 8 a 9 |
0 | 0 | operační kód | d | Registrovat | ALU operace stejné jako 12- a 14-bit PIC | |||||||||||
0 | 1 | opc | bit | Registrovat | Bitové operace stejné jako 12- a 14bitový PIC | |||||||||||
1 | 0 | C | k | Ovládací převody stejné jako u 14bitového PIC | ||||||||||||
1 | 1 | operační kód | 8bitové okamžité | Operace s W a 8bitovým literálem: W ← OP (k, W) | ||||||||||||
1 | 1 | 0 | op | k | MOV / IOR / AND / XOR, stejně jako 12bitový PIC | |||||||||||
1 | 1 | 1 | 0 | 0 | k | ZÍSKEJTE k | W ← k, pak se vraťte z podprogramu | |||||||||
1 | 1 | 1 | 0 | 1 | k | SUBLW k | C | Z | W ← k − W (W ← k + ~ W + 1) | |||||||
1 | 1 | 1 | 1 | 0 | 0 | k | INT k† | Push PC, PC ← k (softwarové přerušení, obvykle k = 1) | ||||||||
1 | 1 | 1 | 1 | 1 | k | PŘIDAT k | C | Z | W ← k + W | |||||||
1 | 1 | 1 | 1 | 0 | 1 | operační kód | k | Rozšíření (nahrazující INT k pro k≥ 128 u novějších modelů)[4][5][6] | ||||||||
1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | k | STRANA k | Vyberte stránku ROM k (jako MOVLP k) | |||||
1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | k | BANKA k† | Vyberte banku RAM k | |||||
1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | k | LCALL k† | Dlouhý hovor se 17bitovou adresou (2slovná instrukce) | |||||
1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | k | LJMP k† | Skok do dálky s 17bitovou adresou (2slovná instrukce) | |||||
1 | 1 | 1 | 1 | 0 | 1 | 1 | F | TBRD F† | Číst ROM na TBHP: TBLP do zadaného registru | |||||||
1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | C ? | Z ? | Popis |
*: Stejný operační kód jako 12bitový PIC
†: Instrukce jedinečná pro instrukční sadu EM78 bez ekvivalentu PIC
Některé modely podporují více bank ROM nebo RAM podobným způsobem jako jiné mikrokontroléry PIC.
Existuje také 15bitová varianta sady instrukcí, která je téměř identická, až na to, že čísla registrů jsou zvětšena na 8 bitů a adresy volání a skoku jsou zvětšeny na 12 bitů. Další rozdíly:[7]
- Pokyny CONTW, IOW, CONTR, IOR a INT jsou smazány,
- Operace s 8bitovým literálem mají dva bity 0 přidané jako bity 8 a 9,
- Rozšíření se 4bitovým literálem mají dva bity 0 přidané jako bity 4 a 5 a
- Pokyny PAGE a BANK jsou přejmenovány na SBANK a GBANK a provádějí přepínání bank na registrech speciálních funkcí a na univerzální RAM.
Sada 15bitových instrukcí druhé generace obsahuje několik dalších pokynů:
1 4 | 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | C ? | Z ? | Popis |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | operační kód | Různé pokyny | |||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP* | Žádná operace (MOVW 0, W) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | DAA* | C | Desítková úprava po přidání | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | SLEP* | Přejít do pohotovostního režimu (WDT ← 0, stopky) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | WDTC* | Restartujte hlídací časovač (WDT ← 0) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | MULW† | 8 × 8 → 16bitové násobení | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | DIVW† | 8 ÷ 8 → 8,8-bitové rozdělení | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | ENI* | Povolit přerušení | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | DISI* | Zakázat přerušení | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 | RET* | Návrat z podprogramu, W beze změny | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 | RETI* | Návrat z přerušení; vrátit a povolit přerušení | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | RESETOVAT | Reset softwaru | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | TBWR | Flash ROM zápis | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | k | INT k | Softwarové přerušení na adrese 2 × k | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | bit | F | BTG F,b | Invertovat (přepínat) bit b z f (omezený rozsah adres) | |||||||
0 | 0 | operační kód | d | Registrovat | ALU operace stejné jako EM78 a PIC | |||||||||||||
0 | 1 | opc | bit | Registrovat | Bitové operace stejné jako EM78 a PIC | |||||||||||||
1 | 0 | C | k | Ovládací převody stejné jako EM78 a 14bitový PIC | ||||||||||||||
1 | 1 | operační kód | 0 | 0 | 8bitové okamžité | Operace s 8bitovým literálem stejně jako EM78 (kromě INT) | ||||||||||||
1 | 1 | operační kód | zaregistrujte se nebo okamžitě | Rozšíření sady instrukcí | ||||||||||||||
1 | 1 | 0 | 0 | 0 | 0 | 1 | F | JE r | Přeskočit, pokud W = f | |||||||||
1 | 1 | 0 | 0 | 0 | 1 | 0 | F | JGE r | Přeskočit, pokud W> f | |||||||||
1 | 1 | 0 | 0 | 0 | 1 | 1 | F | JLE r | Přeskočit, pokud W | |||||||||
1 | 1 | 0 | 0 | 1 | 0 | 1 | k | JE k | Přeskočit, pokud W = k | |||||||||
1 | 1 | 0 | 0 | 1 | 1 | 0 | k | (Rezervováno) | ||||||||||
1 | 1 | 0 | 0 | 1 | 1 | 1 | F | TBRDA F | Číst ROM na TBHP: TBLP do f; msbits do W. | |||||||||
1 | 1 | 0 | 1 | 0 | 0 | 1 | k | SJC adresa | Přejít na PC + sext (k) je-li sada na přenášení | |||||||||
1 | 1 | 0 | 1 | 0 | 1 | 0 | k | SJNC adresa | Přejít na PC + sext (k) pokud je přepravní | |||||||||
1 | 1 | 0 | 1 | 0 | 1 | 1 | k | SJZ adresa | Přejít na PC + sext (k) pokud je nastaven nulový příznak | |||||||||
1 | 1 | 0 | 1 | 1 | 0 | 1 | k | SJNZ adresa | Přejít na PC + sext (k) pokud je nulový příznak vymazán | |||||||||
1 | 1 | 0 | 1 | 1 | 1 | d | F | RR F/ RRA | dest ← f << 7 | f >> 1, otočit doprava bez přenášení | |||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | F | XCH F | Výměna f ↔ Z | |||||||||
1 | 1 | 1 | 0 | 0 | 1 | d | F | RL F/ RLA | dest ← f << 1 | f >> 7, otočit doleva bez přenášení | |||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | F | MUL F‡ | PRODH: PRODL ← f × W | |||||||||
1 | 1 | 1 | 0 | 1 | 1 | X | k | (Rezervováno) | ||||||||||
1 | 1 | 1 | 1 | 0 | 0 | d | F | SUBB | C | Z | dest ← f + ~ W + C, odečíst s carry | |||||||
1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | k | SBANK k* | Vyberte speciální banku pro registraci funkcí k | |||||
1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | k | GBANK k* | Vyberte banku RAM k | |||||
1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | k | LCALL k* | Dlouhý hovor s 19bitovou adresou (2slovná instrukce) | |||||
1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | k | LJMP k* | Skok do dálky s 19bitovou adresou (2slovná instrukce) | |||||
1 | 1 | 1 | 1 | 0 | 1 | 1 | F | TBRD F* | Přečtěte si ROM na TBHP: TBLP do f | |||||||||
1 | 1 | 1 | 1 | 1 | 0 | 1 | F | NEG F | C | Z | f ← −f (f ← ~ f + 1), negovat | |||||||
1 | 1 | 1 | 1 | 1 | 1 | d | F | ADC F | C | Z | dest ← f + W + C, přidat s carry |
*: Stejný operační kód jako 13bitový EM78
†: Pouze na EM89F768N; operandy a výsledky ve speciálních registrech
‡: Pouze u modelů EM88F794N, MTF213 a MTF351
Základní zařízení střední třídy (14 bitů)
Tato zařízení jsou vybavena 14bitovou kódovou pamětí a vylepšeným zásobníkem hlubokých volání na 8 úrovních. Sada instrukcí se velmi liší od základních zařízení, ale 2 další bity opcode umožňují přímé adresování 128 registrů a 2048 slov kódu. Existuje několik dalších různých pokynů a dvě další 8bitové doslovné pokyny, sčítání a odčítání. Jádro střední třídy je k dispozici u většiny zařízení označených PIC12 a PIC16.
1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | C ? | Z ? | Popis |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | operační kód | Různé pokyny | |||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP | Žádná operace (MOVW 0, W) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | VRÁTIT SE | Návrat z podprogramu, W beze změny | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | RETFIE | Návrat z přerušení | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | VOLBA | Zkopírujte W do OPTION registru (zastaralé) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | SPÁT | Přejděte do pohotovostního režimu | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | CLRWDT | Restartujte časovač hlídacího psa | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | F | TRIS F | Zkopírujte W do třístavového registru (F = 1, 2 nebo 3) (zastaralé) | |||
0 | 0 | operační kód | d | Registrovat | ALU operace: dest ← OP (f, W) | ||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | F | MOVWF F | f ← Ž | ||||||||
0 | 0 | 0 | 0 | 0 | 1 | d | F | CLR F,d | Z | dest ← 0, obvykle psaný CLRW nebo CLRF F | |||||||
0 | 0 | 0 | 0 | 1 | 0 | d | F | SUBWF F,d | C | Z | cíl ← f − W (cíl ← f + ~ W + 1) | ||||||
0 | 0 | 0 | 0 | 1 | 1 | d | F | DECF F,d | Z | dest ← f − 1 | |||||||
0 | 0 | 0 | 1 | 0 | 0 | d | F | IORWF F,d | Z | dest ← f | W, logické včetně nebo | |||||||
0 | 0 | 0 | 1 | 0 | 1 | d | F | ANDWF F,d | Z | dest ← f & W, logické a | |||||||
0 | 0 | 0 | 1 | 1 | 0 | d | F | XORWF F,d | Z | dest ← f ^ W, logické výlučné nebo | |||||||
0 | 0 | 0 | 1 | 1 | 1 | d | F | ADDWF F,d | C | Z | dest ← f + W | ||||||
0 | 0 | 1 | 0 | 0 | 0 | d | F | MOVF F,d | Z | dest ← f | |||||||
0 | 0 | 1 | 0 | 0 | 1 | d | F | COMF F,d | Z | dest ← ~ f, bitový doplněk | |||||||
0 | 0 | 1 | 0 | 1 | 0 | d | F | INCF F,d | Z | dest ← f + 1 | |||||||
0 | 0 | 1 | 0 | 1 | 1 | d | F | DECFSZ F,d | dest ← f − 1, pak přeskočte, pokud je nula | ||||||||
0 | 0 | 1 | 1 | 0 | 0 | d | F | RRF F,d | C | dest ← CARRY << 7 | f >> 1, otočit doprava přes přenášení | |||||||
0 | 0 | 1 | 1 | 0 | 1 | d | F | RLF F,d | C | dest ← f << 1 | NOSTE, otočte doleva přes přenášení | |||||||
0 | 0 | 1 | 1 | 1 | 0 | d | F | SWAPF F,d | dest ← f << 4 | f >> 4, vyměňte okusovat | ||||||||
0 | 0 | 1 | 1 | 1 | 1 | d | F | INCFSZ F,d | dest ← f + 1, pak přeskočte, pokud je nula | ||||||||
0 | 1 | opc | bit | Registrovat | Bitové operace | ||||||||||||
0 | 1 | 0 | 0 | bit | F | BCF F,b | Vymazat bit b f | ||||||||||
0 | 1 | 0 | 1 | bit | F | BSF F,b | Nastavte bit b f | ||||||||||
0 | 1 | 1 | 0 | bit | F | BTFSC F,b | Je-li bit b f jasný, přeskočte | ||||||||||
0 | 1 | 1 | 1 | bit | F | BTFSS F,b | Pokud je bit b f nastaven, přeskočte | ||||||||||
1 | 0 | C | k | Ovládejte převody | |||||||||||||
1 | 0 | 0 | k | VOLÁNÍ k | Zavolejte podprogram | ||||||||||||
1 | 0 | 1 | k | JÍT DO k | Přejít na adresu k | ||||||||||||
1 | 1 | operační kód | 8bitové okamžité | Operace s W a 8bitovým literálem: W ← OP (k, W) | |||||||||||||
1 | 1 | 0 | 0 | X | X | k | MOVLW k | W ← k | |||||||||
1 | 1 | 0 | 1 | X | X | k | ZÍSKEJTE k | W ← k, pak se vraťte z podprogramu | |||||||||
1 | 1 | 1 | 0 | 0 | 0 | k | IORLW k | Z | W ← k | W, bitové logické nebo | ||||||||
1 | 1 | 1 | 0 | 0 | 1 | k | ANDLW k | Z | W ← k & W, bitové a | ||||||||
1 | 1 | 1 | 0 | 1 | 0 | k | XORLW k | Z | W ← k ^ W, bitové exkluzivní nebo | ||||||||
1 | 1 | 1 | 0 | 1 | 1 | k | (Rezervováno) | ||||||||||
1 | 1 | 1 | 1 | 0 | X | k | SUBLW k | C | Z | W ← k − W (cíl ← k + ~ W + 1) | |||||||
1 | 1 | 1 | 1 | 1 | X | k | PŘIDAT k | C | Z | W ← k + W | |||||||
1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | C ? | Z ? | Popis |
Vylepšená základní zařízení střední třídy (14 bitů)
Vylepšená základní zařízení střední třídy představují hlubší hardware stack, další metody resetování, 14 dalších pokynů a Programovací jazyk C. optimalizace.[10] Zejména. existují dva Registry INDF
(INDF0
a INDF1
) a dva odpovídající FSR
registrovat páry (FSRnL
a FSRnH
). Speciální pokyny k použití FSRn
registry, jako jsou registry adres, s různými režimy adresování.
1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | C ? | Z ? | Popis |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | operační kód | Různé pokyny | |||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | RESETOVAT | Reset softwaru | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | VOLEJTE | Zatlačte na PC a poté přejděte na PCLATH: W | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | BRW | PC ← PC + W, relativní skok pomocí W | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | n | 0 | 0 | MOVIW ++ FSRn | Z | Přírůstek FSRn, pak W ← INDFn | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | n | 0 | 1 | MOVIW −−FSRn | Z | Snížení FSRn, pak W ← INDFn | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | n | 1 | 0 | MOVIW FSRn++ | Z | W ← INDFn, poté přírůstek FSRn | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | n | 1 | 1 | MOVIW FSRn−− | Z | W ← INDFn, poté snižte FSRn | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | n | m | MOVWI pomocí FSRn | INDFn ← W, stejné režimy jako MOVIW | |||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | k | MOVLB k | BSR ← k, přesuňte doslovně do banky vyberte registr | ||||||
1 | 1 | operační kód | d | Registrovat | ALU operace: dest ← OP (f, W) | ||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | d | F | LSLF F,d | C | Z | dest ← F << 1, logický posun doleva | ||||||
1 | 1 | 0 | 1 | 1 | 0 | d | F | LSRF F,d | C | Z | dest ← F >> 1, logický posun doprava | ||||||
1 | 1 | 0 | 1 | 1 | 1 | d | F | ASRF F,d | C | Z | dest ← F >> 1, aritmetický posun doprava | ||||||
1 | 1 | 1 | 0 | 1 | 1 | d | F | SUBWFB F,d | C | Z | dest ← F + ~ W + C, odečíst s carry | ||||||
1 | 1 | 1 | 1 | 0 | 1 | d | F | ADDWFC F,d | C | Z | dest ← F + W + C, přidejte s carry | ||||||
1 | 1 | operační kód | k | Operace s doslovným k | |||||||||||||
1 | 1 | 0 | 0 | 0 | 1 | 0 | n | k | ADDFSR FSRn,k | FSRn ← FSRn + k, přidat 6bitový posun se znaménkem | |||||||
1 | 1 | 0 | 0 | 0 | 1 | 1 | k | MOVLP k | PCLATH ← k, přesuňte 7bitový literál do vysoké západky PC | ||||||||
1 | 1 | 0 | 0 | 1 | k | PODPRSENKA k | PC ← PC + k, pobočka relativní s použitím 9bitového offsetu se znaménkem | ||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 0 | n | k | MOVIW k[FSRn] | Z | W ← [FSRn+k], 6bitový offset se znaménkem | ||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | n | k | MOVWI k[FSRn] | [FSRn+k] ← W, 6bitové posunutí se znaménkem | |||||||
1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | C ? | Z ? | Popis |
Holtek klony (14 nebo 16 bitů)
Holtek vytvořit řadu 8bitových mikrokontrolérů se 14bitovým instrukčním slovem ekvivalentním (nevylepšenému) jádru střední třídy. Všechny instrukční kódování se vejde do 14 bitů a poskytuje 7bitové adresy operandů, ale modely se 4K nebo 8K slovy programové ROM poskytují 15- nebo 16bitovou šířku ROM a rozšiřují základní 11bitovou cílovou adresu pomocí bitů 14–15 instrukce jako bity 11–12 adresy. Některé modely rozšiřují 7bitové adresy RAM pomocí bitu 14 instrukce jako bitu 7 adresy operandu.
Formát instrukce je shodný s formátem Microchip, ale opcodes jsou přiřazeny v jiném pořadí a výrobce používá různé instrukční mnemotechnické pomůcky. Akumulátor se spíše než ACC nazývá ACC a cíl je určen spíše příponou mnemotechnické pomůcky instrukce než operandem.
Kromě přiřazení opcode existují sémantické rozdíly v několika pokynech:
- Pokyny pro odečítání odečítají operand z akumulátoru, zatímco pokyny pro odečítání od Microchipu dělají opak. (Díky tomu je okamžitá instrukce odečtena nadbytečná, protože je ekvivalentní přidání záporné hodnoty.)
- Přechod na akumulátor a jasné pokyny nemění žádné příznaky.
Do 14bitového repertoáru PICmicro bylo přidáno několik operací:
- Otočte jeden bit doleva a doprava bez nést,
- Nastavit operand na všechny,
- Přeskočit, pokud je operand nulový (bez jeho zvýšení nebo snížení),
- Sčítání a odčítání pomocí carry,
- Desítková úprava po přidání pro binárně kódováno desítkově aritmetika a
- Čtení z programu ROM pro vyhledání tabulky. Toto používá registry TBHP a TBLP jako 16bitový ukazatel, načte tam slovo a uloží dolní bajt na zadané místo. Prvních 6–8 bitů načítaného slova je uloženo v registru TBLH. Druhý formulář používá pouze TBLP a čte z nejvyšší 256bajtové stránky v ROM.
- Většina modelů podporuje druhou instrukci k resetování časovače hlídacího psa, která se musí střídat s první; opakování jedné instrukce jsou ignorována. To umožňuje běh dvou nezávislých rutin hlídacího psa a jejich selhání spustí hlídacího psa.
- Společnost Holtek poskytuje dva registry nepřímého adresování, jako je vylepšený 14bitový PIC. Některé modely (např.HT66F70A) poskytují tři.
1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | Ekv. PIC | C ? | Z ? | Popis |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | operační kód | Různé pokyny | ||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP | NOP | Žádná operace (MOV A, A) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | CLR WDT1 | CLRWDT | Restartujte časovač hlídacího psa | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | STŮJ | SPÁT | Přejděte do režimu nízké spotřeby | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | RET | VRÁTIT SE | Návrat z podprogramu | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | RETI | RETFIE | Návrat z přerušení | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | CLR WDT2 | — | Restartujte časovač hlídacího psa | ||
0 | 0 | operační kód | d | adresa | ALU operace: cíl ← OP (ACC, [m]) | |||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | m | MOV [m],A | MOVWF m | [m] ← ACC | ||||||||
0 | 0 | 0 | 0 | 0 | 1 | d | m | CPLA / CPL [m] | COMF m,d | Z | dest ← ~ [m], bitový doplněk | |||||||
0 | 0 | 0 | 0 | 1 | 0 | d | m | SUB / SUBM A, [m] | ≠ SUBWF m,d | C | Z | cíl ← ACC - [m] (cíl ← ACC + ~ [m] +1) | ||||||
0 | 0 | 0 | 0 | 1 | 1 | d | m | PŘIDAT / ADDM A, [m] | ADDWF m,d | C | Z | dest ← ACC + [m] | ||||||
0 | 0 | 0 | 1 | 0 | 0 | d | m | XORA / XOR [m] | XORWF m,d | Z | dest ← ACC ^ [m], logické výlučné nebo | |||||||
0 | 0 | 0 | 1 | 0 | 1 | d | m | ORA / NEBO [m] | IORWF m,d | Z | dest ← ACC | [m], logické včetně nebo | |||||||
0 | 0 | 0 | 1 | 1 | 0 | d | m | ANDA / AND [m] | ANDWF m,d | Z | dest ← ACC & [m], logické a | |||||||
0 | 0 | 0 | 1 | 1 | 1 | 0 | m | MOV A, [m] | ≈MOVF m,0 | ACC ← [m] | ||||||||
0 | 0 | 0 | 1 | 1 | 1 | 1 | m | — | ≈MOVF m,1 | [m] ← [m] | ||||||||
0 | 0 | 1 | operační kód | 8bitové okamžité | Operace s 8bitovým literálem: ACC ← OP (ACC, k) | |||||||||||||
0 | 0 | 1 | 0 | 0 | 0 | k | (Rezervováno) | |||||||||||
0 | 0 | 1 | 0 | 0 | 1 | k | RET A,k | ZÍSKEJTE k | ACC ← k, pak se vrátit z podprogramu | |||||||||
0 | 0 | 1 | 0 | 1 | 0 | k | SUB A,k | UB SUBLW k | C | Z | ACC ← ACC - k (ACC ← ACC + ~ k + 1) | |||||||
0 | 0 | 1 | 0 | 1 | 1 | k | PŘIDAT,k | PŘIDAT k | C | Z | ACC ← ACC + k | |||||||
0 | 0 | 1 | 1 | 0 | 0 | k | XOR A,k | XORLW k | Z | ACC ← ACC ^ k, logické výlučné nebo | ||||||||
0 | 0 | 1 | 1 | 0 | 0 | k | NEBO A,k | IORLW k | Z | ACC ← ACC | k, logický včetně nebo | ||||||||
0 | 0 | 1 | 1 | 0 | 0 | k | A A,k | ANDLW k | Z | ACC ← ACC & k, logické a | ||||||||
0 | 0 | 1 | 1 | 0 | 0 | k | MOV A,k | MOVLW k | ACC ← k | |||||||||
0 | 1 | operační kód | d | adresa | ALU operace: cíl ← OP (ACC, [m]) | |||||||||||||
0 | 1 | 0 | 0 | 0 | 0 | d | m | SZA / SZ [m] | — | dest ← [m], přeskočit další instrukci, pokud je nula | ||||||||
0 | 1 | 0 | 0 | 0 | 1 | d | m | SWAPA / SWAP [m] | SWAPF m,d | dest ← [m] << 4 | [m] >> 4, vyměňte křupky | ||||||||
0 | 1 | 0 | 0 | 1 | 0 | d | m | SBC / SBCM A, [m] | ≠ SUBWFB m,d | C | Z | dest ← ACC + ~ [m] + C, odečíst s carry | ||||||
0 | 1 | 0 | 0 | 1 | 1 | d | m | ADC / ADCM A, [m] | ADDWFC m,d | C | Z | dest ← ACC + [m] + C, přidat s carry | ||||||
0 | 1 | 0 | 1 | 0 | 0 | d | m | INCA / INC [m] | INCF m,d | Z | dest ← [m] + 1 | |||||||
0 | 1 | 0 | 1 | 0 | 1 | d | m | DECA / DEC [m] | DECF m,d | Z | dest ← [m] - 1 | |||||||
0 | 1 | 0 | 1 | 1 | 0 | d | m | SIZA / SIZ [m] | INCFSZ m,d | dest ← [m] + 1, pak přeskočte, pokud je nula | ||||||||
0 | 1 | 0 | 1 | 1 | 1 | d | m | SDZA / SDZ [m] | DECFSZ m,d | dest ← [m] - 1, pak přeskočte, pokud je nula | ||||||||
0 | 1 | 1 | 0 | 0 | 0 | d | m | RLA / RL [m] | — | dest ← [m] << 1 | m >> 7, otočit doleva o 1 bit | ||||||||
0 | 1 | 1 | 0 | 0 | 1 | d | m | RRA / RR [m] | — | dest ← [m] << 7 | m >> 1, otočit doprava o 1 bit | ||||||||
0 | 1 | 1 | 0 | 1 | 0 | d | m | RLCA / RLC [m] | RLF m,d | C | dest ← [m] << 1 | C, otočit doleva přes nést | |||||||
0 | 1 | 1 | 0 | 1 | 1 | d | m | RRCA / RRC [m] | RRF m,d | C | dest ← C << 7 | [m] >> 1, otočte doprava skrz nošení | |||||||
0 | 1 | 1 | 1 | operační kód | adresa | Zvláštní operace: [m] ← speciální | ||||||||||||
0 | 1 | 1 | 1 | 0 | 0 | X | m | (Rezervováno) | ||||||||||
0 | 1 | 1 | 1 | 0 | 1 | 0 | m | TABRDC [m] | — | TBLH: [m] ← ROM paměť na TBHP: TBLP, vyhledávání v tabulce | ||||||||
0 | 1 | 1 | 1 | 0 | 1 | 1 | m | TABRDL [m] | — | Číst z poslední stránky ROM na 0xff: TBLP | ||||||||
0 | 1 | 1 | 1 | 1 | 0 | 0 | m | (Rezervováno) | ||||||||||
0 | 1 | 1 | 1 | 1 | 0 | 1 | m | DAA [m] | — | C | [m] ← DAA (ACC), desítková úprava po přidání BCD | |||||||
0 | 1 | 1 | 1 | 1 | 1 | 0 | m | CLR [m] | ≈CLRF m | [m] ← 0 | ||||||||
0 | 1 | 1 | 1 | 1 | 1 | 1 | m | NASTAVIT [m] | — | [m] ← 255 | ||||||||
1 | 0 | C | k | Ovládejte převody | ||||||||||||||
1 | 0 | 0 | k | VOLÁNÍ k | VOLÁNÍ k | Zavolejte podprogram | ||||||||||||
1 | 0 | 1 | k | JMP k | JÍT DO k | Přejít na adresu k | ||||||||||||
1 | 1 | opc | bit | adresa | Bitové operace | |||||||||||||
1 | 1 | 0 | 0 | bit | m | NASTAVIT [m].b | BSF m,b | Nastavit bit b [m] | ||||||||||
1 | 1 | 0 | 1 | bit | m | CLR [m].b | BCF m,b | Vymazat bit b [m] | ||||||||||
1 | 1 | 1 | 0 | bit | m | SNZ [m].b | BTFSS m,b | Přeskočit, pokud je nastaven bit b [m] | ||||||||||
1 | 1 | 1 | 1 | bit | m | SZ [m].b | BTFSC m,b | Je-li bit b [m] jasný, přeskočte | ||||||||||
1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | Ekv. PIC | C ? | Z ? | Popis |
Mikrokontroléry Padauk (13, 14, 15 nebo 16 bitů)
Padauk Technology Co., Ltd. učinit z řady mikrokontrolérů podobných PIC pozoruhodnou extrémně nízkou cenu, počínaje od 0,033 USD v množství,[12] s mnoha modely stojí méně než 0,10 USD.[13]
Ačkoli jsou jasně odvozeny z PIC, existují určité významné rozdíly:
- Nepoužívají mechanismus FSR / INDF pro provádění nepřímého přístupu do paměti, místo toho mají nepřímé načtení a ukládání instrukcí, které používají jako ukazatel libovolné umístění RAM;
- používají zásobník volání založený na paměti RAM s registrem ukazatele zásobníku;
- the nést vlajku používá pro odečtení konvenci "vypůjčit bit", spíše než konvenci "carry bit" používanou Microchipem;
- obsahují také podepsané příznak přetečení, které se stejně jako číslice přenášejí, se nastavují sčítáním, odčítáním a srovnáváním instrukcí (každá instrukce, která nastavuje příznak carry až na pokyny pro směny);
- mají samostatné mezery adres RAM a I / O (64, respektive 32 bajtů v 13bitové instrukční sadě);
- bitové operace jsou omezeny na I / O prostor a prvních 16 adres RAM;
- instrukce jednoho operandu se zdrojem paměti a cílem akumulátoru jsou vynechány;
- jsou poskytovány pokyny pro jeden operand se zdrojem a cílem akumulátoru;
- operace odčítání vypočítají cíl - zdroj, výměnu vstupních operandů v závislosti na cíli;
- fungují rychleji a vyžadují 1 cyklus pro většinu pokynů a 2 cykly pro převody řízení; a
- některé modely podporují časové multithreading, mající více kontextů provádění, jejichž provedení je prokládáno.
1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | OBR ekvivalent | C ? | Z ? | Popis |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | operační kód | Různé pokyny | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP | NOP | Žádná operace | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | (Rezervováno) | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | X | (Rezervováno) | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | X | (Rezervováno) | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | LDSPTL | — | ← ROM [[SP]], načte nízký / vysoký bajt slova ROM pomocí 16bitového ukazatele v horní části zásobníku | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | LDSPTH | — | |||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | — | (Rezervováno) | ||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | operační kód | Pokyny jednoho operandu na akumulátoru Stejné jako instrukce jednoho operandu v paměti (níže) kromě | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | PCADD A | ≈ADDWF PCL, 1 | PC ← PC + A, přidat do počítadla programu | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | SWAP A | — | A ← A << 4 | A >> 4, vyměňte nibble | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | — | (Rezervováno) | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | operační kód | Pokyny k ovládání systému | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | WDRESET | CLRWDT | Restartujte časovač hlídacího psa | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | (Rezervováno) | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | PUSHAF | — | Zatlačte A a poté označte na vrcholu zásobníku | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | POPAF | — | C | Z | Popové vlajky pak A z vrcholu zásobníku |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | (Rezervováno) | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | RESETOVAT | RESETOVAT | Reset softwaru | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | STOPSYS | SPÁT | Přepnutí do pohotovostního režimu (hodiny zastaveny) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | STOPEXE | — | Přepnutí do pohotovostního režimu (hodiny běží) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | ENGINT | BSF INTCON, GIE | Povolit přerušení | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | DISGINT | BCF INTCON, GIE | Zakázat přerušení | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | RET | VRÁTIT SE | Návrat z podprogramu, A beze změny | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | RETI | RETFIE | Návrat z přerušení | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | MUL | — | MULRH: A ← A × MULOP (ne všechny modely) | ||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | (Rezervováno) | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | X | (Rezervováno) | ||||
0 | 0 | 0 | 0 | 0 | operační kód | ioaddr | Bajtové operace I / O | ||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | ioaddr | XOR ioaddr,A | — | IO [ioaddr] ← A ^ IO [adresa] | ||||||
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | ioaddr | MOV ioaddr,A | — | IO [ioaddr] ← A | ||||||
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | ioaddr | MOV A,ioaddr | — | Z | A ← IO [ioaddr] | |||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | C | adresa | C | 16bitové operace (omezená adresa RAM, sudá) | |||||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | adresa | 0 | STT16 adresa | — | Timer16 ← [adresa] | |||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | adresa | 1 | LDT16 adresa | — | [adresa] ← Časovač16 | |||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | adresa | 0 | IDXM adresa,A | — | [[adresa]] ← A, adresa nepřímé paměti | |||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | adresa | 1 | IDXM A,adresa | — | ← [[adresa]], adresa nepřímé paměti | |||||
0 | 0 | 0 | 0 | 1 | k | Vrátit doslovnou konstantu | |||||||||||
0 | 0 | 0 | 0 | 1 | k | RET k | ZÍSKEJTE k | A ← k, pak se vraťte z podprogramu | |||||||||
0 | 0 | 0 | 1 | C | bit | C | adresa | Bitové operace s RAM (pouze prvních 16 bajtů) | |||||||||
0 | 0 | 0 | 1 | 0 | bit | 0 | adresa | T0SN adresa.b | BTFSC adresa,b | Přeskočit, pokud bit b z [adresa] je jasné | |||||||
0 | 0 | 0 | 1 | 0 | bit | 1 | adresa | T1SN adresa.b | BTFSS adresa,b | Přeskočit, pokud bit b z [adresa] je nastaven | |||||||
0 | 0 | 0 | 1 | 1 | bit | 0 | adresa | SET0 adresa.b | BCF adresa,b | Čistý bit b z [adresa] | |||||||
0 | 0 | 0 | 1 | 1 | bit | 1 | adresa | SET1 adresa.b | BSF adresa,b | Nastavit bit b z [adresa] | |||||||
0 | 0 | 1 | d | operační kód | adresa | ALU operace mezi A a pamětí | |||||||||||
0 | 0 | 1 | 0 | 0 | 0 | 0 | adresa | PŘIDAT adresa,A | ADDWF adresa,1 | C | Z | [adresa] ← [adresa] + A | |||||
0 | 0 | 1 | 0 | 0 | 0 | 1 | adresa | SUB adresa,A | SUBWF adresa,1 | C | Z | [adresa] ← [adresa] - A | |||||
0 | 0 | 1 | 0 | 0 | 1 | 0 | adresa | ADDCadresa,A | ADDWFC adresa,1 | C | Z | [adresa] ← [adresa] + A + C | |||||
0 | 0 | 1 | 0 | 0 | 1 | 1 | adresa | SUBCadresa,A | ≈SUBWFBadresa,1 | C | Z | [adresa] ← [adresa] - A - C. | |||||
0 | 0 | 1 | 0 | 1 | 0 | 0 | adresa | A adresa,A | ANDWF adresa,1 | Z | [adresa] ← [adresa] & A, logické a | ||||||
0 | 0 | 1 | 0 | 1 | 0 | 1 | adresa | NEBO adresa,A | IORWF adresa,1 | Z | [adresa] ← [adresa] | A, logické včetně nebo | ||||||
0 | 0 | 1 | 0 | 1 | 1 | 0 | adresa | XOR adresa,A | XORWF adresa,1 | Z | [adresa] ← [adresa] ^ A, logické výlučné nebo | ||||||
0 | 0 | 1 | 0 | 1 | 1 | 1 | adresa | MOV adresa,A | MOVWF adresa | [adresa] ← A | |||||||
0 | 0 | 1 | 1 | 0 | 0 | 0 | adresa | PŘIDAT,adresa | ADDWF adresa,0 | C | Z | A ← A + [adresa] | |||||
0 | 0 | 1 | 1 | 0 | 0 | 1 | adresa | SUB A,adresa | ≠ SUBWF adresa,0 | C | Z | A ← A - [adresa] | |||||
0 | 0 | 1 | 1 | 0 | 1 | 0 | adresa | ADDC A,adresa | ADDWFC adresa,0 | C | Z | A ← A + [adresa] + C. | |||||
0 | 0 | 1 | 1 | 0 | 1 | 1 | adresa | SUBC A,adresa | ≠ SUBWFBadresa,0 | C | Z | A ← A - [adresa] - C. | |||||
0 | 0 | 1 | 1 | 1 | 0 | 0 | adresa | A A,adresa | ANDWF adresa,0 | Z | A ← [A] & [adresa], logické a | ||||||
0 | 0 | 1 | 1 | 1 | 0 | 1 | adresa | NEBO A,adresa | IORWF adresa,0 | Z | A ← A | [adresa], logické včetně nebo | ||||||
0 | 0 | 1 | 1 | 1 | 1 | 0 | adresa | XOR A,adresa | XORWF adresa,0 | Z | A ← A ^ [adresa], logické výlučné nebo | ||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | adresa | MOV A,adresa | MOVF adresa,0 | Z | A ← [adresa] | ||||||
0 | 1 | 0 | operační kód | adresa | Operace jednoho operandu v paměti | ||||||||||||
0 | 1 | 0 | 0 | 0 | 0 | 0 | adresa | ADDC adresa | — | C | Z | [adresa] ← [adresa] + C. | |||||
0 | 1 | 0 | 0 | 0 | 0 | 1 | adresa | SUBC adresa | — | C | Z | [adresa] ← [adresa] - C. | |||||
0 | 1 | 0 | 0 | 0 | 1 | 0 | adresa | IZSN adresa | INCFSZ adresa,1 | C | Z | [adresa] ← [adresa] + 1, pak přeskočte, pokud je nula | |||||
0 | 1 | 0 | 0 | 0 | 1 | 1 | adresa | DZSN adresa | DECFSZ adresa,1 | C | Z | [adresa] ← [adresa] - 1, pak přeskočte, pokud je nula | |||||
0 | 1 | 0 | 0 | 1 | 0 | 0 | adresa | INC adresa | INCF adresa,1 | C | Z | [adresa] ← [adresa] + 1 | |||||
0 | 1 | 0 | 0 | 1 | 0 | 1 | adresa | DEC adresa | DECF adresa,1 | C | Z | [adresa] ← [adresa] − 1 | |||||
0 | 1 | 0 | 0 | 1 | 1 | 0 | adresa | PRŮHLEDNÁ adresa | ≈CLRF adresa | [adresa] ← 0 | |||||||
0 | 1 | 0 | 0 | 1 | 1 | 1 | adresa | XCH adresa | — | A ← [adresa], [adresa] ← A | |||||||
0 | 1 | 0 | 1 | 0 | 0 | 0 | adresa | NE adresa | COMF adresa,1 | Z | [adresa] ← ~[adresa], bitový doplněk | ||||||
0 | 1 | 0 | 1 | 0 | 0 | 1 | adresa | NEG adresa | — | Z | [adresa] ← −[adresa], negovat | ||||||
0 | 1 | 0 | 1 | 0 | 1 | 0 | adresa | SR adresa | ≈LSRF adresa,1 | C | [adresa] ← [adresa] >> 1, logický posun doprava | ||||||
0 | 1 | 0 | 1 | 0 | 1 | 1 | adresa | SL adresa | ≈LSLF adresa,1 | C | [adresa] ← [adresa] << 1, posunout doleva | ||||||
0 | 1 | 0 | 1 | 1 | 0 | 0 | adresa | SRC adresa | RRF adresa,1 | C | [adresa] ← C << 7 | [adresa] >> 1, otočit doprava přes přenášení | ||||||
0 | 1 | 0 | 1 | 1 | 0 | 1 | adresa | SLC adresa | RLF adresa,1 | C | [adresa] ← [adresa] << 1 | C, otočit doleva přes nést | ||||||
0 | 1 | 0 | 1 | 1 | 1 | 0 | adresa | CEQSN adresa | — | C | Z | Vypočítat A - [adresa], pak přeskočte, pokud je nula | |||||
0 | 1 | 0 | 1 | 1 | 1 | 1 | adresa | (Rezervováno) | |||||||||
0 | 1 | 1 | opc | bit | adresa | Bitové operace s I / O | |||||||||||
0 | 1 | 1 | 0 | 0 | bit | adresa | T0SNioaddr.b | BTFSC ioaddr,b | Přeskočit, pokud bit b z [ioaddr] je jasné | ||||||||
0 | 1 | 1 | 0 | 1 | bit | adresa | T1SNioaddr.b | BTFSS ioaddr,b | Přeskočit, pokud bit b z [ioaddr] je nastaven | ||||||||
0 | 1 | 1 | 1 | 0 | bit | adresa | SET0 ioaddr.b | BCF ioaddr,b | Čistý bit b z [ioaddr] | ||||||||
0 | 1 | 1 | 1 | 1 | bit | adresa | SET1 ioaddr.b | BSF ioaddr,b | Nastavit bit b z [ioaddr] | ||||||||
1 | 0 | operační kód | doslovný | Doslovné operace: A ← OP (A,k) | |||||||||||||
1 | 0 | 0 | 0 | 0 | k | PŘIDAT,k | PŘIDAT k | C | Z | A ← A + k | |||||||
1 | 0 | 0 | 0 | 1 | k | SUB A,k | UB SUBLW k | C | Z | A ← A - k | |||||||
1 | 0 | 0 | 1 | 0 | k | CEQSN A,k | — | C | Z | Vypočítat A - k, pak přeskočte, pokud je nula | |||||||
1 | 0 | 0 | 1 | 1 | k | (Rezervováno) | |||||||||||
1 | 0 | 1 | 0 | 0 | k | A A,k | ≈ANDLW k | Z | A ← A & k | ||||||||
1 | 0 | 1 | 0 | 1 | k | NEBO A,k | ≈IORLW k | Z | A ← A | k | ||||||||
1 | 0 | 1 | 1 | 0 | k | XOR A,k | ≈XORLW k | Z | A ← A ^ k | ||||||||
1 | 0 | 1 | 1 | 1 | k | MOV A,k | MOVLW k | A ← k | |||||||||
1 | 1 | C | k | Ovládací převody: PC ← k | |||||||||||||
1 | 1 | 0 | k | JÍT DO k | JÍT DO k | PC ← k | |||||||||||
1 | 1 | 1 | k | VOLÁNÍ k | VOLÁNÍ k | Stiskněte PC a poté PC ← k | |||||||||||
1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | OBR ekvivalent | C ? | Z ? | Popis |
14-, 15- a 16-bitové instrukční sady se primárně liší tím, že mají širší adresová pole, i když jsou provedeny některé změny kódování, které umožňují několik dalších instrukcí (například CNEQSN
, který provede porovnání a přeskočí, pokud ne rovnat se.)
1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | OBR ekvivalent | C ? | Z ? | Popis |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | operační kód | Různé pokyny stejné jako 13bitové | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | — | (Rezervováno) | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | — | (Rezervováno) | ||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | — | (Rezervováno) | ||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | operační kód | Pokyny jednoho operandu na stejné jako 13bitové | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | operační kód | Pokyny k ovládání systému jsou stejné jako u 13bitových | |||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | — | (Rezervováno) | |||||||||
0 | 0 | 0 | 0 | 0 | operační kód | adresa | Byte-wide I / O operations same as 13-bit, but opcodes changed | |||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | ioaddr | XOR ioaddr,A | — | IO [ioaddr] ← A ^ IO [adresa] | |||||||
0 | 0 | 0 | 0 | 0 | 1 | 0 | — | (Rezervováno) | ||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | ioaddr | MOV ioaddr,A | — | IO [ioaddr] ← A | |||||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | ioaddr | MOV A,ioaddr | — | Z | A ← IO [ioaddr] | ||||||
0 | 0 | 0 | 0 | 1 | 0 | k | Návrat doslovná konstanta stejná jako 13bitová | |||||||||||
0 | 0 | 0 | 0 | 1 | 1 | C | adresa | C | 16bitové operace stejné jako 13bitové, ale 128bajtový rozsah | |||||||||
0 | 0 | 0 | 1 | 0 | bit | adresa | Zkopírujte bit do I / O | |||||||||||
0 | 0 | 0 | 1 | 0 | bit | adresa | SWAPCioaddr.b | — | C | Zaměnit nosit s [ioaddr] bit b | ||||||||
0 | 0 | 0 | 1 | 1 | C | d | adresa | Další operace se 2 operandy | ||||||||||
0 | 0 | 0 | 1 | 1 | 0 | 0 | adresa | COMP A,adresa | — | C | Z | A - [adresa], příznaky nastaveny, výsledek zahozen | ||||||
0 | 0 | 0 | 1 | 1 | 0 | 1 | adresa | COMP adresa,A | — | C | Z | [adresa] - A, příznaky nastaveny, výsledek zahozen | ||||||
0 | 0 | 0 | 1 | 1 | 1 | 0 | adresa | NADD A,adresa | SUBWFadresa,0 | C | Z | A ← [adresa] + −A (A ← [adresa] + ~ A + 1) | ||||||
0 | 0 | 0 | 1 | 1 | 1 | 1 | adresa | NADD adresa,A | — | C | Z | [adresa] ← A + - [adresa] ([adresa] ← A + ~ [adresa] + 1) | ||||||
0 | 0 | 1 | d | operační kód | adresa | 2-operandové instrukce stejné jako 13-bit | ||||||||||||
0 | 1 | 0 | operační kód | adresa | Operace jednoho operandu v paměti stejné jako 13bitové plus CNEQSN | |||||||||||||
0 | 1 | 0 | 1 | 1 | 1 | 1 | adresa | CNEQSN adresa | — | C | Z | Vypočítat A - [adresa], pak přeskočte, pokud není nula | ||||||
0 | 1 | 1 | opc | bit | ioaddr | Bitové operace s I / O stejné jako 13bitové | ||||||||||||
1 | 0 | 0 | opc | bit | adresa | Bitové operace s pamětí stejnou jako 13bitový, ale 64bajtový rozsah | ||||||||||||
1 | 0 | 1 | operační kód | doslovný | Doslovné operace stejné jako 13bitové plus CNEQSN | |||||||||||||
1 | 0 | 1 | 0 | 1 | 1 | k | CNEQSN A,k | — | C | Z | Vypočítat A - k, pak přeskočte, pokud není nula | |||||||
1 | 1 | C | k | Ovládací převody stejné jako 13bitové | ||||||||||||||
1 13 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | OBR ekvivalent | C ? | Z ? | Popis |
PIC18 špičková základní zařízení (16 bitů)
V roce 2000 představil Microchip architekturu PIC18.[2] Na rozdíl od řady 17 se ukázalo jako velmi populární a v současné době se vyrábí velké množství variant zařízení. Na rozdíl od dřívějších zařízení, která byla častěji naprogramována v sestavě, se C stal převládajícím vývojovým jazykem.[19]
PIC18 má 12bitový RAM adresní prostor, rozdělený na 16 stránek s 256 bajty. 8bitový F
pole určuje adresu v kombinaci s A
bit a 4bitový bankovní výběrový registr (BSR
). Li A
= 0, BSR
je ignorován a F
pole je rozšířeno znaménkem na rozsah 0x000–0x07F (globální RAM) nebo 0xF80–0xFFF (registry speciálních funkcí). Li A
= 1, F
pole je rozšířeno o BSR
vygenerovat 12bitovou adresu.
PIC18 rozšiřuje FSR
/INDF
mechanismus používaný v předchozích procesorech PICmicro pro nepřímé adresování dvěma způsoby:
Nejprve poskytuje tři soubor vyberte registry. The FSRn
registry mají délku 12 bitů (každý je rozdělen na dvě 8bitové části) FSR0L
přes FSR2H
) a přístup k odpovídajícím INDFn
Registrovat (INDF0
přes INDF2
) funguje jako alias pro adresovaný bajt.
Zadruhé existují režimy adresování. Pro každou ze tří není jen jedna INDFn
registr, ale pět a ten použitý určuje režim adresování:
INDFn
: Přístup k bajtu na místěFSRn
POSTDECn
: Přístup k bytu vFSRn
, pak sníženíFSRn
POSTINCn
: Přístup k bytu vFSRn
, poté přírůstekFSRn
PREINCn
: PřírůstekFSRn
, poté přistupujte k bytu s přírůstkemFSRn
PLUSWn
: Přístup k bytu vFSRn + Ž
(indexované adresování).
Existují také pokyny k přímému načtení páru FSR s 12bitovou adresou a MOVFF
instrukce, která přesouvá bajt mezi dvěma 12bitovými adresami.
1 5 | 1 4 | 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | C ? | Z ? | N ? | Popis | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | operační kód | Různé pokyny | ||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP | Žádná operace | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | SPÁT | Přejděte do pohotovostního režimu | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | CLRWDT | Restartujte časovač hlídacího psa | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | TAM | Zatlačte PC na hromádku | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | POP | Vysuňte (a zahoďte) horní část zásobníku | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | DAW | C | Desetinná úprava W | |||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | TBLRD ∗ | Přečtená tabulka: TABLAT ← mem [TBLPTR] | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | TBLRD ∗ + | Tabulka přečtena s přírůstkem | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | TBLRD ∗ - | Tabulka přečtená s následným odečtením | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | TBLRD + ∗ | Tabulka přečtena s předběžným přírůstkem | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | mod | TBLWR | Zápis do tabulky, stejné režimy jako TBLRD | |||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | s | RETFIE [, RYCHLE] | Návrat z přerušení | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | s | NÁVRAT [, RYCHLE] | Návrat z podprogramu | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | VOLEJTE* | Zatlačte na PC, přejděte na PCLATU: PCLATH: W | ||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | RESETOVAT | 0 | 0 | 0 | Reset softwaru | |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | —0— | k | MOVLB | Přesunout doslovně k do banky vyberte registr | ||||||||||
0 | 0 | 0 | 0 | 1 | operační kód | doslovný | Doslovné operace: W ← OP (k, W) | ||||||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | k | SUBLW k | W ← k - Ž | |||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | k | IORLW k | W ← k | W, logické včetně nebo | |||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | k | XORLW k | W ← k ^ W, exkluzivní nebo | |||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | k | ANDLW k | W ← k & W, logické a | |||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | k | ZÍSKEJTE k | ZPĚT W ← k | |||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | k | MULLW k | W ← k × W | |||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | k | MOVLW k | W ← k | |||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | k | PŘIDAT k | W ← k + W | |||||||||||
0 | operační kód | d | A | Registrovat | ALU operace: dest ← OP (f, W) | ||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | A | F | MULWF F,A | PRODH: PRODL ← W × f (bez znaménka) | |||||||||||
0 | 0 | 0 | 0 | 0 | 1 | d | A | F | DECF F,d,A | C | Z | N | dest ← f - 1 | ||||||||
0 | 0 | 0 | 1 | 0 | 0 | d | A | F | IORWF F,d,A | Z | N | dest ← f | W, logické včetně nebo | |||||||||
0 | 0 | 0 | 1 | 0 | 1 | d | A | F | ANDWF F,d,A | Z | N | dest ← f & W, logické a | |||||||||
0 | 0 | 0 | 1 | 1 | 0 | d | A | F | XORWF F,d,A | Z | N | dest ← f ^ W, exkluzivní nebo | |||||||||
0 | 0 | 0 | 1 | 1 | 1 | d | A | F | COMF F,d,A | Z | N | dest ← ~ f, bitový doplněk | |||||||||
0 | 0 | 1 | 0 | 0 | 0 | d | A | F | ADDWFC F,d,A | C | Z | N | dest ← f + W + C | ||||||||
0 | 0 | 1 | 0 | 0 | 1 | d | A | F | ADDWF F,d,A | C | Z | N | dest ← f + W | ||||||||
0 | 0 | 1 | 0 | 1 | 0 | d | A | F | INCF F,d,A | C | Z | N | dest ← f + 1 | ||||||||
0 | 0 | 1 | 0 | 1 | 1 | d | A | F | DECFSZ F,d,A | dest ← f - 1, přeskočit, pokud 0 | |||||||||||
0 | 0 | 1 | 1 | 0 | 0 | d | A | F | RRCF F,d,A | C | Z | N | dest ← f >> 1 | C << 7, otočit doprava přes carry | ||||||||
0 | 0 | 1 | 1 | 0 | 1 | d | A | F | RLCF F,d,A | C | Z | N | dest ← f << 1 | C, otočit doleva přes nést | ||||||||
0 | 0 | 1 | 1 | 1 | 0 | d | A | F | SWAPF F,d,A | dest ← f << 4 | f >> 4, vyměňte okusovat | |||||||||||
0 | 0 | 1 | 1 | 1 | 1 | d | A | F | INCFSZ F,d,A | dest ← f + 1, přeskočit, pokud 0 | |||||||||||
0 | 1 | 0 | 0 | 0 | 0 | d | A | F | RRNCF F,d,A | Z | N | dest ← f >> 1 | f << 7, otočit doprava (bez nošení) | |||||||||
0 | 1 | 0 | 0 | 0 | 1 | d | A | F | RLNCF F,d,A | Z | N | dest ← f << 1 | f >> 7, otočit doleva (bez nošení) | |||||||||
0 | 1 | 0 | 0 | 1 | 0 | d | A | F | INFSNZ F,d,A | dest ← f + 1, přeskočit, pokud ne 0 | |||||||||||
0 | 1 | 0 | 0 | 1 | 1 | d | A | F | DCFSNZ F,d,A | dest ← f - 1, přeskočit, pokud ne 0 | |||||||||||
0 | 1 | 0 | 1 | 0 | 0 | d | A | F | MOVF F,d,A | Z | N | dest ← f | |||||||||
0 | 1 | 0 | 1 | 0 | 1 | d | A | F | SUBFWB F,d,A | C | Z | N | dest ← W + ~ f + C (dest ← W - f - C̅) | ||||||||
0 | 1 | 0 | 1 | 1 | 0 | d | A | F | SUBWFB F,d,A | C | Z | N | dest ← f + ~ W + C (dest ← f - W - C̅) | ||||||||
0 | 1 | 0 | 1 | 1 | 1 | d | A | F | SUBWF F,d,A | C | Z | N | dest ← f - W (dest ← f + ~ W + 1) | ||||||||
0 | 1 | 1 | 0 | operační kód | A | Registrovat | ALU operace, nepište na W | ||||||||||||||
0 | 1 | 1 | 0 | 0 | 0 | 0 | A | F | CPFSLT F,A | přeskočit, pokud f | |||||||||||
0 | 1 | 1 | 0 | 0 | 0 | 1 | A | F | CPFSEQ F,A | přeskočit, pokud f == W | |||||||||||
0 | 1 | 1 | 0 | 0 | 1 | 0 | A | F | CPFSGT F,A | přeskočit, pokud f> W (bez znaménka) | |||||||||||
0 | 1 | 1 | 0 | 0 | 1 | 1 | A | F | TSTFSZ F,A | přeskočit, pokud f == 0 | |||||||||||
0 | 1 | 1 | 0 | 1 | 0 | 0 | A | F | NAST F,A | f ← 0xFF | |||||||||||
0 | 1 | 1 | 0 | 1 | 0 | 1 | A | F | CLRF F,A | 1 | f ← 0, PSR.Z ← 1 | ||||||||||
0 | 1 | 1 | 0 | 1 | 1 | 0 | A | F | NEGF F,A | C | Z | N | f ← −f | ||||||||
0 | 1 | 1 | 0 | 1 | 1 | 1 | A | F | MOVWF F,A | f ← Ž | |||||||||||
0 | 1 | 1 | 1 | bit | A | F | BTG F,b,A | Přepnout bit b f | |||||||||||||
1 | 0 | opc | bit | A | Registrovat | Bitové operace | |||||||||||||||
1 | 0 | 0 | 0 | bit | A | F | BSF F,b,A | Nastavte bit b f | |||||||||||||
1 | 0 | 0 | 1 | bit | A | F | BCF F,b,A | Vymazat bit b z f | |||||||||||||
1 | 0 | 1 | 0 | bit | A | F | BTFSS F,b,A | Přeskočit, pokud je nastaven bit b z f | |||||||||||||
1 | 0 | 1 | 1 | bit | A | F | BTFSC F,b,A | Je-li bit b f jasný, přeskočte | |||||||||||||
1 | 1 | 0 | opc | adresa | Operace s velkou adresou | ||||||||||||||||
1 | 1 | 0 | 0 | zdroj | MOVFF s,d | Přesunout absolutně | |||||||||||||||
1 | 1 | 1 | 1 | destinace | |||||||||||||||||
1 | 1 | 0 | 1 | 0 | n | PODPRSENKA n | Větvení do PC + 2n | ||||||||||||||
1 | 1 | 0 | 1 | 1 | n | RCALL n | Volání podprogramu do PC + 2n | ||||||||||||||
1 | 1 | 1 | 0 | 0 | kond | n | Podmíněná větev (do PC + 2n) | ||||||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | n | B Z n | Pobočka, pokud je nastaven PSR.Z. | |||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | n | BNZ n | Pobočka, pokud je jasný PSR.Z. | |||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | n | před naším letopočtem n | Pobočka, pokud je nastaven PSR.C | |||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | n | BNC n | Pobočka, pokud je jasné PSR.C. | |||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | n | BOV n | Pobočka, pokud je nastaven PSR.V. | |||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | n | BNOV n | Pobočka, pokud je jasný PSR.V. | |||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | n | BN n | Pobočka, pokud je nastaven PSR.N. | |||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | n | BNN n | Pobočka, pokud je jasný PSR.N. | |||||||||||
1 | 1 | 1 | 0 | 1 | 0 | opc | k | Rozšíření pro použití FSR2 jako ukazatele zásobníku softwaru* | |||||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | n | k | ADDFSR n,k* | FSRn + = k | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | k | ADDULNK k* | FSR2 + = k, pop PC | |||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | n | k | SUBFSR n,k* | FSRn - = k | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | k | SUBULNK k* | FSR2 - = k, pop PC | |||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | k | PUSHL k* | [FSR2] ← k, snížení FSR2 | |||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | s | MOVSF src,F * | f ← FSR2 [s] | ||||||||||
1 | 1 | 1 | 1 | F | |||||||||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | s | MOVSS src,dst* | FSR2 [d] ← FSR2 [s] | ||||||||||
1 | 1 | 1 | 1 | —0— | d | ||||||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | opc | k | 2-slovní pokyny | |||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 0 | s | k (lsbits) | VOLÁNÍ k[, RYCHLE] | Volat podprogram (20bitová adresa) | |||||||||||
1 | 1 | 1 | 1 | k (msbitů) | |||||||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | F | k (msb) | LFSR F,k | Přesuňte 12bitový literál na FSRF | ||||||||
1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | k (lsbits) | |||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | k (lsbits) | JÍT DO k | Absolutní skok, PC ← k (20bitová adresa) | |||||||||||
1 | 1 | 1 | 1 | k (msbitů) | |||||||||||||||||
1 | 1 | 1 | 1 | k | Žádná operace, druhé slovo dvouslovných pokynů | ||||||||||||||||
1 5 | 1 4 | 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | C ? | Z ? | N ? | Popis |
*: Tyto rozšířené pokyny jsou k dispozici pouze u některých modelů a pouze v případě, že XINST
je nastaven konfigurační bit.
16bitové mikroprocesory PIC24 a dsPIC
V roce 2001 společnost Microchip představila řadu čipů dsPIC,[21] které vstoupily do sériové výroby koncem roku 2004. Jsou to první 16bitové mikroprocesory společnosti Microchip. Zařízení PIC24 jsou navržena jako univerzální mikrokontroléry. Zařízení dsPIC zahrnují zpracování digitálních signálů schopnosti navíc.
Pokyny přicházejí ve dvou hlavních variantách. Jeden je jako klasické instrukce PIC s jedním operandem, s operací mezi W0 a hodnotou ve specifikovaném f registru (tj. Prvních 8 kB RAM), a výběr cílového bitu, který je aktualizován s výsledkem. Registry W jsou mapovány do paměti, takže f operand může specifikovat registr W.
Druhá forma, nová v PIC24, specifikuje tři operandy registru W, z nichž dva umožňují specifikaci 3bitového režimu adresování:
zdrojový operand | cílový operand | Popis | ||||
---|---|---|---|---|---|---|
ppp | Reg | Syntax | qqq | Reg | Syntax | |
000 | ssss | Žs | 000 | dddd | Žd | Zaregistrujte se přímo |
001 | ssss | [Žs] | 001 | dddd | [Žd] | Nepřímý |
010 | ssss | [Žs−−] | 010 | dddd | [Žd−−] | Nepřímé s postdecrementem |
011 | ssss | [Žs++] | 011 | dddd | [Žd++] | Nepřímé s dodatečným zvyšováním |
100 | ssss | [−Ws] | 100 | dddd | [−Wd] | Nepřímé s předpočtem |
101 | ssss | [++ Ws] | 101 | dddd | [++ Wd] | Nepřímo s prekrementem |
11k | kkkk | #u5 | (Nepoužité, nelegální) | 5bitový nepodepsaný okamžitě | ||
11X | ssss | [Žs+ Žw] | 11X | dddd | [Žd+ Žw] | Nepřímé s odsazením registru |
Režim adresování offsetu registru je k dispozici pouze pro MOV src,dst
instrukce, kde Ww registr může být použit jako offset registru pro zdroj, cíl nebo obojí. Všechny ostatní pokyny místo toho používají toto kódování pro nepodepsaný 5bitový okamžitý zdroj.
Pro operandy TBLRD
a TBLWT
které přistupují k paměti programu, jsou povoleny pouze nepřímé režimy a odkazují na adresy v paměti kódu.
Několik pokynů má délku 2 slova. Druhým slovem je NOP, který obsahuje až 16 bitů dalšího okamžitého operandu.
2 3 | 2 2 | 2 1 | 2 0 | 1 9 | 1 8 | 1 7 | 1 6 | 1 5 | 1 4 | 1 3 | 1 2 | 1 1 | 1 0 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | Mnemotechnická pomůcka | C ? | Z ? | N ? | Popis |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | operační kód | offset | Ovládejte převody | ||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | — | NOP | Žádná operace | ||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | —0— | n<22:16> | HOVOR / GOTO addr23 | (druhé slovo) | |||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | n | DO #k,adresa | (druhé slovo) | ||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | opc | —0— | A | Vypočítaný přenos řízení (na 16bitový Wa) | ||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | —0— | A | VOLEJTE RA | Stiskněte PC, přeskočte na Wa | ||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | —0— | A | RCALL RA | Push PC, jump to PC + 2 × Wa | ||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | —0— | A | GOTO RA | Přejít na Wa | ||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | —0— | A | PODPRSENKA RA | Přejít na PC + 2 × Wa | ||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | n<15:1> | 0 | VOLÁNÍaddr23 | Stiskněte PC, přeskočte na absolutní adresu | |||||||||||||||||
—0— | —0— | n<22:16> | ||||||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | — | (Rezervováno) | |||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | n | 0 | JÍT DOaddr23 | Přejít na absolutní adresu | |||||||||||||||||
—0— | —0— | n<22:16> | ||||||||||||||||||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | B | k | d | RETLW [.B] #k, Žd | Wd = k, pop PC | |||||||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | —0— | VRÁTIT SE | pop PC | ||||||||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | —0— | RETFIE | C | Z | N | pop SR, PC | |||||||||||||
0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | n | RCALL adresa | Push PC, PC + = 2 × s16 | ||||||||||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | k | DO #k,adresa | Nulová horní smyčka: k + 1 je počet opakování, PC + 2 × n poslední instrukce | ||||||||||||||||
—0— | n | |||||||||||||||||||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | k | OPAKOVAT #k | Opakujte další instrukci k + 1 krát | ||||||||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | n | RCALL adresa | Push PC, PC + = 2 × s16 | ||||||||||||||||||
0 | 0 | 0 | 0 | 1 | 0 | 1 | — | (Rezervováno) | ||||||||||||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 0 | A | n | PODPRSENKA OA, adresa | Pokud je akumulátor přetečený / nasycený, PC + = 2 × simm16 | ||||||||||||||||||
0 | 0 | 0 | 0 | 1 | 1 | 1 | A | n | PODPRSENKAA, adresa | |||||||||||||||||||
0 | operační kód | w | B | q | d | p | s | Zpětné odečtení: dest ← zdroj - Žw | ||||||||||||||||||||
0 | 0 | 0 | 1 | 0 | w | B | q | d | p | s | SUBR [.B] Žw,src,dst | C | Z | N | dst ← src - Ww = src + ~ Ww + 1) | |||||||||||||
0 | 0 | 0 | 1 | 1 | w | B | q | d | p | s | SUBBR [.B] Žw,src,dst | C | Z | N | dst ← src - Ww - C̅ = src + ~ Ww + C | |||||||||||||
0 | 0 | 1 | 0 | k | d | MOV #k, Žd | Wd ← # imm16 | |||||||||||||||||||||
0 | 0 | 1 | 1 | kond | n | Podmíněné odbočení na PC + 2 ×n | ||||||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | n | PODPRSENKA,adresa | ... pokud je nastaven PSR.V. | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | n | PODPRSENKA C,adresa | ... pokud je nastaveno PSR.C | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | n | PODPRSENKA Z,adresa | ... pokud je nastaven PSR.Z. | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | n | PODPRSENKA N,adresa | ... pokud je nastaven PSR.N. | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | n | PODPRSENKA,adresa | ... pokud PSR.Z nebo PSR.N ≠ PSR.V | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | n | PODPRSENKA LT,adresa | ... pokud PSR.N ≠ PSR.V | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | n | PODPRSENKA,adresa | ... pokud je nastaven PSR.Z nebo je PSR.C jasný | ||||||||||||||||||
0 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | n | PODPRSENKA adresa | ... bezpodmínečně | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | n | PODPRSENEK,adresa | ... pokud je jasný PSR.V. | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | n | PODPRSENKA NC,adresa | ... pokud je PSR.C jasné | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | n | PODPRSENKA NZ,adresa | ... pokud je PSR.Z jasný | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | n | PODPRSENKA NN,adresa | ... pokud je jasný PSR.N. | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | n | PODPRSENKA GT,adresa | ... pokud je PSR.Z jasné a PSR.N = PSR.V | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | n | PODPRSENKA,adresa | ... pokud PSR.N = PSR.V | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | n | PODPRSENKA GTU,adresa | ... pokud je PSR.Z jasné a PSR.C je nastaveno | ||||||||||||||||||
0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | n | (Rezervováno) | |||||||||||||||||||
0 | operační kód | w | B | q | d | p | s | ALU operace: dest ← OP (Žw,zdroj) | ||||||||||||||||||||
0 | 1 | 0 | 0 | 0 | w | B | q | d | p | s | PŘIDAT [.B] Žw,src,dst | C | Z | N | dst ← Ww + src | |||||||||||||
0 | 1 | 0 | 0 | 1 | w | B | q | d | p | s | ADDC [.B] Žw,src,dst | C | Z | N | dst ← Ww + src + C | |||||||||||||
0 | 1 | 0 | 1 | 0 | w | B | q | d | p | s | SUB [.B] Žw,src,dst | C | Z | N | dst ← Ww - src | |||||||||||||
0 | 1 | 0 | 1 | 1 | w | B | q | d | p | s | SUBB [.B] Žw,src,dst | C | Z | N | dst ← Ww - ~ src - C̅ = Ww + ~ src + C | |||||||||||||
0 | 1 | 1 | 0 | 0 | w | B | q | d | p | s | A [.B] Žw,src,dst | Z | N | dst ← Ww & src | ||||||||||||||
0 | 1 | 1 | 0 | 1 | w | B | q | d | p | s | XOR [.B] Žw,src,dst | Z | N | dst ← Ww ^ src | ||||||||||||||
0 | 1 | 1 | 1 | 0 | w | B | q | d | p | s | IOR [.B] Žw,src,dst | Z | N | dst ← Ww | src | ||||||||||||||
0 | 1 | 1 | 1 | 1 | w | B | q | d | p | s | MOV [.B] src,dst | Z | N | dst ← src (povolený režim offsetu) | ||||||||||||||
1 | 0 | 0 | 0 | 0 | F | d | MOV F, Wd | Wd ← f | ||||||||||||||||||||
1 | 0 | 0 | 0 | 1 | F | s | MOV Ws,F | f ← Ws | ||||||||||||||||||||
1 | 0 | 0 | 1 | 0 | k | B | k | d | k | s | MOV [.B] [Ws+s10], Žd | Načíst s 10bitovým odsazením | ||||||||||||||||
1 | 0 | 0 | 1 | 1 | k | B | k | d | k | s | MOV [.B]Ws,[Wd+s10] | Ukládejte s 10bitovým offsetem | ||||||||||||||||
1 | 0 | 1 | 0 | 0 | operační kód | b | Z | B | —0— | p | s | Bitové operace zapnuty zdroj | ||||||||||||||||
1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | b | 0 | B | —0— | p | s | BSET [.B] #b,src | Nastavit bit b src | |||||||||||||
1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | b | 0 | B | —0— | p | s | BCLR [.B] #b,src | Vymazat bit b src | |||||||||||||
1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | b | 0 | B | —0— | p | s | BTG [.B] #b,src | Přepnout bit b src | |||||||||||||
1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | b | 0 | 0 | —0— | p | s | BTST.C #b,src | C | Nastavte PSR.C = bit b src | ||||||||||||
1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | b | 1 | 0 | —0— | p | s | BTST.Z #b,src | Z | Nastavit PSR.Z = bit b src | ||||||||||||
1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | b | Z | 0 | —0— | p | s | BTSTS.z #b,src | C / Z | Otestujte bit b src (do C nebo Z) a poté nastavte | ||||||||||||
1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | Z | w | 0 | —0— | p | s | BTST.z Žw,src | C / Z | Zkušební bit Ww src | ||||||||||||
1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | b | 0 | 0 | —0— | p | s | BTSS #b,src | Testovací bit, pokud je nastaven, přeskočte | |||||||||||||
1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | b | 0 | 0 | —0— | p | s | BTS #b,src | Zkušební bit, pokud je jasný, přeskočte | |||||||||||||
1 | 0 | 1 | 0 | 1 | operační kód | b | F | Bitové operace zapnuty F | ||||||||||||||||||||
1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | b | F | b | BSET [.B] F,#b | Nastavte bit b f | ||||||||||||||||
1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | b | F | BCLR.B F,#b | Vymazat bit b z f | |||||||||||||||||
1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | b | F | BTG.B F,#b | Přepnout bit b f | |||||||||||||||||
1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | b | F | BTST.B F,#b | Z | Test bit b of f | ||||||||||||||||
1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | b | F | BTSTS.B F,#b | Z | Test bit b of f, then set | ||||||||||||||||
1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | Z | w | 0 | —0— | p | s | BSW.z src,Ww | Copy PSW.C or PSW.Z to bit Ww of src | |||||||||||||
1 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | b | F | BTSS F,#b | Test bit, skip if set | |||||||||||||||||
1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | b | F | BTSC F,#b | Test bit, skip if clear | |||||||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | operační kód | B | k | d | Register-immediate operations: Wd ← OP(Wd,k) | ||||||||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | B | k | d | ADD[.B] #u10,Wd | C | Z | N | Wd ← Wd + k | ||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | B | k | d | ADC[.B] #u10,Wd | C | Z | N | Wd ← Wd + k + C | ||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | B | k | d | SUB[.B] #u10,Wd | C | Z | N | Wd ← Wd − k | ||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | B | k | d | SUBB[.B] #u10,Wd | C | Z | N | Wd ← Wd − k − C̅ | ||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | B | k | d | AND[.B] #u10,Wd | Z | N | Wd ← Wd & k | |||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | B | k | d | XOR[.B] #u10,Wd | Z | N | Wd ← Wd ^ k | |||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | B | k | d | IOR[.B] #u10,Wd | Z | N | Wd ← Wd | k | |||||||||||||
1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | B | k | d | MOV[.B] #u10,Wd | Wd ← k | |||||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | operační kód | B | D | F | ALU operations: dest ← OP(F,W0) | ||||||||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | B | D | F | ADD[.B] F[,WREG] | C | Z | N | dest ← f + W0 | ||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | B | D | F | ADC[.B] F[,WREG] | C | Z | N | dest ← f + W0 + C | ||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | B | D | F | SUB[.B] F[,WREG] | C | Z | N | dest ← f − W0 | ||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | B | D | F | SUBB[.B] F[,WREG] | C | Z | N | dest ← f − W0 + C̅ | ||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | B | D | F | AND[.B] F[,WREG] | Z | N | dest ← f & W0 | |||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | B | D | F | XOR[.B] F[,WREG] | Z | N | dest ← f ^ W0 | |||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | B | D | F | IOR[.B] F[,WREG] | Z | N | dest ← f | W0 | |||||||||||||
1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | B | 1 | F | MOV[.B] WREG,F | f ← W0 | |||||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 0 | opc | w | d | 0 | p | s | 16×16→32 multiplication | |||||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | w | d | 0 | p | s | MUL.UU Ww,src,Wd | Wd+1:Wd ← Ww × src (unsigned) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | w | d | 0 | p | s | MUL.US Ww,src,Wd | Wd+1:Wd ← Ww × src (src signed) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | w | d | 0 | p | s | MUL.SU Ww,src,Wd | Wd+1:Wd ← Ww × src (Ww signed) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | w | d | 0 | p | s | MUL.SS Ww,src,Wd | Wd+1:Wd ← Ww × src (signed) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | opc | B | q | d | p | s | Program memory access (indirect modes only) | |||||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | B | q | d | p | s | TBLRDL[.B] src,dst | dst ← ROM[TBLPAG:src] (bits 15:0) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | B | q | d | p | s | TBLRDH[.B] src,dst | dst ← ROM[TBLPAG:src] (bits 23:16) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | B | q | d | p | s | TBLWTL[.B] src,dst | ROM[TBLPAG:dst] ← src (bits 15:0) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | B | q | d | p | s | TBLWTH[.B] src,dst | ROM[TBLPAG:dst] ← src (bits 23:16) | |||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | B | 0 | F | MUL[.B] F | W3:W2 ← f × W0 (unsigned) | |||||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | B | 1 | — | (Rezervováno) | ||||||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | — | (Rezervováno) | ||||||||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | — | (Rezervováno) | |||||||||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | —0— | d | 0 | p | s | MOV.D src,Wd | Load register pair | ||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | q | d | —0— | s | 0 | MOV.D Ws,dst | Store register pair | ||||||||||||
1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | — | (Rezervováno) | |||||||||||||||||||
1 | 1 | 0 | 0 | 0 | m | A | S | X | y | i | j | A | DSP MAC (dsPIC only) | |||||||||||||||
1 | 1 | 0 | 0 | 1 | Other DSP instructions (dsPIC only) | |||||||||||||||||||||||
1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | —0— | d | p | s | FF1R src,Wd | C | Find first one from right (lsb) | ||||||||||||
1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | —0— | d | p | s | FF1L src,Wd | C | Find first one from left (msb) | ||||||||||||
1 | 1 | 0 | 1 | 0 | 0 | operační kód | B | q | d | p | s | Shift/rotate general operand | ||||||||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | B | q | d | p | s | SL[.B] src,dst | C | Z | N | dst ← src << 1, shift left (into carry) | ||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 0 | B | q | d | p | s | LSR[.B] src,dst | C | Z | N | dst ← src >> 1, logical shift right | ||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | B | q | d | p | s | ASR[.B] src,dst | C | Z | N | dst ← src >> 1, arithmetic shift right | ||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 0 | B | q | d | p | s | RLNC[.B] src,dst | Z | N | dst ← src <<< 1, rotate left (no carry) | |||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | B | q | d | p | s | RLC[.B] src,dst | C | Z | N | C:dst ← src:C << 1, rotate left through carry | ||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | B | q | d | p | s | RRNC[.B] src,dst | Z | N | dst ← src >>> 1, rotate right (no carry) | |||||||||||
1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | B | q | d | p | s | RRC[.B] src,dst | C | Z | N | dst:C ← C:src >> 1, rotate right through carry | ||||||||||
1 | 1 | 0 | 1 | 0 | 1 | operační kód | B | D | F | Shift/rotate F | ||||||||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | B | D | F | SL[.B] F[,WREG] | C | Z | N | dest ← f << 1, shift left (into carry) | ||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | B | D | F | LSR[.B] F[,WREG] | C | Z | N | dest ← f >> 1, logical shift right | ||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | B | D | F | ASR[.B] F[,WREG] | C | Z | N | dest ← f >> 1, arithmetic shift right | ||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | B | D | F | RLNC[.B] F[,WREG] | Z | N | dest ← f <<< 1, rotate left (no carry) | |||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | B | D | F | RLC[.B] F[,WREG] | C | Z | N | C:dest ← f:C << 1, rotate left through carry | ||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | B | D | F | RRNC[.B] F[,WREG] | Z | N | dest ← f >>> 1, rotate right (no carry) | |||||||||||||
1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | B | D | F | RRC[.B] F[,WREG] | C | Z | N | dest:C ← C:f >> 1, rotate right through carry | ||||||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | U | t | d | D | 0 | 0 | s | Divide step (prefix with REPEAT #17) | |||||||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | —0— | d | 0 | 0 | 0 | s | DIV.S Wd,Ws | C | Z | N | W0 ← Wd/Ws, W1 ← remainder | |||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | t | d | 1 | 0 | 0 | s | DIV.SD Wd,Ws | C | Z | N | W0 ← Wt:Wd/Ws, W1 ← remainder | |||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | —0— | d | 0 | 0 | 0 | s | DIV.U Wd,Ws | C | Z | N | W0 ← Wd/Ws, W1 ← remainder | |||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | t | d | 1 | 0 | 0 | s | DIV.UD Wd,Ws | C | Z | N | W0 ← Wt:Wd/Ws, W1 ← remainder | |||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | t | —0— | 0 | 0 | 0 | s | DIVF Wt,Ws | C | Z | N | W0 ← Wt:0/Ws, W1 ← remainder | |||||||||
1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | — | (Rezervováno) | ||||||||||||||||||
1 | 1 | 0 | 1 | 1 | 0 | 1 | — | (Rezervováno) | ||||||||||||||||||||
1 | 1 | 0 | 1 | 1 | 1 | operační kód | w | d | i | 0 | 0 | s | Shift/rotate multiple | |||||||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | w | d | 0 | 0 | 0 | s | SL Ww,Ws,Wd | Z | N | Wd ← Ww << Ws | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | w | d | 1 | 0 | 0 | k | SL Wproti,#u4,Wd | Z | N | Wd ← Ww << k | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | w | d | 0 | 0 | 0 | s | LSR Ww,Ws,Wd | Z | N | Wd ← Ww >> Ws, logical shift right | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | w | d | 1 | 0 | 0 | k | LSR Wproti,#u4,Wd | Z | N | Wd ← Ww >> k, logical shift right | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | w | d | 0 | 0 | 0 | s | ASR Ww,Ws,Wd | Z | N | Wd ← Ww >> Ws, arithmetic shift right | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | w | d | 1 | 0 | 0 | k | ASR Wproti,#u4,Wd | Z | N | Wd ← Ww >> k, arithmetic shift right | ||||||||||
1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | —0— | d | p | s | FBCL src,Wd | C | Find permissible arithmetic normalization shift | |||||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | —0— | B | 0 | 0 | 0 | p | s | CP0[.B] src | C | Z | N | Compare with zero, src − 0 | ||||||||
1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | w | B | 0 | 0 | 0 | p | s | CP[.B] Ww,src | C | Z | N | Compare, Ww − src (Ww + ~src + 1) | ||||||||
1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | w | B | 0 | 0 | 0 | p | s | CPB[.B] Ww,src | C | Z | N | Compare with borrow, Ww − src − C̅ (Ww + ~src + C) | ||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | B | 0 | F | CP0[.B] F | C | Z | N | Compare with zero, f − 0 | ||||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | B | 0 | F | CP[.B] F | C | Z | N | Compare, f − W0 | ||||||||||||
1 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | B | 0 | F | CPB[.B] F | C | Z | N | Compare with borrow, f − W0 − C̅ (f + ~W0 + C) | ||||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 0 | — | (Rezervováno) | ||||||||||||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | opc | w | B | —0— | s | Compare and skip | ||||||||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | w | B | —0— | s | CPSGT[.B] Ww,Ws | ...if Ww > Ws, signed | ||||||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | w | B | —0— | s | CPSLT[.B] Ww,Ws | ...if Ww < Ws, signed | ||||||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | w | B | —0— | s | CPSNE[.B] Ww,Ws | ...if Ww ≠ Ws | ||||||||||||||
1 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | w | B | —0— | s | CPSNE[.B] Ww,Ws | ...if Ww = Ws | ||||||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | B | q | d | p | s | INC[.B] src,dst | C | Z | N | dst ← src+1 | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | B | q | d | p | s | INC2[.B] src,dst | C | Z | N | dst ← src+2 | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | B | q | d | p | s | DEC[.B] src,dst | C | Z | N | dst ← src−1 | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | B | q | d | p | s | DEC2[.B] src,dst | C | Z | N | dst ← src−2 | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | B | q | d | p | s | NEG[.B] src,dst | C | Z | N | dst ← ~src+1 | ||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 | B | q | d | p | s | COM[.B] src,dst | Z | N | dst ← ~src | |||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | B | q | d | —0— | CLR[.B] dst | dst ← 0 | ||||||||||||||
1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | B | q | d | —0— | SETM[.B] dst | dst ← ~0 | ||||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | B | D | F | INC[.B] F[,WREG] | C | Z | N | dest ← f+1 | ||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | B | D | F | INC2[.B] F[,WREG] | C | Z | N | dest ← f+2 | ||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | B | D | F | DEC[.B] F[,WREG] | C | Z | N | dest ← f−1 | ||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | B | D | F | DEC[.B] F[,WREG] | C | Z | N | dest ← f−2 | ||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | B | D | F | NEG[.B] F[,WREG] | C | Z | N | dest ← ~f+1 | ||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 1 | B | D | F | COM[.B] F[,WREG] | Z | N | dest ← ~f | |||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | B | D | F | CLR[.B] F[,WREG] | dest ← 0 | |||||||||||||||
1 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | B | D | F | SETM[.B] F[,WREG] | dest ← ~0 | |||||||||||||||
1 | 1 | 1 | 1 | 0 | 0 | m | A | 1 | X | y | i | j | opc | DSP MPY/MAC/ED/EDAC (dsPIC only) | ||||||||||||||
1 | 1 | 1 | 1 | 0 | 1 | — | (Rezervováno) | |||||||||||||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | F | 0 | TAM F | Push f on top of stack | |||||||||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | F | 0 | POP F | Pop f from top of stack | |||||||||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | k | LNK #u14 | Push W14, W14 ← W15, W15 += k | ||||||||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | —0— | ULNK | W15 ← W14, pop W14 | ||||||||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 000 | d | p | s | SE src,dst | C | Z | N | dst ← sign_extend(src), copy bit 7 to bits 15:8 | ||||||||||
1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 000 | d | p | s | ZE src,dst | 1 | Z | 0 | dst ← zero_extend(src), clear bits 15:8 | ||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | k | DISI #u14 | Disable interrupt for k+1 cycles | ||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 000 | d | 000 | s | EXCH Ws,Wd | Swap contents of registers Ws, Wd | |||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 000 | 0000 | 000 | s | DAW.B Ws | C | Decimal adjust based on C, DC | ||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | B | 000 | 0000 | 000 | s | SWAP[.B] Ws | Swap halves of Ws | |||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | —0— | RESETOVAT | Software reset | ||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | —0— | k | PWRSAV #u1 | Go into sleep or idle mode | ||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | —0— | CLRWDT | Clear watchdog timer | |||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | —0— | POP.S | Pop shadow registers (W0–3, part of PSR) | |||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | —0— | PUSH.S | Push shadow registers (W0–3, part of PSR) | |||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | — | (Rezervováno) | |||||||||||||||||
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | — | NOPR | No operation (version #2) |
Reference
- ^ PIC10F200/202/204/206 Data Sheet (PDF). Microchip Technology. 2007. str. 52. Archivovány od originál (PDF) dne 2015-08-11. Citováno 2015-01-15.
- ^ http://www.emc.com.tw/eng/products.asp
- ^ ELAN Microelectronics Corp. (26 April 2016), EM78P157N 8-bit microcontroller with OTP ROM Product Specification (PDF), version 1.3, archivováno (PDF) z původního dne 2016-03-04, vyvoláno 2020-06-06
- ^ A b ELAN Microelectronics Corp. (25 April 2016), EM78P143 8-bit microprocessor with OTP ROM Product Specification (PDF), version 1.7, p. 77, vyvoláno 2020-06-06
- ^ ELAN Microelectronics Corp. (April 2016), EM78P346N 8-bit microprocessor with OTP ROM Product Specification (PDF), version 1.5, p. 77, vyvoláno 2019-07-11
- ^ ELAN Microelectronics Corp. (17 April 2000), EM78860 8-bit Micro-controller (PDF), str. 17, vyvoláno 2019-07-11
- ^ ELAN Microelectronics Corp. (15 March 2013), EM78F648/644/642/641N/548/544/542/541N Flash Series 8-Bit Microcontroller Product Specification (PDF), version 1.2, pp. 162–165, vyvoláno 2019-07-11
- ^ Derived from instruction encoding tables in Elan eUIDE II v2.19.60.14, released 2019-05-01, accessed 2019-07-13. Konkrétně
Bin/*.cfg
soubory. - ^ ELAN Microelectronics Corp. (2014-01-14), EM78XXX 15-Bit Instruction Set (PDF), vyvoláno 2019-07-13
- ^ "Introducing the Enhanced Mid-Range Architecture" (PDF). Mikročip.
- ^ Wolf, Ash "Ninji" (12 December 2018). "Mouse Adventures #3: Writing a Disassembler". Citováno 8. července 2019.
- ^ Carlson, Jay (6 September 2019). "What's up with these 3-cent microcontrollers? (A review of the Padauk PMS150C and friends)". Citováno 2020-05-18.
- ^ "The "terrible" 3 cent MCU – a short survey of sub $0.10 microcontrollers". Wim's blog. 12. srpna 2019. Citováno 2020-05-18.
- ^ Wolf, Ash "Ninji" (12 December 2018). "Documentation for PADAUK FPPA MCUs". Citováno 2020-05-18.
- ^ Padauk Technology Co. Ltd. (11 December 2018). "PMC150/PMS150 8-bit OTP Type IO Controller" (PDF) (data sheet). Version 1.8. 38–51. PDK-DS-PMX150-EN-V108. Citováno 2020-06-08.
- ^ Wolf, Ash "Ninji" (23 May 2020). "PADAUK FPPA core devices (14 bit)". Citováno 2020-06-08.
- ^ Wolf, Ash "Ninji" (26 November 2018). "fppa_instructions_sets_notes/14bit.txt". Citováno 2020-06-08.
- ^ Padauk Technology Co. Ltd. (18 June 2019). "PFS154 8bit MTP Type IO controller Data Sheet" (PDF). Version 1.04. 71–84. PDK-DS-PFS154_RN_V104. Citováno 2020-06-09.
- ^ http://www.microchipc.com/sourcecode/
- ^ Microchip Technology, Inc. (2007), PIC18F1220/1320 Data Sheet (PDF), vyvoláno 2012-04-02
- ^ [1]
- ^ dsPIC30F Programmer's Reference Manual (PDF), Microchip Technology, 2008, DS70157C, vyvoláno 2012-07-02