Debugger EM400: Różnice pomiędzy wersjami
Nie podano opisu zmian |
|||
(Nie pokazano 24 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 1: | Linia 1: | ||
Debugger emulatora EM400 pozwala śledzić i kontrolować stan emulowanej maszyny. | |||
W linii poleceń | W linii poleceń debuggera można używać następujących konstrukcji: | ||
= Polecenia = | = Polecenia = | ||
Polecenia służą do sterowania pracą emulatora i | Polecenia służą do sterowania pracą emulatora i debuggera oraz wyświetlania informacji o stanie emulowanej maszyny. | ||
* '''quit''' - Zakończ pracę emulatora | * '''quit''' - Zakończ pracę emulatora | ||
* ''' | * '''cycle''' - Wykonaj instrukcję wskazaną przez licznik rozkazów. | ||
* ''' | * '''start''' - Kontynuuj emulację aż do napotkania kolejnej pułapki | ||
* '''load <plik>''' - Załaduj zawartość pliku do bloku pamięci numer 0. | |||
* '''help [''cmd'']''' - Wyświetl pomoc. Jeśli opcjonalny parametr ''cmd'' jest obecny, wyświetl pomoc na temat komendy ''cmd''. | * '''help [''cmd'']''' - Wyświetl pomoc. Jeśli opcjonalny parametr ''cmd'' jest obecny, wyświetl pomoc na temat komendy ''cmd''. | ||
* '''regs''' - Wyświetl zawartość rejestrów R1-R7 | * '''regs''' - Wyświetl zawartość rejestrów R1-R7 | ||
* '''sregs''' - Wyświetl zawartość rejestrów R0, IR, IC, SR | * '''sregs''' - Wyświetl zawartość rejestrów R0, IR, IC, SR | ||
* ''' | * '''clear''' - 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'' | * '''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'' | ||
* '''mem [''blok'':] ''<start>'' ''[ilość]''''' - Wyświetl ''ilość'' słów pamięci od adresu ''start''. Jeśli nie podano bloku pamięci ''blok'' wyświetlana jest zawartość bloku wskazanego przez ''Q'' i ''NB''. Jeśli nie podano ''długości'', przyjmowana jest wartość 16. | |||
* '''mem ['' | |||
* '''memcfg''' - Pokaż sprzętową i programową konfigurację pamięci | * '''memcfg''' - Pokaż sprzętową i programową konfigurację pamięci | ||
* '''memdump <blok> <plik>''' - zrzuć do pliku zawartość bloku pamięci | |||
* '''stk''' - Pokaż stos | |||
* '''watch''' - Śledzenie wartości wyrażeń | |||
** '''watch''' - wyświetl śledzone wyrażenia | |||
** '''watch add <wyrażenie>''' - dodaj wyrażenie do śledzonych | |||
** '''watch del <numer>''' - usuń wyrażenie o numerze ze śledzonych | |||
* '''decode''' - Dekodowanie struktur danych | |||
** '''decode''' - wyświetl istniejące dekodery | |||
** '''decode <dekoder> <adres>''' - zdekoduj strukturę pod danym adresem używając danego dekodera | |||
* '''brk''' - Operowanie pułapkami (breakpointami): | * '''brk''' - Operowanie pułapkami (breakpointami): | ||
** '''brk''' - wyświetlenie ustawionych pułapek | |||
** '''brk add <wyrażenie>''' - dodanie nowej pułapki, która jest aktywowana, gdy ''wyrażenie'' jest spełnione (różne od zera) | ** '''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 del <numer>''' - usunięcie pułapki o danym numerze | ||
** '''brk | ** '''brk off <numer>''' - tymczasowe wyłączenie pułapki | ||
** '''brk | ** '''brk on <numer>''' - ponowne włączenie pułapki | ||
** '''brk | ** '''brk off''' - tymczasowe wyłączenie wszystkich pułapek | ||
** '''brk on''' - ponowne włączenie wszystkich pułapek | |||
* '''log''' - logowanie operacji emulatora do pliku | |||
** '''log''' - wyświetlenie bieżących ustawień logowania | |||
** '''log on''' - włączenie logowania | |||
** '''log off''' - wyłączenie logowania | |||
** '''log <komponent>''' - włączenie logowania dla danego komponentu. Dostępne komponenty to: | |||
*** reg - operacje na rejestrach | |||
*** mem - operacje na pamięci | |||
*** cpu - operacje wykonywane przez CPU | |||
*** op - szczegóły wykonania rozkazu | |||
*** int - operacje związane z przerwaniami | |||
*** io - operacje wejścia/wyjścia | |||
*** mx - [[MULTIX]] | |||
*** px - [[PLIX]] | |||
*** cchr - kanał znakowy | |||
*** cmem - kanał pamięciowy | |||
*** term - terminale | |||
*** wnch - winchestery | |||
*** 9425 - dyski MERA-9425 | |||
*** flop - stacje dyskietek | |||
*** pnch - dzirkarka taśmy | |||
*** pnrd - czytnik taśmy dziurkowanej | |||
*** crk5 - system operacyjny [[CROOK|CROOK-5]] | |||
*** em4h - emulator | |||
*** all - wszystkie | |||
* '''clock''' - kontrola zegara czasu rzeczywistego | |||
** '''clock on''' - włączenie timera | |||
** '''clock off''' - wyłączenie timera | |||
* '''find <blok> <wartość>''' - wyszukiwanie wartości w bloku pamięci | |||
* '''binload <adres>''' - inicjalizacja ładowania binarnego pod zadany adres | |||
= | = Wyrażenia = | ||
Domyślnie, liczby w linii poleceń | Wyrażenia pozwalają w linii poleceń debuggera przeprowadzać obliczenia oraz manipulować zawartością rejestrów, pamięci i zmiennych. Rezultat wyrażenia wyświetlany jest również w linii poleceń, natychmiast po jego obliczeniu. 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 | |||
* Stan przerwania w rejestrze przerwań '''RZ''' dostępny jako '''RZ[numer_przerwania]''' (np.: '''RZ[6]''', '''RZ[zmienna+1]''') | |||
* Zawartość komórki pamięci, adresowane jako '''[''adres'']''' lub '''[''blok:adres'']''' | |||
* Zmienne: debugger pozwala na użycie dowolnej zmiennej, której nazwa nie jest słowem kluczowym (poleceniem), np: '''a''', '''adres''', '''zmienna3'''. | |||
Domyślnie, liczby w linii poleceń debuggera wyświetlane są jako liczby szesnastkowe bez znaku. Możliwa jest jednak 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 | * '''uint('''''wyrażenie''''')''' - wartość wyrażenia zostanie potraktowana jako 16-bitowa liczba bez znaku i wyświetlona w systemie dziesiętnym | ||
* '''int('''''wyrażenie''''')''' - wartość wyrażenia zostanie wyświetlona w systemie dziesiętnym, ze znakiem | |||
* '''hex('''''wyrażenie''''')''' - wartość wyrażenia zostanie wyświetlona w systemie szesnastkowym | * '''hex('''''wyrażenie''''')''' - wartość wyrażenia zostanie wyświetlona w systemie szesnastkowym | ||
* '''oct('''''wyrażenie''''')''' - wartość wyrażenia zostanie wyświetlona w systemie ósemkowym | * '''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 | * '''bin('''''wyrażenie''''')''' - wartość wyrażenia zostanie wyświetlona w systemie dwójkowym | ||
W wyrażeniach dozwolone są następujące operatory: | W wyrażeniach dozwolone są następujące operatory: | ||
Linia 52: | Linia 90: | ||
* przesunięć bitowych: '''<<, >>''' | * przesunięć bitowych: '''<<, >>''' | ||
* porównań: '''==, !=, <=, >=, >, <''' | * porównań: '''==, !=, <=, >=, >, <''' | ||
* przypisania: '''=''' (lewa strona wyrażenia musi być rejestrem, zmienną | * przypisania: '''=''' (lewa strona wyrażenia musi być rejestrem, zmienną, komórką pamięci lub pozycją rejestru '''RZ''') | ||
* 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: | * 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) | ** '''1[0]''' - najstarszy bit liczby 1 (ponieważ operacja wykonywana jest na 16-bitowej liczbie, wynikiem będzie 0) | ||
Linia 58: | Linia 96: | ||
** '''[0x7a][2-9]''' - bity od 2 do 9 słowa znajdującego się w bieżącym bloku pamięci pod adresem 0x7a | ** '''[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'' | ** '''zmienna[15]''' - najmłodszy bit zmiennej ''zmienna'' | ||
Debugger pozwala na obliczenie wartości wielu wyrażeń w jednej linii polecenia i wyświetlenie wyników również w jednej linii odpowiedzi. Można to zrobić podając kolejne wyrażenia oddzielone przecinkami, np: | |||
em400> 1+2, oct(12+[9]), dec(r1-1), a=12, [a], [a]=1, [a] | |||
0x3 033 -1 0xc 0x0 0x1 0x1 |
Aktualna wersja na dzień 16:53, 1 gru 2021
Debugger emulatora EM400 pozwala śledzić i kontrolować stan emulowanej maszyny.
W linii poleceń debuggera można używać następujących konstrukcji:
Polecenia
Polecenia służą do sterowania pracą emulatora i debuggera oraz wyświetlania informacji o stanie emulowanej maszyny.
- quit - Zakończ pracę emulatora
- cycle - Wykonaj instrukcję wskazaną przez licznik rozkazów.
- start - Kontynuuj emulację aż do napotkania kolejnej pułapki
- load <plik> - Załaduj zawartość pliku do bloku pamięci numer 0.
- help [cmd] - Wyświetl pomoc. Jeśli opcjonalny parametr cmd jest obecny, wyświetl pomoc na temat komendy cmd.
- regs - Wyświetl zawartość rejestrów R1-R7
- sregs - Wyświetl zawartość rejestrów R0, IR, IC, SR
- clear - 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
- mem [blok:] <start> [ilość] - Wyświetl ilość słów pamięci od adresu start. Jeśli nie podano bloku pamięci blok wyświetlana jest zawartość bloku wskazanego przez Q i NB. Jeśli nie podano długości, przyjmowana jest wartość 16.
- memcfg - Pokaż sprzętową i programową konfigurację pamięci
- memdump <blok> <plik> - zrzuć do pliku zawartość bloku pamięci
- stk - Pokaż stos
- watch - Śledzenie wartości wyrażeń
- watch - wyświetl śledzone wyrażenia
- watch add <wyrażenie> - dodaj wyrażenie do śledzonych
- watch del <numer> - usuń wyrażenie o numerze ze śledzonych
- decode - Dekodowanie struktur danych
- decode - wyświetl istniejące dekodery
- decode <dekoder> <adres> - zdekoduj strukturę pod danym adresem używając danego dekodera
- brk - Operowanie pułapkami (breakpointami):
- brk - wyświetlenie ustawionych pułapek
- 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 off <numer> - tymczasowe wyłączenie pułapki
- brk on <numer> - ponowne włączenie pułapki
- brk off - tymczasowe wyłączenie wszystkich pułapek
- brk on - ponowne włączenie wszystkich pułapek
- log - logowanie operacji emulatora do pliku
- log - wyświetlenie bieżących ustawień logowania
- log on - włączenie logowania
- log off - wyłączenie logowania
- log <komponent> - włączenie logowania dla danego komponentu. Dostępne komponenty to:
- reg - operacje na rejestrach
- mem - operacje na pamięci
- cpu - operacje wykonywane przez CPU
- op - szczegóły wykonania rozkazu
- int - operacje związane z przerwaniami
- io - operacje wejścia/wyjścia
- mx - MULTIX
- px - PLIX
- cchr - kanał znakowy
- cmem - kanał pamięciowy
- term - terminale
- wnch - winchestery
- 9425 - dyski MERA-9425
- flop - stacje dyskietek
- pnch - dzirkarka taśmy
- pnrd - czytnik taśmy dziurkowanej
- crk5 - system operacyjny CROOK-5
- em4h - emulator
- all - wszystkie
- clock - kontrola zegara czasu rzeczywistego
- clock on - włączenie timera
- clock off - wyłączenie timera
- find <blok> <wartość> - wyszukiwanie wartości w bloku pamięci
- binload <adres> - inicjalizacja ładowania binarnego pod zadany adres
Wyrażenia
Wyrażenia pozwalają w linii poleceń debuggera przeprowadzać obliczenia oraz manipulować zawartością rejestrów, pamięci i zmiennych. Rezultat wyrażenia wyświetlany jest również w linii poleceń, natychmiast po jego obliczeniu. 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
- Stan przerwania w rejestrze przerwań RZ dostępny jako RZ[numer_przerwania] (np.: RZ[6], RZ[zmienna+1])
- Zawartość komórki pamięci, adresowane jako [adres] lub [blok:adres]
- Zmienne: debugger pozwala na użycie dowolnej zmiennej, której nazwa nie jest słowem kluczowym (poleceniem), np: a, adres, zmienna3.
Domyślnie, liczby w linii poleceń debuggera wyświetlane są jako liczby szesnastkowe bez znaku. Możliwa jest jednak 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
- int(wyrażenie) - wartość wyrażenia zostanie wyświetlona w systemie dziesiętnym, ze znakiem
- 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
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ą, komórką pamięci lub pozycją rejestru RZ)
- 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
Debugger pozwala na obliczenie wartości wielu wyrażeń w jednej linii polecenia i wyświetlenie wyników również w jednej linii odpowiedzi. Można to zrobić podając kolejne wyrażenia oddzielone przecinkami, np:
em400> 1+2, oct(12+[9]), dec(r1-1), a=12, [a], [a]=1, [a] 0x3 033 -1 0xc 0x0 0x1 0x1