Na początku muszę uściślić, że adres 0x0020 w przestrzeni adresowej danych nie odnosi się do pamięci RAM, tylko tzw. pamięci MAPPED_IO (czyli dotyczy rejestrów I/O).
Instrukcja
SBI 0, 0 w rzeczywistości odnosi się do tej lokalizacji w pamięci. Należy jednak wziąć pod uwagę, że to rejestr specjalny i reakcja na poszczególne operacje (na takich rejestrach) nie zawsze będzie zgodna z zasadami ogólnymi.
Nie podałeś typu mikrokontrolera i użyłeś wartości liczbowej, zamiast nazwy symbolicznej rejestru, więc nie wiadomo, o jaki rejestr chodzi. Oczywiście asembler nie zgłosi w tym przypadku błędu, ponieważ wartości operandów mieszczą się w dopuszczalnym zakresie, ale to wcale nie oznacza, że instrukcja jest prawidłowa. W niektórych mikrokontrolerach niektóre adresy (czy nawet tylko nietóre bity danego adresu) mogą być zarezerwowane/nieużywane i wpisywanie do nich czegokolwiek nie jest zalecane. W innych pod tym adresem może być np. jakiś rejestr PINx, i wtedy wpisywanie do niego jakichś wartości (z przyczyn oczywistych) w ogóle pozostaje bez efektu, lub daje efekt zupełnie innym niż się można spodziewać (biorąc pod uwagę zasady ogólne).
Przykładowo w mikrokotrolerze ATmega644P pod adresem 0x20 (czyli 0x00 w przestrzeni I/O) znajduje się rejestr PINA. Ustawienie któregoś bitu w tym rejestrze nie powoduje de facto jego faktycznego ustawienia, za to powoduje
zmianę stanu odpowiadającego mu bitu w rejestrze PORTA:
język asm
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
W powyższym przykładzie wartość rejestru PINA pozostanie bez zmian.
Dlatego, jeśli już chcesz skosztować asemblera, używaj nazw symbolicznych rejestrów I/O, bo taki styl pisania (jak sam widzisz) nie bardzo zdaje egzamin. Dzięki zastosowaniu nazw symbolicznych kod będzie czytelniejszy i łatwiej będzie się domyślić, jaki będzie efekt poszczególnych instrukcji.
Gdybyś w swoim przykładzie użył nazwy symbolicznej, byłaby pewność, że dany adres jet prawidłowy (nie jest zarezerwowany) albo przynajmniej łatwiej byłoby odpowiedzieć na Twoje pytanie. Skoro już korzystasz z dokumentacji (jak napisałeś) to jest w nich zawsze dokładne zestawienie wszystkich rejestrów I/O danego mikrokontrolera łącznie z ich adresami. Są tam też dokładne opisy, do czego te rejestry służą i jak ich używać.