Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .cpu cortex-m3
- .fpu softvfp
- .syntax unified
- .thumb
- .extern _vma_data_start
- .global instruction_set
- .section .text.instruction_set
- .type instruction_set, %function
- instruction_set:
- @ ================== Branch/jump instrukcije ===========================
- @ b{cond} label @ Branch (immediate)
- @ bl{cond} label @ Branch with link (immediate)
- @ bx{cond} Rm @ Branch indirect (register)
- @ blx{cond} Rm @ Branch with link indirect (register)
- @ Za link povratna adresa se upisuje u link registar
- @ -> moramo sami da cuvamo link registar
- @ Kako bismo koristili dalje link registar kao opstenamenski moramo ga
- @ sacuvati u memoriji (na stek)
- @ str lr, [sp, -4]! @ Stek pun opadajuci, smanjujemo za jednu
- @ rec (4B) pre upisa, i azuriramo ga
- @ Alternativno
- push {r0-r5, lr} @ backupujemo koriscene registre
- @ ================= Memorijske instrukcije LDR, STR ========================
- @ op{type} [r0, offset]
- @ op{type} [r0, offset]! Pre indexed
- @ op{type} [r0], offset Post indexed
- @ op: ldr, str
- @ type: b - byte, sb - signed byte, h - half word, sh - signed half word
- ldr r0, data1 @ Ucitava vrednost sa adrese data1
- @ Ne enkoduje samu adresu, vec pc-relativno
- ldr r0, =data1 @ Ucitava adresu data1
- ldr r0, [r0] @ Ucitava vrednost sa adrese data1
- adr r0, data1 @ Ucitava adresu data1
- ldr r1, [r0] @ Ucitava vrednost sa adrese data1
- ldrb r1, [r0, 3] @ Ucitavanje jednog bajta sa adrese r0+3
- ldrb r1, [r0], 1 @ Ucitavanje 1B sa adrese r0, nakon cega
- @ se r0 povecava za 1
- ldrh r1, [r0, 1]! @ Ucitavanje 2B sa adrese r0+1, nakon cega
- @ se r0 povecava za 1
- @ ============ Visestruke memorijske instrukcije LDM, STM =================
- @ op{addr_mode}{cond} Rn{!}, reglist
- @ addr_mode: IA - increment after(default), DB - decrement before each access
- @ !: da li se vrednost koja se inkrementira cuva u registru Rn
- ldm r0, {r1-r4, r5} @ U registre se smestaju vrednosti pocevsi
- @ od adrese r0, i dodeljuju se redom po
- @ brojevima registara
- ldm r0, {r1, r2, r3} @ r1 = [r0], r2 = [r0+4], r3 = [r0+8]
- @ ldm r0, {r3, r1, r2} @ Isti efekat, ali daje warning
- ldmia r0!, {r1-r4}
- ldmdb r0!, {r1-r4}
- @ ================== Smestanje konstanti u registar =======================
- @ Instrukcije su 2-4 bajta, tako da nije uvek moguce enkodovati 4B vrednost
- @ u instrukciju
- mov r0, 0xFF00FF00 @ OK
- @ mov r0, 0x12345678 @ Greska
- @ Resenje:
- mov r0, 0x5678 @ Upise nizih 2B i prosiri nulom
- movt r0, 0x1234 @ Upise u visih 2B
- @ =================== Aritmeticke i logicke instrukcije ===================
- mov r1, 17
- mov r2, 5
- sub r1, r2 @ r1 = r1-r2
- sub r0, r1, r2 @ r0 = r1-r2
- @ r2 ovde prestavlja tzv. Fleksibilni operand tj operand2, za njega moze se
- @ navesti konstanta, ili uraditi neka shift operacija
- sub r0, r1, r2, LSL 2 @ r0 = r1 - (r2<<2)
- sub r0, r1, 9 @ r0 = r1 - 9
- @ Instrukcije obicno ne menjaju condition flags ali mogu sa sufiksom S
- lsls r0, r3, r4
- adds r0, r1, r2
- rrx r0, r1 @ rotacija desno za jedan sa carry flag
- @ Conditional execution, svaka instrukcija moze uslovno da se izvrsi
- @ eq, ne - equal, not equal
- @ hi, lo - higher, lower (unsigned >, <)
- @ hs, ls - higher or same, lower or same (unsigned >=, <=)
- @ gt, lt - greater, less than (signed >, <)
- @ ge, le - greater or equal, greater or equal (signed >=, <=)
- @ mi, pl - negative, positive or zero
- @ vs, vc - overflow set, clear
- cmp r1, 13
- @ Kako bi se koristilo uslovno izvrsavanje potrebna je priprema
- @ pise se i(if) pa t(then) ili e(else) za svaku od sledecih instrukcija
- @ ittet ne @ Zbog opcija prosledjenih as-u moze bez
- movne r0, 5 @ t jer koristi ne
- movsne r1, 4 @ zbog s menja flegove
- moveq r2, 3 @ e jer koristi eq (komplement navedenog)
- movne r3, 2
- @ ========================= Izlaz iz funkcije ===========================
- @ ldr lr, [sp], 4 @ Restauriramo link reg sa steka
- pop {r0-r5, lr}
- bx lr @ Return iz funkcije
- data1:
- .word _vma_data_start
- .end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement