1 / 51

Riistvarapõhine programmeerimine

Riistvarapõhine programmeerimine. Loeng 13 ARM käsustik ARM arenduskeskkond. ARM-i käsustik. Andmetöötlemise käsud Hargnemise käsud Laadimise-salvestamise käsud Tarkvara katkestuse käsud Programmi staatuse käsud Konstantide laadimine Tingimuslik täitmine. Hargnemise käsud I.

jereni
Télécharger la présentation

Riistvarapõhine programmeerimine

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Riistvarapõhine programmeerimine Loeng 13 ARM käsustik ARM arenduskeskkond

  2. ARM-i käsustik • Andmetöötlemise käsud • Hargnemise käsud • Laadimise-salvestamise käsud • Tarkvara katkestuse käsud • Programmi staatuse käsud • Konstantide laadimine • Tingimuslik täitmine ID218 Riistvaralähedane programmeerimine

  3. Hargnemise käsud I B {<cond>} label BL {<cond>} label BX {<cond>} Rm BLX {<cond>} label | Rm ID218 Riistvaralähedane programmeerimine

  4. Hargnemise käsud II B label1 ADD r0, r2, r4 . . . . . . . ADD r1, r3, r5 Label1 SUB r0, r1, r2 ID218 Riistvaralähedane programmeerimine

  5. Hargnemise käsud III BL sub1; branch to subroutine 1 CMP r0, #10; value of lr . . . . . . . Sub1 <Subroutine code> MOV pc, lr; return, move pc = lr ID218 Riistvaralähedane programmeerimine

  6. Laadimise-salvestamise käsud • Single – register transfer • Multiple – register transfer • Swap ID218 Riistvaralähedane programmeerimine

  7. Ühe registri teisaldamine I <LDR|STR> {<cond>} {B} Rd, addressing1 ID218 Riistvaralähedane programmeerimine

  8. Ühe registri teisaldamine II LDR {<cond>} SB|H|SH Rd, addressing2 STR {<cond>} H Rd, addressing2 ID218 Riistvaralähedane programmeerimine

  9. Ühe registri teisaldamine III Load register R0 with the content of the memory address pointed to by register R1 LDR r0, [r1]; . . . R1 . . . R0 . . . ID218 Riistvaralähedane programmeerimine

  10. Adresseerimise mood I • Base address register • Indekseerimise meetodid ID218 Riistvaralähedane programmeerimine

  11. Indekseerimise meetod I R0 = 0x00000000 R1 = 0x00090000 Mem32[00090000] = 0x01010101 Mem32[00090004] = 0x02020202 LDR r0, [r1, #4]! ; preindex with writeback R0 = 0x02020202 R1 = 0x00090004 ID218 Riistvaralähedane programmeerimine

  12. Indekseerimise meetod II R0 = 0x00000000 R1 = 0x00090000 Mem32[00090000] = 0x01010101 Mem32[00090004] = 0x02020202 LDR r0, [r1, #4]! ; preindex R0 = 0x02020202 R1 = 0x00090000 ID218 Riistvaralähedane programmeerimine

  13. Indekseerimise meetod III R0 = 0x00000000 R1 = 0x00090000 Mem32[00090000] = 0x01010101 Mem32[00090004] = 0x02020202 LDR r0, [r1], #4 ; postindex R0 = 0x01010101 R1 = 0x00090004 ID218 Riistvaralähedane programmeerimine

  14. Adresseerimise mood II • Offset • Immidiate offset • Register offset • Scaled register offset ID218 Riistvaralähedane programmeerimine

  15. Immidiate offset I ID218 Riistvaralähedane programmeerimine

  16. Immidiate offset LDR r0, [r1, #4]!; preindex with writeback R0 = mem32[r1+0x4] R1 = R1 + 0x4 LDR r0, [r1, #4]; preindex R0 = mem32[r1+0x4] R1 = R1 LDR r0, [r1], #4; postindex R0 = mem32[r1] R1 = R1 + 0x4 ID218 Riistvaralähedane programmeerimine

  17. Register offset I ID218 Riistvaralähedane programmeerimine

  18. Register offset II LDR r0, [r1, r2]!; preindex with writeback R0 = mem32[r1+r2] R1 = R1 + R2 LDR r0, [r1, r2]; preindex R0 = mem32[r1+r2] R1 = R1 LDR r0, [r1], r2; postindex R0 = mem32[r1] R1 = R1 + R2 ID218 Riistvaralähedane programmeerimine

  19. Scaled register offset I ID218 Riistvaralähedane programmeerimine

  20. Scaled register offset II LDR r0, [r1, r2, LSR #0x4]!; preindex with writeback R0 = mem32[r1+(r2 LSR #0x4)] R1 = R1 + (R2 LSR #0x4) LDR r0, [r1, r2, LSR #0x4]; preindex R0 = mem32[r1+(r2 LSR #0x4)] R1 = R1 LDR r0, [r1], r2, LSR #0x4; postindex R0 = mem32[r1] R1 = R1 + (R2 LSR #0x4) ID218 Riistvaralähedane programmeerimine

  21. Ühe registri teisaldamine IV <LDR|STR> {<cond>} {B} Rd, addressing1 • Teisendab: • 8-bit byte • 32-bit word • Lubatud offsetid: • Immidiate • Register • Scaled register ID218 Riistvaralähedane programmeerimine

  22. Ühe registri teisaldamine V LDR {<cond>} SB|H|SH Rd, addressing2 STR {<cond>} H Rd, addressing2 • Teisendab: • 8-bit signed byte • 16-bit halfworld • 16-bit signed halfworld • Lubatud offsetid: • Immidiate • Register ID218 Riistvaralähedane programmeerimine

  23. Mitme registri teisaldamine I <LDM|STM>{<cond>}<addr_mode>Rn{!},<registers> ID218 Riistvaralähedane programmeerimine

  24. Mitme registri teisaldamine II • Adresseerimine ID218 Riistvaralähedane programmeerimine

  25. Mitme registri teisaldamine III Mem32[0x80018] = 0x03 R1 = 0x00000000 Mem32[0x80014] = 0x02 R2 = 0x00000000 Mem32[0x80010] = 0x01 R3 = 0x00000000 R0 = 0x00080010 LDMIA r0!, {r1-r3} R0 = 0x0008001C R2 = 0x00000002 R1 = 0x00000001 R3 = 0x00000003 ID218 Riistvaralähedane programmeerimine

  26. Mitme registri teisaldamine IV LDMIA r0!, {r1 – r3} ID218 Riistvaralähedane programmeerimine

  27. Mitme registri teisaldamine V Mem32[0x8001C] = 0x04 R1 = 0x00000000 Mem32[0x80018] = 0x03 R2 = 0x00000000 Mem32[0x80014] = 0x02 R3 = 0x00000000 R0 = 0x00080010 LDMIB r0!, {r1-r3} R0 = 0x0008001C R2 = 0x00000003 R1 = 0x00000002 R3 = 0x00000004 ID218 Riistvaralähedane programmeerimine

  28. Mitme registri teisaldamine VI LDMIB r0!, {r1-r3} ID218 Riistvaralähedane programmeerimine

  29. Mitme registri teisaldamine VII Salvestamine – lugemine ID218 Riistvaralähedane programmeerimine

  30. Mitme registri teisaldamine VIII R0 = 0x00009000 R1 = 0x00000002 R1 = 0x00000001 R2 = 0x00000003 STMIB r0!, {r1 – r3} . . . . . . . . . . . . R0 = 0x0000900C R1 = 0x???????? R1 = 0x???????? R2 = 0x???????? LDMDA r0!, {r1 – r3} R0 = 0x00009000 R1 = 0x00000002 R1 = 0x00000001 R2 = 0x00000003 ID218 Riistvaralähedane programmeerimine

  31. Pinu operatsioonid I Pinu: • Full F • Empty E • Ascending A • Descending D Standart FD ID218 Riistvaralähedane programmeerimine

  32. Pinu operatsioonid II ID218 Riistvaralähedane programmeerimine

  33. Pinu operatsioonid III R1 = 0x00000002 R4 = 0x00000003 SP = 0x00080014 STMFD SP!, {r1, r4} R1 = 0x00000002 R4 = 0x00000003 SP = 0x0008000C FD - Stack ID218 Riistvaralähedane programmeerimine

  34. Pinu operatsioonid IV R1 = 0x00000002 R4 = 0x00000003 SP = 0x00080010 STMED SP!, {r1, r4} R1 = 0x00000002 R4 = 0x00000003 SP = 0x00080008 ED - Stack ID218 Riistvaralähedane programmeerimine

  35. Vahetus I SWP {B}{<cond>} Rd, Rm, [Rn] ID218 Riistvaralähedane programmeerimine

  36. Vahetus II Mem32[0x00009000] = 0x12345678 R0 = 0x00000000 R2 = 0x00009000 R1 = 0x11111111 SWP r0, r1, [r2] Mem32[0x00009000] = 0x11111111 R0 = 0x12345678 R2 = 0x00009000 R1 = 0x11111111 ID218 Riistvaralähedane programmeerimine

  37. Tarkvaralised katkestused I SWI {<cond>} SWI_number ID218 Riistvaralähedane programmeerimine

  38. Tarkvaralised katkestused II Cpsr = nzcvqift_USER Pc = 0x00008000 Lr = 0x12345678 ; lr = r14 0x00008000 SWI 0x123456 (24-bit) Cpsr = nzcvqIft_SVC Spsr = nzcvqift_USER Pc = 0x00000008 Lr = 0x00008004 ID218 Riistvaralähedane programmeerimine

  39. Programmi staatusega seotud käsud I MRS {<cond>} Rd, <cspr|spsr> MSR {<cond>} Rd, <cspr|spsr>_<field>, Rm MSR {<cond>} Rd, <cspr|spsr>_<field>, #imm ID218 Riistvaralähedane programmeerimine

  40. Programmi staatusega seotud käsud II Cspr = nzcvqIFt_SVC MRS r1, cpsr BIC r1, r1, #0x00000080; 0b01000000 MSR cpsr_c, r1 Cpsr = nzcvqiFt_SVC ID218 Riistvaralähedane programmeerimine

  41. Konstantide laadimine I LDR rd, =constant ADR Rd, label ID218 Riistvaralähedane programmeerimine

  42. Konstantide laadimine II R0 = 0x12345678 LDR r0, [pc, #constant-8-{PC}] . . . . Constant DCD 0xFF00FFFF R0 = 0xFF00FFFF ID218 Riistvaralähedane programmeerimine

  43. Tingimuslik täitmine I ID218 Riistvaralähedane programmeerimine

  44. Tingimuslik täitmine II C – kood, ühisteguri leidmine While (a != b ) { if ( a > b) { a = a – b; } else { b = b – a ; } } ID218 Riistvaralähedane programmeerimine

  45. Tingimuslik täitmine II r1 = A, r2 = B, ASS kood, gcd CMP r1, r2 BEQ complete BLT lessthan SUB r1, r1, r2 B gcd lessthan SUB r2, r2, r1 B gcd complete . . . . ID218 Riistvaralähedane programmeerimine

  46. Tingimuslik täitmine III r1 = A, r2 = B, ASS kood + conditional execution gcd CMP r1,r2 SUBGT r1, r1, r2 SUBLT r2, r2, r1 BNE gcd complete . . . . . ID218 Riistvaralähedane programmeerimine

  47. ARM-i arenduskeskkond I • ARM developer suite • CodeWarrior IDE - project management tool for Windows • AXD - extended ARM Debugger • ADW / ADU - ARM Debugger for Windows or Unix ID218 Riistvaralähedane programmeerimine

  48. ARM-i arenduskeskkond II • Armcc ARM C compiler • Armcpp ARM C++ compiler • Tcc Thumb C compiler • Tcpp Thumb C++ compiler • Armasm ARM and Thumb assembler • Armlink ARM linker • Armsd ARM and Thumb symbolic debugger ID218 Riistvaralähedane programmeerimine

  49. Kokkuvõte I • ARM-i hagnemise käsud • Tingimusteta juhtimise üleandmine • Juhtimise üleandmine alamprogrammide • Thumb käsude täitmine ID218 Riistvaralähedane programmeerimine

  50. Kokkuvõte II • Ladimise-salvetuse käsud • Ühe registri teisaldamine • Mitme registri teisaldamine • Vahetus • Indekseerimine • Preindex with writeback • Preindex • postindex ID218 Riistvaralähedane programmeerimine

More Related