Debugger EM400: Różnice pomiędzy wersjami
mNie podano opisu zmian |
m (→Wyrażenia) |
||
Linia 48: | Linia 48: | ||
* Liczba w systemie dziesiętnym, ósemkowym, szesnastkowym lub binarnym (np.: '''15''', '''0177''', '''0xffa8''', '''0b1011100111011110''') | * 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 | * 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'']''' | * 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'''. | * 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 | 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 | ||
Linia 66: | Linia 67: | ||
* 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) |
Wersja z 12:56, 10 kwi 2013
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
- step [n] - Wykonaj instrukcję wskazaną przez licznik rozkazów. Jeśli opcjonalny parametr n jest obecny, wykonaj n kolejnych instrukcji.
- run - Kontynuuj emulację
- load <plik> [n] - Załaduj zawartość pliku do bloku pamięci n.
- 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
- 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
- memcl - Wyczyść zawartość całej pamięci
- memcfg - Pokaż sprzętową i programową konfigurację pamięci
- stack - Pokaż stos
- 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 test <numer> - testowanie warunku pułapki
- brk off <numer> - tymczasowe wyłączenie pułapki
- brk on <numer> - ponowne włączenie pułapki
- log - logowanie operacji emulatora do pliku
- log - wyświetlenie bieżących ustawień logowania
- log on - włączenie logowania
- log off - wyłączenie logowania
- log file <plik> - podanie zbioru, do którego zapisywany będzie log
- log <domena>:<poziom> - ustawienie poziomu logowania dla danej domeny. Im większy poziom logowania, tym więcej szczegółów jest logowanych. W praktyce wykorzystywane są poziomy 1-100. Dostępne domeny to:
- reg - operacje na rejestrach
- mem - operacje na pamięci
- cpu - operacje wykonywane przez CPU
- int - operacje związane z przerwaniami
- io - operacje wejścia/wyjścia
- misc - inne
- all - wszystkie
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