UNIWERSYTET ZIELONOGÓRSKI

Transkrypt

UNIWERSYTET ZIELONOGÓRSKI
ARCHITEKTURA KOMPUTERÓW - WPROWADZENIE
Uniwersytet Zielonogórski
Wydział Elektrotechniki, Informatyki i Telekomunikacji
Instytut Informatyki i Elektroniki
Zakład Inżynierii Komputerowej
przygotował: Jakub Półchłopek, dr inż. Remigiusz Wiśniewski
WPROWADZENIE DO JĘZYKA ASEMBLER
ZAGADNIENIA




architektura komputera PC,
rejestry ogólnego przeznaczenia,
przerwania systemowe,
struktura programu wykonywalnego.
WSTĘP
Asembler (ang. assembler) - język programowania niskiego poziomu. Jest to język najbardziej zbliżony do kodu
maszynowego (w tej postaci instrukcje są wykonywane przez procesor). Wynika stąd, że programy napisane w tym
języku w największym stopniu wpływają na zachowanie komputera. Języki wysokiego poziomu są najpierw
tłumaczone poprzez odpowiednie kompilatory na język assembler, a następnie na język maszynowy. Największą zaletą
języka asembler jest szybkość oraz rozmiar tworzonego programu wykonywalnego. Asembler jest powszechnym
językiem dla programistów zajmujących się bezpieczeństwem danych, lecz także dla różnego rodzaju hakerów i osób
„piszących” wirusy.
REJESTRY OGÓLNEGO PRZEZNACZENIA
Rejestry ogólnego przeznaczenia znajdują się wewnątrz procesora (w przestrzeni adresowej pamięci SRAM, gdzie
zajmują pierwsze 32 bajty). Te specjalistyczne struktury pozwalają przechowywać niewielkie dane, w zależności od
typu procesora.
Rejestry o rozmiarze 64 bitów zawierają w sobie rejestr 32 bitowy, który następnie dzieli się na jeden rejestr 16 bitowy
i dwa rejestry 8 bitowe, zawierające młodsze i starsze bity:
64 bity
32 bity
16 bitów
8 bitów (starsze)
8 bitów (młodsze)
RAX
RBX
RCX
RDX
EAX
EBX
ECX
EDX
AX
BX
CX
DX
AH
BH
CH
DH
AL
BL
CL
DL
Przykładowa organizacja rejestrów jest następująca: rejestr RAX (64 bity) zawiera w sobie rejestr EAX (młodsze
32 bity), który z kolei to posiada rejestr AX (młodsze 16 bitów), a ten dzieli się na dwa rejestry 8 bitowe: AH oraz AL.
Analogicznie sytuacja powtarza się dla pozostałych rejestrów.
Rejestry ogólnego przeznaczenia dzielimy następująco:
 AX – jest to rejestr akumulatora, który zawiera tymczasowe dane wykorzystywane podczas pisania
programów (programowania). Rejestr stosowany jest
zazwyczaj do wszelkich obliczeń, jak i do
przekazywania informacji do systemu operacyjnego oraz systemu BIOS.
 BX – jest to rejestr bazowy, używany do przetrzymywania adresów wykorzystywanych w programie.
 CX – jest to rejestr licznika, np. stosowany jako licznik w pętlach.
 DX – jest to rejestr danych, stosowany do obsługi portów wyjścia/wejścia oraz do operacji arytmetycznych.
REJESTRY INDEKSOWE I WSKAŹNIKOWE


SI/ ESI / RSI (Source Index, 16/32/64 bity) – wskazuje na obszar w pamięci, skąd są pobierane dane.
DI/ EDI/ RDI (Destination Index, 16/32/64 bity) – wskazuje obszar w pamięci, do którego są przekazywane
dane.
http://www.uz.zgora.pl/~rwisniew/
ARCHITEKTURA KOMPUTERÓW - WPROWADZENIE
Uniwersytet Zielonogórski
Wydział Elektrotechniki, Informatyki i Telekomunikacji
Instytut Informatyki i Elektroniki
Zakład Inżynierii Komputerowej
przygotował: Jakub Półchłopek, dr inż. Remigiusz Wiśniewski



SP (Stack Pointer) – wskazuje adres ostatniego słowa na stosie. W zależności od wykonanej operacji, jego
wartość jest automatycznie zwiększana lub zmniejszana.
BP (Base Pointer) – wykorzystywany do adresowania pamięci na stosie.
IP (Instruction Pointer) – wskazuje kolejną instrukcję, jaką ma do wykonania procesor.
REJESTRY SEGMENTOWE






