Debugger EM400: Różnice pomiędzy wersjami

Z MERA 400 wiki
Przejdź do nawigacji Przejdź do wyszukiwania
Nie podano opisu zmian
Nie podano opisu zmian
Linia 9: Linia 9:
* '''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.
* '''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''.
* '''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
* '''regs''' - Wyświetl zawartość rejestrów R1-R7
Linia 15: Linia 16:
* '''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.
* '''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''
* '''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
* '''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
* '''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 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 =
= Konwersje podstawy liczb =

Wersja z 17:18, 3 lis 2012

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 0)
    • 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