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

Lookup w assemblerze. Jak coś takiego można zrobić?

n01x 27 Sty 2008 15:33 1096 8
REKLAMA
  • #1 4741380
    n01x
    Poziom 12  
    Posty: 101
    Pomógł: 2
    Ocena: 1
    Witam,


    Mam pytanie jak przeniesc komende lookup (z bascoma) na assembler?
    Może ma ktos jakis pomysl lub przykładowy kod.



    n01x
  • REKLAMA
  • Pomocny post
    #2 4741546
    zumek
    Poziom 39  
    Posty: 3352
    Pomógł: 695
    Ocena: 52
    n01x napisał:
    ...Mam pytanie jak przeniesc komende lookup (z bascoma) na assembler?

    To zależy z ilu elementów maksymalnie może składać się tablica i jaki jest rozmiar jednego elementu.
    Np. dla tablicy o wielkości max 256 elementów umieszczonej w pamięci programu i rozmiar elementu to 1 bajt:
    
       mov a,numer_elementu
       mov dptr,adres_pierwszego_elementu ; (początek tablicy)
       movc a,@a+dptr
    

    Można też użyć rozkazu movc a,@a+pc lub załadować początek tablicy do rejestru dptr i dodać do tego obliczony ofset.Sposobów jest wiele.

    Piotrek
  • #3 4743095
    n01x
    Poziom 12  
    Posty: 101
    Pomógł: 2
    Ocena: 1
    Szukałem w atmelowskim instruction set i nie moge znaleźć komendy movc. Co to konkretnie robi i czy jest jakis inny opis instrukcji asm do procesorów, w którym by to było?
  • REKLAMA
  • Pomocny post
    #4 4743397
    Pituś Bajtuś
    Poziom 28  
    Posty: 934
    Pomógł: 137
    Ocena: 10
    zumek podał wersję dla 8051. Dla avr należy skorzystać z instrukcji LPM
  • #5 4743737
    n01x
    Poziom 12  
    Posty: 101
    Pomógł: 2
    Ocena: 1
    Może jakis przykłąd z tym LPM?

    Z góry dziękuje.


    n01x
  • Pomocny post
    #6 4743771
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    Przykład :
    ldi zh high(adres_początka_tablicy*2+1)
    ldi zl low(adres_początka_tablicy*2+1)
    LPM R0,Z

    To odczyt stałej z pamięci flash tablica to juz tylko zabawa z dodaniem wskaźnika do adresu stałej...
  • REKLAMA
  • #7 4743958
    n01x
    Poziom 12  
    Posty: 101
    Pomógł: 2
    Ocena: 1
    Dzieki.

    Może marudze, ale moglby mi ktoś pokazac tą zabawe ze wskaźnikiem?


    n01x
  • Pomocny post
    #8 4743973
    kamyczek
    Poziom 38  
    Posty: 3994
    Pomógł: 394
    Ocena: 573
    Do zl dodajesz wartość wskaźnika i masz kolejne elementy max 256 jeśli więcej to potem dodajesz 1 do zh i masz następne 256 itd jeśli czytasz tabele kolejno to możesz dodać plusik i będzie sam zmienial kolejno elementy (lpm r0,z+)
  • REKLAMA
  • #9 4743981
    n01x
    Poziom 12  
    Posty: 101
    Pomógł: 2
    Ocena: 1
    Ok, dzieki wielkie. Już wszystko dziala.


    Pozdrawiam
    n01x

Podsumowanie tematu

✨ Dyskusja dotyczy implementacji funkcji lookup z Bascoma w asemblerze. W przypadku mikrokontrolera 8051, dla tablicy do 256 elementów o rozmiarze 1 bajta, można użyć instrukcji movc z rejestrem DPTR wskazującym na początek tablicy oraz rejestrem A zawierającym indeks elementu. Instrukcja movc a,@a+dptr odczytuje wartość z pamięci programu. W przypadku mikrokontrolerów AVR, zamiast movc stosuje się instrukcję LPM do odczytu danych z pamięci flash. Przykład użycia LPM obejmuje załadowanie adresu tablicy do rejestrów ZH:ZL oraz odczyt elementu do rejestru R0. Aby przeglądać kolejne elementy tablicy, do rejestru ZL dodaje się wskaźnik, a po przekroczeniu 256 elementów zwiększa się ZH. Instrukcja LPM R0,Z+ umożliwia automatyczne inkrementowanie wskaźnika. Dzięki temu można efektywnie implementować funkcję lookup w asemblerze dla różnych architektur.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA