logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak dziala kompilator ASM do HEX

asembler 21 Lut 2010 15:06 3941 12
  • #1 7728651
    asembler
    Poziom 32  
    Miałem kilka dni wolnych i napisałem kompilator. Porównując czas kompilacji z oryginalnym AVRASM.EXE otrzymuje zawsze krotszy czas wykonania oryginalnego. Może ktoś wie w jaki sposób zastosowac aby go przyspieszyc?
    Co prawda czasy są niezauważalne bo dla typowego programu na atmege8 wynoszą odpowiednio mój=550mS org=390mS.
  • #2 7728901
    Konto nie istnieje
    Poziom 1  
  • #3 7728984
    asembler
    Poziom 32  
    Ja zakladalem ze oryginalny kompilator byl pisany w jezyku wyzszego stopnia, wiec tez swoj napisałem w turbo pascalu a wykonuje sie wszystko na PC. Co do sposobu kompilacji to wlasnie chcialem sie dowiedziec jak moze to w oryginale wygladac. Ja zrobilem to po staremu (moze jest jakis nowszy sposób) czyli najpierw pozbierałem wysztkie etykiety i definicje a w drugim przebiegu nastepuje kompilacja własciwa i tworzone są zbiory opisowy i binarny. Zanim przetłumacze go na ASM chcialem mniej wiecej oszacowac czas dzialania.
  • #4 7729230
    tmf
    VIP Zasłużony dla elektroda
    Tu wina moze byc sam Pascal. To jest przeciez jezyk nierozwijany na powaznie juz od lat. Z ktorego roku masz kompilator? Dla gcc pomiedzy wersjami moga byc kilkunasto procentowe roznice w predkosci przetwarzania. Skupilbym sie na bibliotece parsujacej zbior zrodlowy, przy pierszym przebiegu pozamienialbym wszystko co rozpoznaje kompilator na jakies tokeny. Zrobilbym to w C++ wykorzystujac biblioteke standardowa.
  • #5 7729349
    asembler
    Poziom 32  
    Mysle ze wyszukiwanie z tablicy ok.2000 etykiet zrobilem dosc szybko 11 porównan tylko. Coś słyszałem ze oryginalny robi to w jednym przebiegu ale czy to prawda? Wybór jezyka oczywiscie ma znaczenie z tym ze ja nie chce przescignąc oryginał a tylko porównuje czasy i na tej podstawie chce odgadnąc czy ide w dobrym kierunku.
    Jeden przebieg? moze to ten kierunek gdyz odczyt z dysku tez troche trwa.
  • #6 7730176
    Konto nie istnieje
    Poziom 1  
  • #7 7730736
    Dr.Vee
    VIP Zasłużony dla elektroda
    Nie ma sensu pisać takiego "kompilatora" w asemblerze. Różnica w czasie wykonania rzędu 25% to tyle co nic - w takim programie więcej można wygrać stosując wydajniejsze struktury danych albo wykonywać tylko jeden przebieg + późniejsze uzupełnienie offsetów.

    Może lepiej skup się na tym, żeby Twój asembler wspierał więcej rzeczy niż oryginalny? Choć z tego co pamiętam AVRASM niczego nie brakuje...

    Pozdrawiam,
    Dr.Vee
  • #8 7731028
    asembler
    Poziom 32  
    AVRASM nie wykrywa wielokrotnych etykiet deklarowanych przez ".SET"
    Co do sensu pisania to masz racje ale skoro się nudze:-)
    Jak sie nie zmieszcze w 8 kB to sobie dam spokój.
  • #9 7733732
    tmf
    VIP Zasłużony dla elektroda
    To jak sie nudzisz to zrob assembler kompatybilny z kodem generowanym przez gcc, a dodajacy jeszcze optymalizacje juz na poziomie wygenerowanego kodu assemblerowego. Raz, ze to intelektualnie jest ambitniejsze, a dwa, ze czemus moze sluzyc. Jakby jeszcze mialo opcje, np. zamiany dostepu do VTALBES z SRAM na FLASH, to bylby miod i wiele osob byloby ci zobowiazanych.
  • #10 7763002
    asembler
    Poziom 32  
    Ukończone prawie kompiluje dziala..
    Rozbudowałem funkcje INCLUDE co pozwale dołączać nie tylko całe moduły ale poszczgólne wyodrebnione fragmety modułow include Nazwa Nazwa fragmentu , Mozliwa jest tez komilacja z poziomu modułu "podrzednego " inaczej mówiac jezeli program głowny wymaga małych zmian to nie tworze nowego programu tylko tworze modul ze zmianami i dołaczam "były" program głowny jako moduł. Jezeli w programie głownym zanaczyłem INCLUDE $$$ to istnieje mozliwosc tworzenia wielu wersji programu bez porprawiania programu głownego co dla mnie ma wielka zaletę bo poprawki moa byc tez negatywne a wtedy łatwo wrócic do stanu pierwotnego.
    Mozna pisac szybciej poprzez mozliwosc zastosowania własnych skrótów cos jak " macro". z tym ze jest juz to wszyte w kompilator i zamiast pisac ADIW ZH:ZL,4 MOZNA NAPISAC ADIW ZHL.4 zamiast pisac LD,LDI, LDD, ST,STD,MOV pisze poprostu LD a kompilator sam sie domysli jaki rozkaz wstawic zamaist pisac CPI r16,5 a potem odpowiedni rozkaz skoku mozna napisac CPZ R16,5,SKOK itp tyczy sie to wszyski pozostałych ANDI.ORI... Co do dyrektywy DB to istnieje mozliwosc wpisywania stringów czyli DB 'TEKST POLSKI' z jednOczeSną zamianą systemu pisowni znaków polskich na dowolny system zadeklarowany. Wprowadzilem rozkazy "dwuwierszowe" czyl np PUSH ZHL robi PUSH ZH I PUSh ZL ALBO LD ZHL,ETYKIETA podobnie a takze LD ZHLF,ETYKIETA = LD LOW(ETYKIETA*2 I HIGH(ETYKIETA*2 oraz wiele innych .co powoduje przyspieszenie procesu samego wpisywania programu. Dla wydzielenia z programu pewnej czesci bez wymazywania mozna wziasc ten fragment w klamrę {....} a komplitator pominie automatycznie.
    i
    Co do czytania raz z flasha raz z ze SRAMU przydatne szczególnie od wyswielania komunikaów stałych jak i zminnych(RAM) to załatwine jest to za pomocą dwóch rozkazów a zmiana zastepuje poprzez programowe ustawianie zmiennej bitowej wiec raczje jest bez sensu robic to poprzez powtorną kompilacje.
    CHcialbym dodac jeszcze jakies udogodnienia przydatne w pisaniu w ASM. macie jakies pomysły?
  • #11 7763287
    hose2
    Poziom 17  
    Witam

    Pomysł ciekawy, ale mam pytanie odnoszące się do:
    asembler napisał:
    Wprowadzilem rozkazy "dwuwierszowe" czyl np PUSH ZHL robi PUSH ZH I PUSh ZL

    Czy POP ZHL (lub POP ZLH) robi POP ZL i POP ZH, czy POP ZH i POP ZL ?
    :twisted:
  • #12 7782461
    asembler
    Poziom 32  
    PUSH robi ZH,ZL a POP robi ZL, ZH inaczej nie mialoby to sensu czyli:

    PUSH R16HL
    SETB R16,1
    CP R16,10,SKOK
    POP R16HL


    to inaczej

    PUSH R16
    PUSH R17
    SET
    BLD R16,1
    CP R16,10
    JZ SKOK
    POP R17
    POP R16




    Co do szybkosci nowego kompilatora to jest ok 30-50% szybszy co oczywiscie nie ma znaczenia przy procesorze 300Mhz ale juz przy kwarcu 16Mhz ma i czas kompilacji jest do przyjecia chociaz trosze trzeba poczekac.
  • #13 7782693
    rpal
    Poziom 27  
    kol. asembler to trochę nie na temat ale deklarowałeś u siebie nudę. Może orientujesz się czemu ilekroć właczam elektrodę to antywirus mi komunikuje ingerencję szpiegowskiego cokie?
REKLAMA