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.