Asembler - pytanie

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
Awatar użytkownika
gaweł
Użytkownik
Posty: 651
Rejestracja: 05 kwie 2004, 8:38
Lokalizacja: Białystok
Kontakt:

Post autor: gaweł » 10 lis 2006, 0:53

misha1024 pisze:Tak, ale rejestry r16 i r17 musza byc w jakis sposob wybrane z posrod reszty, czyli musza byc na raz zaadresowane?
No to wyobraź sobie układ, który realizuje 8-bitową operację OR (czyli zespół 8 bramek OR). W sumie masz 16 sygnałów wejściowych i 8 sygnałów wyjściowych. Przez 8-bitowy układ 32-wejściowego miltipleksera (całkiem spory kawał elektroniki cyfrowej) wysterowany 5-bitoweym adresem ssss podaje do układu obliczenia OR jeden 8-bitowy argument. Analogicznie drugi argument jest podany przez drugi mocno rozbudowany multiplexer wysterowany adresem ddddd. Do obliczenia sumi OR musisz podać jednocześnie oba argumenty, czyli podać liczby sssss i ddddd. Układ obliczy wymaganą sumę OR. Jednocześnie liczba ddddd jest podana na 8-bitowy demuliplexer o 32 wyjściach by wynik został dostarczony do właściwego rejestru.
Czy tak są zbudowane mikrokontrolery? Od razu można powiedzieć, że nie, ale powyższe może rozjaśnić koncepcję.

Awatar użytkownika
marcing
Użytkownik
Posty: 868
Rejestracja: 14 lut 2006, 14:13
Lokalizacja: z pociągu...
Kontakt:

Post autor: marcing » 10 lis 2006, 11:26

W notach katalogowych można znaleźć większość informacji o architekturze.

Np. taki rysunek - jak dołączony poniżej - pokazuje, w jaki sposób jest dołączone ALU do rejestrów.
Co do sssss i ddddd - wartości te są pięciobitowe, bo mamy przecież 32 rejestry...
Pobieranie wartości z rejestrów oraz ich zapis następuje w jednym cyklu zegara - czyli można powiedzieć, że jednocześnie.
Załączniki
AVR_Core_A.jpg

ZbeeGin

Post autor: ZbeeGin » 10 lis 2006, 22:17

misha1024 pisze:Tak, ale rejestry r16 i r17 musza byc w jakis sposob wybrane z posrod reszty, czyli musza byc na raz zaadresowane?
Owszem! Zauważ, że w samym rozkazie jest zawarta cała informacja o tym, o jakie rejestry chodzi. Przypomnę również, że rdzeń AVR posiada przetwarzanie potokowe. Zatem jednostka wykonując poprzedni rozkaz, może pobrać następny i już przygotować się na wykonanie rozkazu. Ponadto każdy takt posiada aż dwa zbocza, które mogą być wykorzystane.
Przeanalizuj: Przy pierwszym takcie i pierwszym zboczu narastającym - rdzeń pobiera instrukcję z pamięci Flash (o organizacji jakby nie było 16-bitowej) i dekoduje ją. Przy pierwszym takcie na opadającym zboczu pobiera z R16 oraz R17 dane do ALU (patrz diagram blokowy rdzenia - są dwa kanały dystrybucji). Przy następnym takcie i narastającym zboczu ALU wykona operację OR i przygotuje wynik. Przy opadającym zboczu wynik zostanie przesłany do R16. I to wszystko.

Możesz zadać pytanie, skoro w pierwszym cyklu raz jednostka pobiera rozkaz, a w drugim go wykonuje; to dlaczego większość rozkazów ma opis, że wykonują się w jednym cyklu? Właśnie w jednym się wykonują, a pobranie i dekodowanie ukrywa się zawsze w poprzednim cyklu.

Awatar użytkownika
misha89
Użytkownik
Posty: 150
Rejestracja: 06 lip 2006, 17:15
Lokalizacja: Ryki
Kontakt:

Post autor: misha89 » 12 lis 2006, 16:01

Dzieki ZbeeGin wlasnie o to mi chodzilo :mrgreen:
Zauwazylem ze kazdy takt posiada dwa zbocza ale nie bylem pewny ze to zostalo zastosowane w uP.

ODPOWIEDZ