===== Vybraná instrukční sada pro STM32 ===== V tabulce níže se nachází zjednodušená instrukční sada, která bude použita v rámci výuky předmětu mikrokontroléry. Kompletní dokumentaci naleznete v PDF dokumentu {{ :courses:b2m37mam:stm32f4_instruction_set.pdf |Instrukční sada STM32F4}}. [[https://developer.arm.com/documentation/den0013/d/Application-Binary-Interfaces/Procedure-Call-Standard| ARM Cortex-A Procedure Call Standard]] ^ Instrukce ^ Argument(y) ^ Popis ^ Příklad ^ Význam ^ Ovlivněné příznaky (Flags) | ^ AND | {Rd}, Rn, Op2 | Logický AND | AND R0, R1 | R0 = R0 AND R1 | N,Z,C | ^ B{cond} | label | Skok {conditional} | B loop \\ BCC loop \\ BNE loop | Nepodmíněný skok na loop \\ Skok, pokud Carry flag (C) je nula \\ Skok, pokud Zero flag (Z) je nula | - | ^ BL{cond} | label | Skok s návratem {conditional} | BL podprogram | Volání podprogramu, \\ návratová adresa se uloží do LR | - | ^ BX | Rm | Nepřímý skok | BX LR | Návrat z podprogramu na adresu uloženou v registru Rm | - | ^ EOR | {Rd}, Rn, Op2 | XOR | EOR R0, R1 | R0 = R0 XOR R1 | N,Z,C | ^ LDR | Rt, [Rn, #offset] | Načti word do registru | LDR R0, [R1, R2] \\ LDR R0, =constant | R0 = hodnota na adrese (R1+R2) \\ R0 = constant | - | ^ LSR, LSL | {Rd}, Rn, | Logický posuv vpravo/vlevo | LSR R0, R0, #1 | R0 = R0 >> 1 | N,Z,C | ^ ORR | {Rd}, Rn, Op2 | Logický OR | OR R0, R1 | R0 = R0 OR R1 | N,Z,C | ^ POP | reglist | Pop registr/s ze zásobníku | POP {R0-R5} | Načti 6 registrů R0-R5 ze zásobníku | - | ^ PUSH | reglist | Push register/s na zásobník | PUSH {R0-R5} | Ulož 6 registrů R0-R5 do zásobníku | - | ^ STR | Rt, [Rn, #offset] | Zapiš word do registru | STR R0, [R1, R2] | Ulož R0 na addru (R1+R2) | - | ^ SUB | {Rd}, Rn, Op2 | Odečti | SUB R0, #1 | R0 = R0 - 1 | N,Z,C,V | Pro skok (B{cond}) je třeba uvést podmínku za které se má skok provést. Kompletní tabulku lze nalézt v datasheetu na {{ :courses:b2m37mam:stm32f4_instruction_set.pdf#page=67 |str. 67}}