EM400 - graficzny interfejs użytkownika: Różnice pomiędzy wersjami

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania
(UWAGA! Usunięcie treści (strona pozostała pusta)!)
Znacznik: Usunięcie całej zawartości strony
 
(Nie pokazano 29 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 1: Linia 1:
Debuger emulatora EM400 pozwala śledzić i kontrolować stan emulowanej maszyny.


W linii poleceń debugera można używać następujących konstrukcji:
= Polecenia =
Polecenia służą do sterowania pracą emulatora i debugera oraz wyświetlania informacji o stanie emulowanej maszyny.
* '''quit''' - Zakończ pracę emulatora
* '''step [''n'']''' - Wykonaj instrukcję wskazaną przez licznik rozkazów. Jeśli opcjonalny parametr ''n'' jest obecny, wykonaj ''n'' kolejnych instrukcji.
* '''run''' - Kontynuuj emulację
* '''help [''cmd'']''' - Wyświetl pomoc. Jeśli opcjonalny parametr ''cmd'' jest obecny, wyświetl pomoc na temad komendy ''cmd''.
* '''regs''' - Wyświetl zawartość rejestrów R1-R7
* '''sregs''' - Wyświetl zawartość rejestrów R0, IR, IC, SR
* '''reset''' - Zresetuj emulowaną maszynę. Wpisuje ''0'' do wszystkich rejestrów i wskaźników.
* '''dasm [[''addr''] ''n'']''' - Wyświetl deasemblację zawartości pamięci. Jeśli żaden parametr nie został podany, deasemblowana jest instrukcja wskazana przez licznik rozkazów. Jeśli podany jest opcjonalny parametr ''n'' deasemblowanych jest ''n'' kolejnych instrukcji. Jeśli podano również parametr ''addr'', deasemblacja rozpoczynana jest od adresu ''addr''
* '''trans [[''addr''] ''n'']''' - Jak wyżej, ale zamiast kodu assemblera wyświetlany jest pseudokod.
* '''mem [''block'']: ''<start>''-''<end>''''' - Wyświetl zawartość pamięci od adresu ''start'' do adresu ''end''. Jeśli nie podano bloku pamięci ''block'' wyświetlana jest zawartość bloku wskazanego przez ''Q'' i ''NB''
* '''clmem''' - Wyczyść zawartość całej pamięci
* '''memcfg''' - Pokaż sprzętową i programową konfigurację pamięci
* '''brk''' - Operowanie pułapkami (breakpointami):
** '''brk add <wyrażenie>''' - dodanie nowej pułapki, która jest aktywowana, gdy ''wyrażenie'' jest spełnione (różne od zera)
** '''brk del <numer>''' - usunięcie pułapki o danym numerze
** '''brk test <numer>''' - testowanie warunku pułapki
** '''brk disable <numer>''' - tymczasowe wyłączenie pułapki
** '''brk enable <numer>''' - ponowne włączenie pułapki
= Konwersje podstawy liczb =
Domyślnie, liczby w linii poleceń debugera wyświetlane są jako liczby dziesiętne ze znakiem (dane traktowane są jak liczby w kodzie U2). Możliwa jest konwersja do innego zapisu:
* '''uint('''''wyrażenie''''')''' - wartość wyrażenia zostanie potraktowana jako 16-bitowa liczba bez znaku i wyświetlona w systemie dziesiętnym
* '''hex('''''wyrażenie''''')''' - wartość wyrażenia zostanie wyświetlona w systemie szesnastkowym
* '''oct('''''wyrażenie''''')''' - wartość wyrażenia zostanie wyświetlona w systemie ósemkowym
* '''bin('''''wyrażenie''''')''' - wartość wyrażenia zostanie wyświetlona w systemie dwójkowym
= Wyrażenia =
Wyrażenia pozwalają w linii poleceń debugera przeprowadzać obliczenia oraz manipulować zawartością rejestrów, pamięci i zmiennych. Elementem każdego wyrażenia mogą być:
* Liczba w systemie dziesiętnym, ósemkowym, szesnastkowym lub binarnym (np.: '''15''', '''0177''', '''0xffa8''', '''0b1011100111011110''')
* Rejestry: '''R0'''-'''R7''', '''IC''', '''IR''', '''SR''', '''KB''' oraz pseudo-rejestr '''MOD''' zawierający bieżącą wartość modyfikatora
* Zawartość komórki pamięci, adresowane jako '''[''adres'']''' lub '''[''blok:adres'']'''
* Zmienne: debuger pozwala na użycie dowolnej zmiennej, której nazwa nie jest słowem kluczowym (poleceniem), np: '''a''', '''adres''', '''zmienna3'''.
W wyrażeniach dozwolone są następujące operatory:
* arytmetyczne: '''+, -, *'''
* logiczne: '''&&, ||, !'''
* bitowe: '''&, |, ^, ~'''
* przesunięć bitowych: '''<<, >>'''
* porównań: '''==, !=, <=, >=, >, <'''
* przypisania: '''=''' (lewa strona wyrażenia musi być rejestrem, zmienną lub komórką pamięci)
* wyłuskiwania bitów: '''[b]''' i '''[b-e]'''. Wyłuskiwanie bitów pozwala na "wycięcie" z 16-bitowego słowa dowolnego ciągu bitów i użycie go jako nowej wartości, np:
** '''1[0]''' - najstarszy bit liczby 1 (ponieważ operacja wykonywana jest na 16-bitowej liczbie, wynikiem będzie 0)
** '''r1[3]''' - trzeci bit rejestru r1
** '''[0x7a][2-9]''' - bity od 2 do 9 słowa znajdującego się w bieżącym bloku pamięci pod adresem 0x7a
** '''zmienna[15]''' - najmłodszy bit zmiennej ''zmienna''

Aktualna wersja na dzień 12:33, 30 sie 2026