Programowanie mikroprocesorów jednoukładowych

Podobne dokumenty
Programowanie mikroprocesorów jednoukładowych

Programowanie mikroprocesorów jednoukładowych

Programowanie mikroprocesorów jednoukładowych

Programowanie w asemblerze ARM: instrukcje

Politechnika Świętokrzyska

PROCESORY ARM TRUDNO ZNALEŹĆ PROCESORY O TAK LICZNYCH, ORYGINALNYCH, NOWYCH, POMYSŁOWYCH ROZWIĄZANIACH!

Programowanie mikroprocesorów jednoukładowych

Programowanie w asemblerze ARM wprowadzenie

Architektura systemów komputerowych Laboratorium 14 Symulator SMS32 Implementacja algorytmów

CPU ROM, RAM. Rejestry procesora. We/Wy. Cezary Bolek Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki

Projektowanie. Projektowanie mikroprocesorów

Sprzęt i architektura komputerów

Architektura komputerów. Asembler procesorów rodziny x86

Architektura komputerów

Architektura typu Single-Cycle

Architektura Systemów Komputerowych, Wydział Informatyki, ZUT

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

Lista Rozkazów: Język komputera

Zadanie Zaobserwuj zachowanie procesora i stosu podczas wykonywania następujących programów

. III atyka, sem, Inform Symulator puterów Escape rchitektura kom A

Architektura systemów komputerowych Laboratorium 8 Symulator SMS32 Instrukcje skoku i pętle

Ćwiczenie 3. Konwersja liczb binarnych

Programowanie w asemblerze Uwagi o ARM

Architektura potokowa RISC

Programowalne układy logiczne

Lista rozkazów mikrokontrolera 8051 część pierwsza: instrukcje przesyłania danych, arytmetyczne i logiczne

Wykład 4. Środowisko programistyczne

Liczniki, rejestry lab. 08 Mikrokontrolery WSTĘP

Lista instrukcji mikroprocesora Programowanie w assemblerze

Programowanie niskopoziomowe. dr inż. Paweł Pełczyński

Wprowadzenie do Architektury komputerów. Asembler procesorów rodziny x86

Ćwiczenie nr 6. Programowanie mieszane

Technika mikroprocesorowa I Wykład 2

Programowanie w asemblerze Uwagi o ARM

Logiczny model komputera i działanie procesora. Część 1.

Sprzęt i architektura komputerów

Jerzy Nawrocki, Wprowadzenie do informatyki

INSTRUKCJE Instrukcje przeniesienia: Instrukcje konwersji: Arytmetyczne instrukcje:

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Struktura i działanie jednostki centralnej

Rok akademicki: 2016/2017 Kod: JIS s Punkty ECTS: 6. Poziom studiów: Studia I stopnia Forma i tryb studiów: -

>>> Techniki rozbudowy systemów wbudowanych >>> Systemy wbudowane. Name: Mariusz Naumowicz Date: 29 maja 2019 [~]$ _ [1/32]

Mikrokontrolery 8 bit - wprowadzenie

Procedury. int mult (int mcand, int mlier){ int product = 0; while (mlier > 0) { product = product + mcand; mlier = mlier -1; } return product; }

Praktycznie całe zamieszanie dotyczące konwencji wywoływania funkcji kręci się w okół wskaźnika stosu.

START: ; start programu od adresu 0100H ; zerowanie komórek od 01H do 07FH ( 1 dec dec)

Literatura. adów w cyfrowych. Projektowanie układ. Technika cyfrowa. Technika cyfrowa. Bramki logiczne i przerzutniki.

Architektura systemów komputerowych. Poziom układów logicznych. Układy mnoŝące i dzielące

PROGRAMOWANIE NISKOPOZIOMOWE. Systemy liczbowe. Pamięć PN.01. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

Podstawy programowania w języku C

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

