Debugger EM400: Różnice pomiędzy wersjami

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania
Nie podano opisu zmian
 
(Nie pokazano 27 pośrednich wersji utworzonych przez tego samego użytkownika)
Linia 1: Linia 1:
Debuger emulatora EM400 pozwala śledzić i kontrolować stan emulowanej maszyny.
Debugger emulatora EM400 pozwala śledzić i kontrolować stan emulowanej maszyny.


W linii poleceń debugera można używać następujących konstrukcji:
W linii poleceń debuggera można używać następujących konstrukcji:


= Polecenia =
= Polecenia =


Polecenia służą do sterowania pracą emulatora i debugera oraz wyświetlania informacji o stanie emulowanej maszyny.
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
* '''step [''n'']''' - Wykonaj instrukcję wskazaną przez licznik rozkazów. Jeśli opcjonalny parametr ''n'' jest obecny, wykonaj ''n'' kolejnych instrukcji.
* '''cycle''' - Wykonaj instrukcję wskazaną przez licznik rozkazów.
* '''run''' - Kontynuuj emulację
* '''start''' - Kontynuuj emulację aż do napotkania kolejnej pułapki
* '''help [''cmd'']''' - Wyświetl pomoc. Jeśli opcjonalny parametr ''cmd'' jest obecny, wyświetl pomoc na temad komendy ''cmd''.
* '''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
* '''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
* '''reset''' - Zresetuj emulowaną maszynę. Wpisuje ''0'' do wszystkich rejestrów i wskaźników.
* '''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''
* '''trans [[''addr''] ''n'']''' - Jak wyżej, ale zamiast kodu assemblera wyświetlany jest pseudokod.
* '''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 [''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
* '''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 add <wyrażenie>''' - dodanie nowej pułapki, która jest aktywowana, gdy ''wyrażenie'' jest spełnione (różne od 0)
** '''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 del <numer>''' - usunięcie pułapki o danym numerze
** '''brk test <numer>''' - testowanie warunku pułapki
** '''brk off <numer>''' - tymczasowe wyłączenie pułapki
** '''brk disable <numer>''' - tymczasowe wyłączenie pułapki
** '''brk on <numer>''' - ponowne włączenie pułapki
** '''brk enable <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|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


= Konwersje podstawy liczb =
= Wyrażenia =


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:
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
= 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:
W wyrażeniach dozwolone są następujące operatory:
Linia 51: Linia 90:
* przesunięć bitowych: '''<<, >>'''
* przesunięć bitowych: '''<<, >>'''
* porównań: '''==, !=, <=, >=, >, <'''
* porównań: '''==, !=, <=, >=, >, <'''
* przypisania: '''=''' (lewa strona wyrażenia musi być rejestrem, zmienną lub komórką pamięci)
* 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 57: 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