Przedmiot: SYSTEMY INFORMATYCZNE W BANKOWOŚCI
Transkrypt
Przedmiot: SYSTEMY INFORMATYCZNE W BANKOWOŚCI
Przedmiot : Programowanie w języku wewnętrznym Ćwiczenie nr 1 1. Wprowadzenie do języka Asembler. Język asembler to tzw. język niskiego poziomu, jest zbliżony do języka maszynowego. Jedno polecenie asemblera odpowiada jednemu rozkazowi kodu maszynowego. Natomiast polecenie języka wysokiego poziomu jest tłumaczone na wiele rozkazów procesora. Polecenie w języku asembler to symboliczna reprezentacja pojedynczego rozkazu kodu maszynowego procesora. Określane jest również jako mnemonika, czyli prosty kod literowy ułatwiający zapamiętanie rozkazu procesora. Przykładowy kod programu w języku maszynowym : B8 05 00 05 10 00 05 20 00 A3 20 01 CD 20 Dla komputera program to grupa liczb umieszczona w pamięci. Ta grupa liczb to rozkazy i dane dla procesora jak w linii powyżej, które zostaną uruchomione, gdy rejstr IP ( Instruction Pointer ) będzie zawierał adres pamięci pierwszego rozkazu powyższej linii. Aby zrozumieć powyższy kod maszynowy należy dokonać deasemblacji : Tab. 1. LP. Rozkaz kodu maszynowego : Polecenia po deasemblacji : 1. B8 05 00 MOV AX, 0005 2. 05 10 00 ADD AX, 0010 3. 05 20 00 ADD AX, 0020 4. A3 20 01 MOV [0120], AX 5. CD 20 INT 20 Przedstawione powyżej rozkazy kodu maszynowego zawierają jeden bajt kodu i dwa bajty argumentu bezpośredniego lub operand pamięci. Polecenia asemblera mają od 1 do 6 bajtów. Bajty liczb dwójkowych są odwracane w czasie zapisywania do pamięci. Przy zapisie wartości 0005h do rejestru kod maszynowy zamienia miejscami bajty 05h i 00h. Każdy wiersz przykładu zaczyna się od mnemoniku, w tym przykładzie są to polecenia MOV, ADD, INT, po których występują operandy. Polecenia MOV nakazuje procesorowi przeniesienie lub skopiowanie danych między źródłowym a docelowym argumentem. W linii nr 1, wartość 5 przenoszona jest do rejestru AX. W linii nr 2, wartość 10 jest dodawana do AX. Po operacji rejestr zawiera 15. W linii nr 3, do AX jest dodawana wartość 20. W rejsestrze AX jest wartość 35. Ostatnia linia to zatrzymanie programu. 2. Polecenia programu debug do asemblowania i testowania programu. Dla procesorów Intel jest wiele komercyjnych debuggerów : CodeView, Periscope, Atron, TurboDebugger, Advanced-Trace-86. Debug jest z nich najprostszy i zasady rządzace tym programem funkcjonują także w bardziej zaawansowanych debuggerach. Debug to debugger poziomu asemblera, gdyż wyświetla jedynie mnemoniki asemblera i rozkazy maszynowe. Debug może być użyty do analizy skompilowanego programu C++, natomiast afektem tej analizy nie będzie kod źródłowy języka C++, a zdeasemblowane rozkazy maszynowe. Debuger wyświetla zawartość pamięci i pozwala na sprawdzanie zmian rejestrów i zmiennych. Pozwala na uruchomienie programu w trybie krokowym – śledzenie, upraszcza to odnajdywanie błędów. Jest on składnikiem systemu DOS i Windows. Jest to dobre narzędzie do pisania krótkich programów i pozwala zapoznać się z funkcjonowaniem procesorów Intel. Lista poleceń programu Debug : ( Tab. 2. ) assemble ( asembluj ) A [ adres ] compare ( porównaj ) C zakres adres dump ( zrzut ) D [ zakres ] enter ( wprowadź ) E adres [ lista ] fill ( wypełnij ) F zakres lista go ( uruchom ) G [ =adres ] [ adresy ] hex ( operacje szesnastkowe ) H wartość1 wartość2 input ( wprowadź ) I port load ( załaduj ) L [ adres ] [ dysk ] [ pierwszy_sektor ] [ liczba ] move ( przenieś ) M zakres adres name ( nazwij ) N [ ścieżka ] [ lista argumentów ] output ( wyślij ) O port bajt proceed ( wykonaj ) P [ =adres ] [ liczba ] quit ( wyjdź ) Q register ( rejestr ) R [ rejestr ] search ( szukaj ) S zakres lista trace ( śledź ) T [ =adres ] [ wartość ] unassemble ( desasembluj ) U [ zakres ] write ( zapisz ) W [ adres ] [ dysk ] [ pierwszy_sektor ] [ liczba ] 3. Zadania do wykonania w ćwiczeniu a). Utwórz na pulpicie skrót do programu command.com. b). Uruchom utworzony skrót, następnie uruchom program debug. c). Wykorzystując program debug wpisz polecenia z poniższej tabeli. Tab. 3. LP. Polecenie Opis 1. A 100 2. mov ax,5 Pierwsze polecenie programu, przeniesienie 5 do rejestru AX 3. add ax,10 Dodanie 10 do rejestru AX 4. add ax,20 Dodanie 20 do rejestru AX 5. mov [0120],ax 6. int 20 Zatrzymanie programu 7. wciśnij Enter Powrót do trybu poleceń 8. R Wyświetlenie wartości rejestrów przed uruchomieniem programu 9. T Śledzenie pierwszego polecenia 10. T Śledzenie drugiego polecenia 11. T Śledzenie trzeciego polecenia 12. G Wykonanie pozostałej części programu 13. Q Wyjście z Debug Rozpoczęcie asemblowania poleceń z przesumięciem 100 Zapisanie sumy w pamięci pod adresem 0120 • podaj liczbę szesnastkową następujących słów 16-bitowych bez znaku : - 1001001101011010 - 1111011111100011 - 1011111010111000 • podaj liczbę dwójkową będącą odpowiednikiem wartości słów szesnastkowych : - EFC0 - FD11 - AC7D - 9317 • jaka jest najmniejsza liczba bitów w systemie dwójkowym niezbędna do przedstawienie wartości dziesiętnej 66 ? • Rozkaz dla procesora : 05 A0 0A - który bajt operacji rozkazu procesora przedstawia kod operacji i co on wykonuje ? - podaj dziesiętnie liczbę, na której będzie wykonany powyższy rozkaz. • ustaw z poziomu poleceń programu debug wartości rejestrów : - AX na AA00 - BX na 00BB - CX na CC00 - DX na 00DD • zasembluj poniższy program z użyciem programu debug. Jakie będą końcowe wartości rejestrów AX i BX ? - A100 - mov ax,1234 - mov bl,al - mov bh, ah - add bx,03c6 • zasembluj poniższy program z użyciem programu debug. Jakie będą końcowe wartości rejestrów AX i BX ? - A 100 - mov ax,6BFF - mov [250],ax - mov bh,[250] - inc bx • do programu programu z Tab.1. dodaj następujące linie programu między 3-im, a 4-tym wierszem : - wykonaj polecenie INC z operandem AX - wykonaj polecenie SUB z operandem docelowym AX i z operandem źródłowym 5 jaka będzie zawartość komórki pamięci o adresie [0120] po wykonaniu całego programu, pokaż to przy użyciu programu debug. 4. Literatura : • Abel P. Programowanie Asembler IBM PC. RM, W-wa 2004 • Kruk S. Asembler. Wykłady i ćwiczenia. ..mikom, W-wa 2003.