Architektura Systemów Komputerowych. Jednostka ALU Przestrzeń adresowa Tryby adresowania

Programowanie hybrydowe C (C++) - assembler. MS Visual Studio Inline Assembler

Liczniki, rejestry lab. 09 Mikrokontrolery 8051 cz. 1

Szkolenia specjalistyczne

Wydział Elektryczny Katedra Telekomunikacji i Aparatury Elektronicznej. Instrukcja do zajęć laboratoryjnych z przedmiotu:

Architektura Systemów Komputerowych

J. Duntemann Zrozumieć Assembler Leo J. Scanlon Assembler 8086/8088/80286 S. Kruk Programowanie w Języku Assembler

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Programowanie hybrydowe łączenie C/C++ z asemblerem

Wstęp do Reverse engineeringu

Programowanie mikrokontrolera 8051

PRZEWODNIK PO PRZEDMIOCIE

Inż. Kamil Kujawski Inż. Krzysztof Krefta. Wykład w ramach zajęć Akademia ETI

Rok akademicki: 2015/2016 Kod: IIN s Punkty ECTS: 4. Poziom studiów: Studia I stopnia Forma i tryb studiów: Stacjonarne

Architektura typu multi cycle

Plan wykładu. Architektura systemów komputerowych. MnoŜenie realizacja sprzętowa (wersja 1) Układy mnoŝące liczby całkowite.

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo

Programowanie w elektronice: Podstawy C

Programowanie Niskopoziomowe

Algorytm mnożenia sekwencyjnego (wariant 1)

Wprowadzenie do Architektury komputerów. Asembler procesorów rodziny x86

LEKCJA TEMAT: Współczesne procesory.

Metody optymalizacji soft-procesorów NIOS

Architektura systemów komputerowych Laboratorium 7 Symulator SMS32 Stos, Tablice, Procedury

MIKROKONTROLERY I MIKROPROCESORY

Język programowania: Lista instrukcji (IL Instruction List)

Wykład 2 Składnia języka C# (cz. 1)

Kod (file_code.bin) Dane wyjściowe (file_data_out.bin) Wirtualny procesor. Dane wejściowe (file_data_in.bin)

Architektura mikroprocesorów TEO 2009/2010

PROGRAMOWANIE NISKOPOZIOMOWE. Adresowanie pośrednie rejestrowe. Stos PN.04. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

AGH Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Metody Realizacji Języków Programowania

Aparatura Elektroniczna (EAE) Stopień studiów i forma: I stopień, stacjonarna Rodzaj przedmiotu: obowiązkowy - 2

Lista instrukcji procesora 8051 część 2 Skoki i wywołania podprogramów, operacje na stosie, operacje bitowe

Programowanie komputerowe. Zajęcia 1

Kurs Zaawansowany S7. Spis treści. Dzień 1

Semantyka i Weryfikacja Programów - Laboratorium 3

Podstawy i języki programowania

Programowanie Niskopoziomowe

Procesory rodziny x86. Dariusz Chaberski

Podstawy Programowania Podstawowa składnia języka C++

Budowa linii asemblera

KARTA PRZEDMIOTU. Programowanie niskopoziomowe, C2. Low Level Programming Informatyka

Instrukcje sterujące. Programowanie Proceduralne 1



Języki formalne i techniki translacji

Notatka Aplikacyjna NA 03006PL Maj 2016

Transkrypt:

Programowanie mikroprocesorów jednoukładowych Optymalizacja programów w asemblerze Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 1 / 21

Plan I Optymalizacja Pisanie w ASM Jak rozpocząć optymalizację Kolejkowanie instrukcji Budowa procedury w ASM Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 2 / 21

Program w C I 1 #i n c l u d e <s t d i o. h> 2 i n t s q u a r e ( i n t i ) ; 3 i n t main ( v o i d ) 4 { 5 i n t i ; 6 f o r ( i =0; i <10; i ++) 7 { 8 p r i n t f ( " Square o f %d i s %d\n", i, s q u a r e ( i ) ) ; 9 } 10 } 11 i n t s q u a r e ( i n t i ) 12 { 13 r e t u r n i i ; 14 } Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 3 / 21

