Witam,
ostatnio bawię się troche w edycję softów w motoroloach, jednak nie moge rozszyfrować w jaki sposób kompiler liczy skoki bezwarunkowe.
W nocie katalogowej jest:
Cond+101L+Offset jednak jakoś to sie nie sprawdza w moim kodzie
Chodzi mi o skoki z ardresem powrotu (linkiem) BL
Dla bliskich skoków jest to odległość skoku, jednak dla długich to sie nie sprawdza.
Dla skoku dalekiego instrukcja ma 4 bajty:
np.:
F1 EC F9 0F dla skoku z adresu 1023733A do 1042355C
F6 50 FD 4A dla skoku z adresu 1023739C do 10087E34
F1 54 FF 66 dla skoku z adresu 102373CC do 1038C29C
F0 03 FD 99 dla skoku z adresu 102373E6 do 1023AF1C
F7 FF FF 1B dla skoku z adresu 102373EE do 10237228
Próbowałem liczyć tym sposobem: (adr1-adr2)/2 ale sprawdza sie tylko w niektorych przypadkach.
Myśle że ktoś kto sie zajmuje ARM na codzien powienien wiedzieć jak to liczy kompiler
P.S. Posiadam internet przez GPRS wiec nie moge ściągać żadnych kompilerów ASM dlatego zadaje te pytanie
Aktyw Forum
Zarejestruj się na forum.ep.com.pl i zgłoś swój akces do Aktywu Forum. Jeśli jesteś już zarejestrowany wystarczy, że się zalogujesz.
Sprawdź punkty Zarejestruj sięARM7TDMI Skoki bezwarunkowe (BL) - jak to robi kompiler
Moderatorzy:Jacek Bogusz, procesorowiec, Moderatorzy
- elektro255
- -
- Posty:3
- Rejestracja:25 lut 2005, o 21:51
- Lokalizacja:Siedlce
- Kontaktowanie:
-
- -
- Posty:10
- Rejestracja:5 lut 2006, o 20:05
- Lokalizacja:Warszawa
Re: ARM7TDMI Skoki bezwarunkowe (BL) - jak to robi kompiler
Jakich Motorolach???ostatnio bawię się troche w edycję softów w motoroloach,
ARM7TDMI jest oparty na architekturze v4T. W tej architekturze pole Conditional w postaci 1111 jest niedozwolone a z tego co podesłałeś wynika że tak jest. Nie wiem co rozumiesz pod pojęciem skoki dalekie i bliskie. Instrukcja BL obsługuje tylko jeden rodzaj offsetu i umożliwia skoki o 32M w przód i w tył (tryb ARM). Jeśli są potrzebne większe jest to realizowane w inny sposób.jednak nie moge rozszyfrować w jaki sposób kompiler liczy skoki bezwarunkowe.
W nocie katalogowej jest:
Cond+101L+Offset jednak jakoś to sie nie sprawdza w moim kodzie
Chodzi mi o skoki z ardresem powrotu (linkiem) BL
Dla bliskich skoków jest to odległość skoku, jednak dla długich to sie nie sprawdza.
Dla skoku dalekiego instrukcja ma 4 bajty:
np.:
F1 EC F9 0F dla skoku z adresu 1023733A do 1042355C
F6 50 FD 4A dla skoku z adresu 1023739C do 10087E34
F1 54 FF 66 dla skoku z adresu 102373CC do 1038C29C
F0 03 FD 99 dla skoku z adresu 102373E6 do 1023AF1C
F7 FF FF 1B dla skoku z adresu 102373EE do 10237228
Sposób dekodowania offsetu i realizacji skoku jest następujący:
24-bitowy operand który jest w kodzie U2 jest rozszerzany do 32-bitowej postaci,
następnie jest przesuwany o 2 bity w lewo (czyli mnożony przez 4)
i wynik ten dodawany jest do zawartości rejestru PC +8
Próbowałem liczyć tym sposobem: (adr1-adr2)/2 ale sprawdza sie tylko w niektorych przypadkach.
Myśle że ktoś kto sie zajmuje ARM na codzien powienien wiedzieć jak to liczy kompiler
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości