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

Jak uzyskać zmienne 16-bitowe w AVR assembler dla AT90s2313?

pit_com 20 Lut 2005 14:05 2968 6
REKLAMA
  • #1 1248059
    pit_com
    Poziom 15  
    Posty: 189
    Pomógł: 3
    Ocena: 6
    Mam problem, potzrebuję zmiennej (rejestru?) o dużej pojemności, nawet 16bitów. Potrzebuję je do obliczania m.in. pierwiastków i kwadratów liczb. Jak je uzyskać w Asemblerze? piszę w AVR Studio pod AT90s2313.
  • REKLAMA
  • Pomocny post
    #2 1248175
    Elektrooonik
    Poziom 29  
    Posty: 1212
    Pomógł: 127
    Ocena: 83
    At90S2313 to procesor 8-bitowy wiec wszystkie rejestry (oprócz licznika rozkazów i jeszcze jakiegos ktorego niepamietam) są 8 bitowe, równiez organizacja pamieci danych jest 8-bitowa więc jesli chcesz posługiwac się słowem 16-bitowym to musisz go sobie podzielić na dwie częsci i przechowywać w oddzielnych rejestrach ( lub komorkach pamięci Sram) .
  • REKLAMA
  • #3 1248582
    pit_com
    Poziom 15  
    Posty: 189
    Pomógł: 3
    Ocena: 6
    jak to zrobić?? Będę chciał dokonywać na nich obliczeń...
  • REKLAMA
  • Pomocny post
    #4 1248616
    Elektrooonik
    Poziom 29  
    Posty: 1212
    Pomógł: 127
    Ocena: 83
    Pokaże Ci przykład dodawania dwóch liczb wiecej jak 8 bitowych (i mniejszych niz 16 bitów), przykład ten znalazłem w ksiązce "Mikrokontrolery AVR w praktyce " Jarosława Dolińskiego

    ; dodaj dwie liczy 16-bitowe r1:r0 + r3:r2
    add r2, r0 ;dodaj młodsze bajty
    adc r3, r1 ; dodaj starsze bajty z przeniesieniem

    Więcej przykładów operacji arytmetycznych znajdziesz tutaj:
    http://www.easy-soft.tsnet.pl/zasoby/avrasm-arytmetyka.pdf

    Pamiętaj, że operacje arytmetyczne można wykonywać tylko na rejestrach r0-r31 bezpośrednio sprzęzonych z ALU więc jesli dane przechowujesz w pamięci SRAM musisz najpierw przenieśc je do tych rejestrów, w AVR jest to wygodne.. nie to co w '51 gdzie był tylko jeden akumulator.
  • REKLAMA
  • #5 1251102
    pit_com
    Poziom 15  
    Posty: 189
    Pomógł: 3
    Ocena: 6
    Wielkie THX!!!
  • Pomocny post
    #6 1251165
    mcy
    Poziom 15  
    Posty: 154
    Pomógł: 7
    Ocena: 18
    Zobacz na
    http://www.avrbeginners.net
    AVR Assembler->Math->Multiple byte maths. Są tam co prawda krótkie, ale dobrze opisane przykłady operacji na liczbach 2 i nawet 4 bajtowych: dodawanie, odejmowanie, porównania itp.

    Pozdrawiam
  • Pomocny post
    #7 1252482
    ZlyDotyk
    Poziom 19  
    Posty: 169
    Pomógł: 40
    Ocena: 1
    jezeli kozystasz z AVR Studio to w katalogu Appnotes masz gotowe procedury do tego. Matematyczne sa w avr200, 200b i 201.asm

Podsumowanie tematu

✨ Procesor AT90S2313 jest 8-bitowy, co oznacza, że jego rejestry i pamięć danych są 8-bitowe. Aby operować na zmiennych 16-bitowych, należy podzielić je na dwie części i przechowywać w oddzielnych rejestrach lub komórkach pamięci SRAM. Operacje arytmetyczne na 16-bitowych liczbach wykonuje się poprzez sekwencyjne operacje na młodszych i starszych bajtach z wykorzystaniem instrukcji ADD i ADC, np. dodawanie dwóch 16-bitowych liczb w rejestrach r0-r3. W AVR Studio dostępne są gotowe procedury matematyczne w katalogu Appnotes (np. avr200, 200b, 201.asm). Dodatkowo, na stronie avrbeginners.net znajdują się przykłady operacji na liczbach wielobajtowych (2 i 4 bajtowych), obejmujące dodawanie, odejmowanie i porównania. W AVR operacje arytmetyczne wykonuje się bezpośrednio na rejestrach r0-r31 sprzężonych z ALU, co ułatwia manipulację danymi w porównaniu do innych architektur.
Wygenerowane przez model językowy.
REKLAMA