Procedura w ASM I 1 s q u a r e 2 AREA. t e x t, CODE, READONLY 3 EXPORT s q u a r e 4 ; i n t s q u a r e ( i n t i ) 5 MUL r1, r0, r0 ; r1 = r0 r0 6 MOV r0, r1 ; r0 = r1 7 MOV pc, l r ; r e t u r n r0 8 END Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 4 / 21

Wersja dla ARMv4T I 1 AREA. t e x t, CODE, READONLY 2 EXPORT s q u a r e 3 ; i n t s q u a r e ( i n t i ) 4 s q u a r e 5 MUL r1, r0, r0 ; r1 = r0 r0 6 MOV r0, r1 ; r0 = r1 7 BX l r ; r e t u r n r0 8 END Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 5 / 21

Wywoływanie instrukcji z poziomu ASM I 1 AREA. t e x t, CODE, READONLY 2 EXPORT main 3 IMPORT L i b $ $ R e q u e s t $ $ a r m l i b, WEAK 4 IMPORT main ; C l i b r a r y e n t r y 5 IMPORT p r i n t f ; p r i n t s to s t d o u t 6 irn4 7 ; i n t main ( v o i d ) 8 main 9 STMFD sp!, { i, l r } 10 MOV i, #0 11 l o o p 12 ADR r0, p r i n t _ s t r i n g 13 MOV r1, i 14 MUL r2, i, i 15 BL p r i n t f Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 6 / 21

Wywoływanie instrukcji z poziomu ASM II 16 ADD i, i, #1 17 CMP i, #10 18 BLT l o o p 19 LDMFD sp!, { i, pc } 20 p r i n t _ s t r i n g 21 DCB " Square o f %d i s %d\n", 0 22 END Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 7 / 21

Przekazywanie dużej ilości argumentów I 1 #i n c l u d e <s t d i o. h> 2 / N i s the number o f v a l u e s to sum i n l i s t... / 3 i n t sumof ( i n t N,... ) ; 4 i n t main ( v o i d ) 5 { 6 p r i n t f ( " Empty sum=%d\n", sumof ( 0 ) ) ; 7 p r i n t f ( "1=%d\n", sumof ( 1, 1 ) ) ; 8 p r i n t f ( "1+2=%d\n ", sumof ( 2, 1, 2 ) ) ; 9 p r i n t f ( "1+2+3=%d\n ", sumof ( 3, 1, 2, 3 ) ) ; 10 p r i n t f ( "1+2+3+4=%d\n ", sumof ( 4, 1, 2, 3, 4 ) ) ; 11 p r i n t f ( "1+2+3+4+5=%d\n ", sumof ( 5, 1, 2, 3, 4, 5 ) ) ; 12 p r i n t f ( "1+2+3+4+5+6=%d\n", sumof ( 6, 1, 2, 3, 4, 5, 6 ) ) ; 13 } Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 8 / 21

Przekazywanie dużej ilości argumentów I 1 AREA. t e x t, CODE, READONLY 2 EXPORT sumof 3 N RN 0 ; number o f e l e m e n t s to sum 4 sum RN 1 ; c u r r e n t sum 5 ; i n t sumof ( i n t N,... ) 6 sumof 7 SUBS N, N, #1 ; do we have one element 8 MOVLT sum, #0 ; no e l e m e n t s to sum! 9 SUBS N, N, #1 ; do we have two e l e m e n t s 10 ADDGE sum, sum, r 2 11 SUBS N, N, #1 ; do we have t h r e e e l e m e n t s 12 ADDGE sum, sum, r 3 13 MOV r2, sp ; top o f s t a c k 14 l o o p 15 SUBS N, N, #1 ; do we have a n o t h e r element Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 9 / 21

Przekazywanie dużej ilości argumentów II 16 LDMGEFD r2!, { r3 } ; l o a d from the s t a c k 17 ADDGE sum, sum, r 3 18 BGE l o o p 19 MOV r0, sum 20 MOV pc, l r ; r e t u r n r0 21 END Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 10 / 21

Jak rozpocząć optymalizację profiler - pomiar czasu potrzebnego na wykonanie danej funkcji cycle counting - zliczanie cykli zegara potrzebnych na wykonanie funkcji i porównywanie ich przed optymalizacją i po optymalizacji Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 11 / 21

Kolejkowanie instrukcji Zakładając że instrukcja warunkowa w ARM potrzebuje jedno cyklu gdy warunek jest niespełniony. Jeżeli warunek jest spełniony to: ALU dla dodawania, odejmowania oraz logicznych operacji potrzebuje jednego cyklu. Tyczy się to także dla przesuwania jeżeli jest to bezpośrednie przesuwanie, przy użyciu rejestry należy doliczyć jeden cykl, a przy zapisie do pc dwa cykle. Instrukcje wczytywania, które wczytują N 32-bitowych słów z pamięci np. LDR i LDM wymagają N cykli, ale w rezultacie nie otrzymujemy ostatniego wyrazi zgdnie z cyklami zegara związane jest to z czytaniem adresu. Wyjątkiem jest LDM dla pojedynczej wartości, która zajmuje dwa cykle. Jeżeli instrukcja wczytuje do pc, wtedy należy dodać dwa cykle. instrukcje wczytywania, które wczytują 16-bitowe lub 8-bitowe dane jak np. LDRB, LDRSB, LDRH u LDRSH zajmuję jeden cykl. Rezultat nie jest dostępny po dwóch cyklach, podobnie jak powyżej. instrukcje skoków to trzy cykle instrukcje zapisu, które zapisują mnożenie przyjmuje różne wartości cykli w zależności od podanych parametrów Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 12 / 21

Kolejkowanie instrukcji wczytywania I 1 v o i d s t r _ t o l o w e r ( char out, char i n ) 2 { 3 u n s i g n e d i n t c ; 4 do 5 { 6 c = ( i n ++); 7 i f ( c>= A && c<= Z ) 8 { 9 c=c+( a A ) ; 10 } 11 ( out++) = ( char ) c ; 12 } w h i l e ( c ) ; 13 } Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 13 / 21

Kolejkowanie instrukcji wczytywania ASM I 1 s t r _ t o l o w e r 2 LDRB r2, [ r1 ],#1 ; c = ( i n++) 3 SUB r3, r2,#0 x41 ; r3 = c A 4 CMP r3,#0 x19 ; i f ( c <= Z A ) 5 ADDLS r2, r2,#0 x20 ; c += a A 6 STRB r2, [ r0 ],#1 ; ( out++) = ( char ) c 7 CMP r2,#0 ; i f ( c!=0) 8 BNE s t r _ t o l o w e r ; goto s t r _ t o l o w e r 9 MOV pc, r14 ; r e t u r n Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 14 / 21

Kolejkowanie instrukcji wczytywania ASM I 1 out RN 0 ; p o i n t e r to output s t r i n g 2 i n RN 1 ; p o i n t e r to i n p u t s t r i n g 3 c RN 2 ; c h a r a c t e r l o a d e d 4 t RN 3 ; s c r a t c h r e g i s t e r 5 ; v o i d s t r _ t o l o w e r _ p r e l o a d ( char out, char i n ) 6 s t r _ t o l o w e r _ p r e l o a d 7 LDRB c, [ i n ], #1 ; c = ( i n++) 8 l o o p 9 SUB t, c, # A ; t = c A 10 CMP t, # Z A ; i f ( t <= Z A ) 11 ADDLS c, c, # a A ; c += a A ; 12 STRB c, [ out ], #1 ; ( out++) = ( char ) c ; 13 TEQ c, #0 ; t e s t i f c==0 14 LDRNEB c, [ i n ], #1 ; i f ( c!=0) { c= i n ++; 15 BNE l o o p ; goto l o o p ; } Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 15 / 21

