Różnice między montażem ramienia a montażem x86 [zamknięte]

Zamierzam teraz nauczyć się montażu ARM, aby rozwijać dla mojego Windows Mobile 5 iPAQ, ale mam kilka pytań:

  • Jakie są główne różnice między zespołem ramienia a zespołem x86?
    • Czy Są Jakieś Różnice W Przerwaniach(Nowych Typach)?
        Jakie One Są I Jakie Jest Ich Znaczenie?
  • Najlepszy Asembler Do Kompilacji I Skąd Go Wziąć?
Gdzie Mogę Znaleźć Jakieś Dobre Zasoby?

2 answers

Główne różnice:

  • ARM jest architekturą w stylu RISC - instrukcje mają regularny rozmiar (32-bit dla standardowego ARM i 16-bit dla trybu Thumb, chociaż Thumb ma kilka instrukcji, które żują 2 sloty instrukcji')

  • W architekturze ARM v5 (nie jestem pewien co robi v6), model przerwań na ARM jest znacznie inny niż na Intelu - zamiast wpychać rejestry na stos, ARM zamienia się na inny zestaw rejestrów, który "cieniuje" normalny zestaw. Tryb procesora określa, który plik rejestru jest widoczny (i nie wszystkie rejestry muszą być zacienione). to dość skomplikowany układ. Nowsze architektury ARM (w każdym razie v7) mają Model przerwania, który jest bliższy procesowi Intela, gdzie rejestry są przesuwane na stos, gdy wystąpi przerwanie.

Instrukcja Arm ma kilka ciekawych funkcji, których nie ma w Intelu:

  • instrukcje mają wbudowane flagi warunkowe - więc każda instrukcja może być wykonywana jako NOP, jeśli podane flagi warunku nie pasują do aktualnego stanu rejestru (można to wykorzystać, aby uniknąć wszystkich skoków wokół jednej lub dwóch instrukcji, które często widzisz w zestawie Intela).
  • ramię ma logikę przesunięcia, która może być osadzona jako część instrukcji. Tak więc, gdy używasz rejestru jako operandu źródłowego, możesz go przesunąć jako nieodłączną część instrukcji. Pomaga to w indeksowaniu tablic, czasami z arytmetyka.

Po drugiej stronie ramię nie może zrobić wiele z pamięcią bezpośrednio, z wyjątkiem ładowania i przechowywania do niego. Intel assembly może wykonywać więcej operacji bezpośrednio na pamięci.

Zauważ, że wersja architektury ARM nie odpowiada bezpośrednio rzeczywistym wersjom procesora ARM-na przykład, jeśli dobrze pamiętam, ARM7 jest procesorem architektury v5. Osobiście uważam to za bardziej zagmatwane niż powinno być.

Odniesienia do architektury ARM są dowolnie do pobrania z http://www.arm.com. sugeruję również uzyskanie kopii przewodników Hitex do różnych mikrokontrolerów ARM dla dobrego punktu wyjścia.

Pojawiło się kilka pytań dotyczących Stackoverflow dotyczących wskaźników do rozpoczęcia pracy z ARM. Przeglądanie ich da Ci wiele dobrych miejsc do rozpoczęcia:

 48
Author: Michael Burr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:00:32

Powinieneś również zdać sobie sprawę, że ARM licencjonuje swoje IP zamiast produkować chipy. Licencjobiorca może skonfigurować swój mikroprocesor ARM core na wiele sposobów. Najważniejsze w. r. t. twoje pytanie polega na tym, że sam rdzeń ARM definiuje tylko dwa przerwania IRQ i FIRQ, najczęściej istnieje kontroler przerwań specyficzny dla dostawcy, więc musisz dokładnie wiedzieć, czyj mikroprocesor jest używany w Twoim urządzeniu, jeśli chcesz wiedzieć, jak obsługiwać przerwania. modele iPAQ różnie wykorzystywały Intel StongARM i procesorów XScale. Jeśli chcesz rozwijać się na tym poziomie, powinieneś pobrać podręcznik użytkownika dla konkretnej części.

Wszystko to powiedziawszy, usługi przerwania i sterowniki urządzeń są dostarczane przez system operacyjny, więc prawdopodobnie nie musisz się martwić o tak niskie szczegóły. W rzeczywistości kwestionowałbym wybór asemblera jako języka programowania. Istnieje kilka powodów, aby wybrać asembler zamiast C lub c++, na ARM( kompilator prawie na pewno wykona cię pod względem kodu osiągi). Co więcej, w systemie Windows Mobile najbardziej produktywnym językiem na poziomie aplikacji jest prawdopodobnie C#.

 10
Author: Clifford,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-12 16:50:12