De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler 1 Hogeschool Utrecht / Electrical Engineering & Design 1  Herhaling: CMP, CMN,

Verwante presentaties


Presentatie over: "2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler 1 Hogeschool Utrecht / Electrical Engineering & Design 1  Herhaling: CMP, CMN,"— Transcript van de presentatie:

1 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 1 Hogeschool Utrecht / Electrical Engineering & Design 1  Herhaling: CMP, CMN, shifts  nieuw: combineren van assembler en C  oefeningen: LCD; assembler en C

2 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 2 Hogeschool Utrecht / Electrical Engineering & Design 2 CMP R2, R1 R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 = SP R14 = LR R15 = PC registers 0000 0000 0001 0000 0002 0000 0003 0000 0004 0000 0005 0000 0006 0000 0007 0000 0008 0000 0009 ……. FFFF FFFB FFFF FFFC FFFF FFFD FFFF FFFE FFFF geheugen - flags

3 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 3 Hogeschool Utrecht / Electrical Engineering & Design 3 CMN R1, #15 R0 R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 = SP R14 = LR R15 = PC registers 0000 0000 0001 0000 0002 0000 0003 0000 0004 0000 0005 0000 0006 0000 0007 0000 0008 0000 0009 ……. FFFF FFFB FFFF FFFC FFFF FFFD FFFF FFFE FFFF geheugen - flags -

4 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 4 Hogeschool Utrecht / Electrical Engineering & Design 44 Zie ook boek p 53-54

5 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 5 Hogeschool Utrecht / Electrical Engineering & Design 5 Oefening: wat doet deze code? movr1, r0 ldrr0, =0 loop: ldrbr2, [ r1 ], #1 cmpr2, #0 addner0, r0, #1 bneloop movpc, lr Wat is het doel daarvan?

6 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 6 Hogeschool Utrecht / Electrical Engineering & Design 6 Assembler en C

7 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 7 Hogeschool Utrecht / Electrical Engineering & Design 7 C source file (.c) Assembler source file (.asm) Object file Assembler source file (.asm) Object file C compiler Assembler C source file (.c)

8 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 8 Hogeschool Utrecht / Electrical Engineering & Design 8 Executable / image /.hex file Object file Linker Object file

9 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 9 Hogeschool Utrecht / Electrical Engineering & Design 9 Assembler – interne en externe labels  Default is een label lokaal (alleen voor deze file zichtbaar).  Je kan een label totempaal globaal (voor het hele programma beschikbaar) maken met.global totempaal  Als je een label (naam) gebruikt dat niet in je file gedefinieerd is neemt de assembler aan dat het een globaal label is (in een andere file gedefinieerd).

10 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 10 Hogeschool Utrecht / Electrical Engineering & Design 10.global asm_counter, subroutine asm_counter:.skip 4 my_counter:.skip 4.code ldr r0, =asm_counter ldr r1, =my_counter ldr r2, =c_counter bl f subroutine:add r1, r0, r1 mov pc, lr Assembler – interne en externe labels

11 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 11 Hogeschool Utrecht / Electrical Engineering & Design 11 C – interne en externe labels  Default is een naam die je definieert globaal (extern zichtbaar).  Als je een label (naam) wilt gebruiken dat niet in je file gedefinieerd is dan moet je er een ‘externe definitie’ voor geven.

12 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 12 Hogeschool Utrecht / Electrical Engineering & Design 12 extern int asm_counter; extern int subroutine( int a, int b ); int c_counter; void f( void ){ int x; asm_counter++; c_counter++; x = subroutine( 6, 199 ); } C – interne en externe labels

13 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 13 Hogeschool Utrecht / Electrical Engineering & Design 13 extern int asm_counter; extern int subroutine( int a, int b ); int c_counter; void f( void ){ int x; asm_counter++; c_counter++; x = subroutine( 6, 199 ); }.global asm_counter, subroutine asm_counter:.skip 4 my_counter:.skip 4.code ldr r0, =asm_counter ldr r1, =my_counter ldr r2, =c_counter bl f subroutine:add r1, r0, r1 mov pc, lr

14 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 14 Hogeschool Utrecht / Electrical Engineering & Design 14 extern int asm_counter; extern int subroutine( int a, int b ); int c_counter; void f( void ){ int x; asm_counter++; c_counter++; x = subroutine( 6, 199 ); }.global asm_counter, subroutine asm_counter:.skip 4 my_counter:.skip 4.code ldr r0, =asm_counter ldr r1, =my_counter ldr r2, =c_counter bl f subroutine:add r1, r0, r1 mov pc, lr

15 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 15 Hogeschool Utrecht / Electrical Engineering & Design 15 void LCD_INIT( void ); void LCD_CLEAR( void ); void LCD_PUTCHAR( char c ); void WAIT_mS( int duration ); void print( char *s ){ LCD_CLEAR(); while( *s != '\0' ){ LCD_PUTCHAR( *s ); s++; } int main( void ){ LCD_INIT(); while(1){ print( "Hello" ); WAIT_mS( 500 ); print( " world." ); WAIT_mS( 500 ); } Hello2.zip

16 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 16 Hogeschool Utrecht / Electrical Engineering & Design 16 void LCD_INIT( void ); void LCD_CLEAR( void ); void print( char * s ); void WAIT_mS( int duration ); int main( void ){ LCD_INIT(); while(1){ print( "Hallo" ); WAIT_mS( 500 ); print( " wereld." ); WAIT_mS( 500 ); } Hello3.zip.global print print: stmfd SP!,{ R5, LR } mov r5, r0 BL LCD_INIT loop: ldrb r0, [ r5 ], #1 cmp r0, #0 beq klaar bl LCD_PUTCHAR b loop klaar: ldmfd SP!,{ R5, PC }

17 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 17 Hogeschool Utrecht / Electrical Engineering & Design 17 Schrijf de C functie void lichtkrant( char *s, int n ); Deze functie laat de tekst s scrollen over het LCD. De wachttijd tussen iedere scroll-stap is n us. De functie werkt door eerst *s te printen (functie of subroutine print bestaat al), daarna even wachten, s verhogen, en weer printen. De functie keert terug als s naar de ‘\0’ wijst. Wat lastiger (mag, hoeft niet): de functie keer terug als de resterende tekst helemaal op het LCD staat, dwz. als de resterende tekst 16 tekens of korter is. Een strlen functie is deze les behandeld.

18 2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler http://www.voti.nl/hvu/PEMSY1 18 Hogeschool Utrecht / Electrical Engineering & Design 18 Herschrijf de functie ‘lichtkrant’ in assembler.


Download ppt "2008-2009 VPEMSY1, D3ECPT2 : ARM Assembler 1 Hogeschool Utrecht / Electrical Engineering & Design 1  Herhaling: CMP, CMN,"

Verwante presentaties


Ads door Google