Kolejkowanie instrukcji wczytywania ASM II 16 MOV pc, l r ; r e t u r n Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 16 / 21

Kolejkowanie instrukcji wczytywania ASM I 1 out RN 0 ; p o i n t e r to output s t r i n g 2 i n RN 1 ; p o i n t e r to i n p u t s t r i n g 3 ca0 RN 2 ; c h a r a c t e r 0 4 t RN 3 ; s c r a t c h r e g i s t e r 5 ca1 RN 12 ; c h a r a c t e r 1 6 ca2 RN 14 ; c h a r a c t e r 2 7 ; v o i d s t r _ t o l o w e r _ u n r o l l e d ( char out, char i n ) 8 s t r _ t o l o w e r _ u n r o l l e d 9 STMFD sp!, { l r } ; f u n c t i o n e n t r y 10 loop_next3 11 LDRB ca0, [ i n ], #1 ; ca0 = i n ++; 12 LDRB ca1, [ i n ], #1 ; ca1 = i n ++; 13 LDRB ca2, [ i n ], #1 ; ca2 = i n ++; 14 SUB t, ca0, # A ; c o n v e r t ca0 to l o w e r c a s e 15 CMP t, # Z A Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 17 / 21

Kolejkowanie instrukcji wczytywania ASM II 16 ADDLS ca0, ca0, # a A 17 SUB t, ca1, # A ; c o n v e r t ca1 to l o w e r c a s e 18 CMP t, # Z A 19 ADDLS ca1, ca1, # a A 20 SUB t, ca2, # A ; c o n v e r t ca2 to l o w e r c a s e 21 CMP t, # Z A 22 ADDLS ca2, ca2, # a A 23 STRB ca0, [ out ], #1 ; out++ = ca0 ; 24 TEQ ca0, #0 ; i f ( ca0!=0) 25 STRNEB ca1, [ out ], #1 ; out++ = ca1 ; 26 TEQNE ca1, #0 ; i f ( ca0!=0 && ca1!=0) 27 STRNEB ca2, [ out ], #1 ; out++ = ca2 ; 28 TEQNE ca2, #0 ; i f ( ca0!=0 && ca1!=0 && ca2!=0) 29 BNE loop_next3 ; goto loop_next3 ; 30 LDMFD sp!, { pc } ; r e t u r n ; Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 18 / 21

Budowa procedury w ASM I 1 routine_name 2 STMFD sp!, { r4 r12, l r } ; s t a c k saved r e g i s t e r s 3 ; body o f r o u t i n e 4 ; the f o u r t e e n r e g i s t e r s r0 r12 and l r a r e a v a i l a b l e 5 LDMFD sp!, { r4 r12, pc } ; r e s t o r e r e g i s t e r s and r e t u r n Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 19 / 21

Budowa procedury w ASM I 1 routine_name 2 STMFD sp!, { r4 r12, l r } ; s t a c k saved r e g i s t e r s 3 ; body o f r o u t i n e 4 ; r e g i s t e r s r0 r12 and l r a v a i l a b l e 5 LDMFD sp!, { r4 r12, l r } ; r e s t o r e r e g i s t e r s 6 BX l r ; r e t u r n, with mode s w i t c h Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 20 / 21

References Andrew Sloss, Dominic Symes, and Chris Wright. ARM System Developer s Guide: Designing and Optimizing System Software. Morgan Kaufmann Publishers Inc., San Francisco, CA, USA, 2004. Mariusz Naumowicz Programowanie mikroprocesorów jednoukładowych 11 września 2017 21 / 21