CS (Code Segment) – wskazuje segment danych w pamięci, gdzie zapisane są instrukcje.
DS (Data Segment) – wskazuje segment danych w pamięci, gdzie zapisane są dane.
SS (Stack Segment) – wskazuje segment danych w pamięci, gdzie zapisane są stosy.
ES (Extra Segment) – wskazuje segment danych w pamięci, gdzie zapisane są dane docelowe dla instrukcji
łańcuchowych.
FS - dodatkowy segment danych (w procesorach 386 lub nowszych).
GS - dodatkowy segment danych (w procesorach 386 lub nowszych).
REJESTRY STANU PROCESORA (REJESTR FLAG)
Rozróżnić można zwykłe FLAGI 16-bitowe, E-FLAGI (32-bitowe) lub R-FLAGI (64-bitowe). Flagi służą przede
wszystkim do badania wyniku ostatniej operacji (na przykład czy nie wystąpiło przepełnienie, czy wynik jest zerem,
itp.). Rejestr flag można podzielić na dwie zasadnicze grupy: kontrolną oraz arytmetyczną. Flagi arytmetyczne
dostarczają rozszerzonych informacji na temat operacji arytmetyczno-logicznych, natomiast flagi kontrolne mają
wpływ na tryb pracy mikroprocesora.









CF (Carry Flag) - flaga przeniesienia (przyjmuje wartość 1, jeśli wystąpiło przeniesienie).
PF (Parity Flag) - flaga parzystości (przyjmuje wartość 1, jeśli wynik zawiera parzystą lub nie parzystą
(zależy od typu procesora) ilość jedynek w mniej znaczącym bajcie.
AF (Auxillary Flag) - flaga przyjmuje wartość 1, jeśli w ostatniej operacji wystąpiło przemieszczenie z bitu
3 na bit 4, lub z bitu 4 na bit 3. Stosowana w operacjach na kodach BCD.
ZF (Zero Flag) - przyjmuje wartość 1, jeśli wynik ostatniej operacji jest równy zero.
SF (Sign Flag) - flaga znaku, przyjmuje wartość najbardziej znaczącego bitu z wyniku ostatniej operacji.
TF (Trap Flag) - ustawienie wartości na 1 oznacza przejście procesora w tryb pracy krokowej (co oznacza, że
po każdej wykonanej operacji procesor wykona przejście do właściwego podprogramu).
IF (Interrupt Flag) – jeśli jest równa 1, to program może być przerywany przez zewnętrzne przerwania
(przejście procesora do obsługi przerwań, jest to domyślny tryb pracy procesora).
DF (Direction Flag) – flaga po przyjęciu wartości 1 powoduje zmniejszanie się wartości rejestrów SI i DI
podczas wykonywania operacji łańcuchowych.
OF (Overflow Flag) - gdy flaga przyjmuje wartość 1 oznacza to, że wykonywana operacja spowodowała
przeniesienie na najbardziej znaczący bit, ale nie doszło do przekroczenia zakresu.
PRZERWANIA
Przerwanie jest stosowane do zatrzymania wykonującego się w danej chwili programu i przekazanie sterowania do
procedury, która to przerwanie obsługuje. Gdy procedura dobiegnie końca następuje powrót do wcześniej
wykonywanego programu. Przerwania można podzielić na dwa rodzaje:


przerwania sprzętowe - wywoływane na żądanie urządzeń zewnętrznych (przerwanie sprzętowe zewnętrzne),
lub też podczas wystąpienia wyjątków (przerwanie sprzętowe wewnętrzne). Przykład: kombinacja klawiszy
Ctrl+Break.
przerwania systemowe - z kodu programu zostaje wywołana procedura obsługująca przerwanie, służąca
najczęściej do komunikowania się z systemem operacyjnym.
Każde przerwanie ma swój priorytet (IRQ), na podstawie którego określana jest kolejność wykonywanych przerwań,
jeśli zostały one zgłoszone w tym samym momencie. Wybór funkcji przerwania dokonywany jest przy pomocy
rejestru AH.
http://www.uz.zgora.pl/~rwisniew/
ARCHITEKTURA KOMPUTERÓW - WPROWADZENIE
Uniwersytet Zielonogórski
Wydział Elektrotechniki, Informatyki i Telekomunikacji
Instytut Informatyki i Elektroniki
Zakład Inżynierii Komputerowej
przygotował: Jakub Półchłopek, dr inż. Remigiusz Wiśniewski
Ważniejsze funkcje przerwania 21h:
 AH=01h – odczyt znaku z klawiatury (wyjście: rejestr AL);
 AH=02h – wyświetlenie znaku na ekranie (wejście: rejestr DL – kod znaku do wyświetlenia),
 AH=09h – wyświetlenie ciągu znaków na ekranie (wejście: rejestr DX-adres ciągu znaku do wyświetlenia),
 AH=0Ah – odczyt ciągu znaków z klawiatury (wejście: rejestr DX-adres ciągu znaku do odczytu),
 AH=4Ch – zakończenie programu (wejście: rejestr AL – wartość zwracana przez program).
PRZYKŁADOWY PROGRAM
.286
.model tiny
.data
napis db
'To jest napis$'
;Wyświetlanie napisu kończy znak $
.code
;etykieta start jest punktem startowym programu
Start:
mov
ax,@data
;zaladowanie danych do segmentu DS
mov
ds,ax
mov
mov
int
dx,offset napis
ah,09h
21h
;alternatywnie: lea dx,napis
mov
int
ax,4C00h
21h
;procedura kończąca program
;INT 21,AH 4C = zakończenie programu
;INT 21,AH 09 = wypis ciągu znaku spod adresu DX
end Start
end
http://www.uz.zgora.pl/~rwisniew/