wat gaan we doen?
DESCRIPTION
Wat gaan we doen?. herhaling ARM assembler instructies nieuwe ARM assembler instructie variaties Assembler directives LCD library voor het bordje Oefeningen. Herhaling. LDR R0, =value@ load fixed value MOV R0, R1@ reg-reg copy LDR R0, [ R1 ]@ read from memory - PowerPoint PPT PresentationTRANSCRIPT
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
1Computertechniek 2 – ARM assembler
herhaling ARM assembler instructies nieuwe ARM assembler instructie variaties Assembler directives LCD library voor het bordje Oefeningen
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
2Computertechniek 2 – ARM assembler
LDR R0, =value @ load fixed value
MOV R0, R1 @ reg-reg copy
LDR R0, [ R1 ] @ read from memory
STR R0, [ R1 ] @ write to memory
ADD R0, R1, R2 @ R0 = R1 + R2
ADD R0, R1, #15 @ R0 = R1 + 15
B label @ spring naar label
BL subroutine @ spring naar subroutine
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
3Computertechniek 2 – ARM assembler
ADD R0, R1, R2 @ tel op
ADDS R0, R1, R2 @ en zet status
ADDEQ R0, R1, R2 @ doe alleen als ‘EQ’
ADDSEQ R0, R1, R2 @ combinatie
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
4Computertechniek 2 – ARM assembler
STMFD SP!, { R1-R9, R12 } @ bewaar op de stack
LDMFD SP!, { R1-R9, R12 } @ herstel vanaf de stack
STMFD SP!, { R1-R3, LR } @ subroutine start
LDMFD SP!, { R1-R3, PC } @ subroutine end
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
5Computertechniek 2 – ARM assembler
Variaties op LDR R0, [ R1 ]:
LDR R0, [ R1 ] @ word (32 bit)
LDRH R0, [ R1 ] @ half-word (16 bit)
LDRB R0, [ R1 ] @ byte (8 bit)
- H of B komt achteraan, dus: LDREQB
- Let op de alignment van het geheugen adres!
- Kan ook met STR
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
6Computertechniek 2 – ARM assembler
@directives:
.word 123, 0x15
.hword 12
.byte 0
- Reserveert plaats voor 4, 2 of 1 byte- Je moet een waarde opgeven, die wordt in het
geheugen geplaatst- Kan in een keer meerdere plaatsen reserveren- Je kan een label gebruiken
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
7Computertechniek 2 – ARM assembler
.ascii ”hello world”
.asciz ”hello world”
- Reserveert plaats voor de characters (1 byte per character) en plaatst de characters in het geheugen
- ASCIZ plakt er nog een ‘\0’ achteraan- Je kan een label gebruiken
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
8Computertechniek 2 – ARM assembler
.skip 300
- Maakt ruimte voor 300 bytes- De waarde van die bytes is (in principe) onbepaald
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
9Computertechniek 2 – ARM assembler
.align 2
.align 4
- HWORDs moeten op 2-byte aligined adressen geplaatst worden
- WORDs en instructies moeten op 4-byte aligned adressen geplaatst worden
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
10Computertechniek 2 – ARM assembler
sluit een bordje aan (parallel + USB) installeer de files uit flip.zip
in een lege directory let op: geen spaties in de pathname
dubbel-klik op de .ppr file build start debugger
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
11Computertechniek 2 – ARM assembler
zet onder file > target settings: Target = Remote/TCP Hostname = 127.0.0.1 Port = 8888
(als je netjes afsluit blijft zou dit moeten blijven staan)
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
12Computertechniek 2 – ARM assembler
Als je dit krijgt moet je onder control panel > system > hardware > device manager (select view > show hidden devices) > non plug-and-pray devices > MAC_MOT > driver instellen op status = started, type = automatic
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
13Computertechniek 2 – ARM assembler
Als je dit krijgt heb je debugger/loader niet afgesloten
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
14Computertechniek 2 – ARM assembler
Voor als het even echt niet meer werkt: als je de debugger hebt afgesloten moeten al die
DOS schermen ook weg zijn (evt met de hand sluiten) De editor sluiten en weer opstarten de USB en Paralelle kabels er even uithalen om het
bordje te resetten, USB eerst weer aansluiten, dan parallel.
PC uitzetten en weer aanzetten
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
15Computertechniek 2 – ARM assembler
LCD aansturen
• file hello.zip• uitpakken naar lege directory (geen spaties in
de pathname…)• run ‘as is’ geeft een “H” op het display
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
16Computertechniek 2 – ARM assembler
main
LCD library
delay library
Chip startup code
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
17Computertechniek 2 – ARM assembler
LCD Library
Subroutines:LCD_INIT
eenmalig aanroepenLCD_CLEAR
maakt het display leeg, cursor naar eerste positieLCD_PUTCHAR
print het char in R0;schuift de cursor naar volgende LCD positie
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
18Computertechniek 2 – ARM assembler
Wait Library
Subroutines:
Wait_uS
wacht het aantal microseconden dat in R0 staat
Wait_mS
wacht het aantal milliseconden dat in R0 staat
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
19Computertechniek 2 – ARM assembler
.global main
main: @ save registersstmfd sp!, { lr }
@ gebruik de LCDbl LCD_INITbl LCD_CLEAR
ldrb r0, =’H’bl LCD_PUTCHAR
@ etc etc
klaar:
@ returnldmfd sp!, { pc }
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
20Computertechniek 2 – ARM assembler
WAIT_mS:
@ save registersstmfd sp!, { r0-r1, lr }mov r1, r0ldr r0, =1000
@ waitwait_ms_loop:
bl WAIT_uSadds r1, r1, #-1bne wait_ms_loop
@ save registers and returnldmfd sp!, { r0-r1, pc }
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
21Computertechniek 2 – ARM assembler
WAIT_uS:@ save registersstmfd sp!, { r0-r1, lr }
@ outer loop is inner loop + 1 + 3 = 11 instructionswait_us_outer_loop:
@ full inner loop is 1 instruction + jump = 4 clocks@ total: 1 (ldr) + 1 x 4 (loop) + 2 (loop without jump) = 7ldr r1, =1
wait_us_inner_loop:adds r1, r1, #-1bne wait_us_inner_loop
adds r0, r0, #-1bne wait_us_outer_loop
@ save registers and returnldmfd sp!, { r0-r1, pc }
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
22Computertechniek 2 – ARM assembler
Doen 1
Het LCD moet laten zien: “Hello world”, afgewisseld met “Ha die wereld” (een text 1 seconde laten zien, dan de andere tekst, etc)
Doe dit ‘belgisch’, door voor ieder characterldrb r0, =’x’bl LCD_PUTCHAR
op te nemen in het programma.
Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology
23Computertechniek 2 – ARM assembler
Doen 2
Schrijf een subroutine LCD_PUTASCIZ. Deze subroutine krijgt van zijn aanroeper in R0 het adres van een string (reeks characters, afgesloten met een ‘\0’). De subroutine print alle characters in de string (tot aan de ‘\0’).
De subroutine heeft geen uitvoer parameters. De subroutine mag dus geen registers wijzigen, ook R0 niet.
Herschrijf nu de vorige opdracht, gebruik makend van je subroutine. Plaats de te printen strings in het geheugen dmv .ASCIZ directives. Vergeet niet te alignen.