Architektura komputerów - Wprowadzenie do architektury komputerów

1. Narzędzia programistyczne x86:
  • TASM (Turbo Assembler) - pakiet, w którego skład wchodzi asembler, linker oraz debugger
  • NASM (Netwide Assembler) - darmowy kompilator. Program zawarty jest w jednym pliku wykonywalnym, za pomocą którego można skompilować program do jednego z kilku oferowanych formatów.
  • MASM (Macro Assembler) - narzędzie do pisania niskopoziomowych programów dla systemu Windows
  • FASM (Flat Assembler) - darmowy kompilator m.in. dla systemów Windows, Linux, DOS
2. TASM:
  • tasm.exe -> program służy do analizy programu źródłowego pod kątem poprawności ze składnią języka (asemblacji). Jeśli jest on napisany poprawnie to pojawi się plik o takiej samej nazwie jak plik źródłowy o rozszerzeniu .obj. W przeciwnym przypadku pojawi się odpowiedni komunikat o błędzie. tasm plik.asm
  • tlink.exe -> program służy do utworzenia wersji uruchamialnej programu na podstawie pliku obiektowego obj (konsolidacja). Utworzy się wtedy plik o rozszerzeniu .exe. tlink plik1.obj
  • td.exe -> programu się używa, gdy udało się utworzyć program uruchamialny, ale nie działa on poprawnie (debugger). Z jego poziomu możemy sprawdzać krok po kroku jak działa program (ze szczegółami). td plik1.exe
Aby plik .exe mógł być uruchomiony z programem td.exe należy dołączyć do niego dodatkowe informacje

tasm /zi plik1.asm
tlink /v plik1.obj

Odpowiednie opcje (/zi oraz /v) programów tasm.exe i tlink.exe pozwolą na dodanie do pliku
wynikowego *.exe tych informacji, których potrzebuje program td.exe

3. FASM ma zintegrowane dwa programy, ale musimy się dodatkowo zaopatrzyć w debugger (np. ollydbg)

4. Architektura procesora Intel 8086 w trybie rzeczywistym (REAL):

Wyróżnia się dwie jednostki funkcjonalne: 
  • jednostka wykonawcza (EU) - tutaj realizowane są operacje przetwarzania danych
  • jednostka współpracy z magistralą (interfejsowa) (BIU) - odpowiedzialna jest za wystawianie na zewnątrz procesora adresów fizycznych, po wcześniejszym przetworzeniu adresów logicznych zgodnie z algorytmem określonym przez segmentację pamięci

Dla procesorów rodziny x86, szesnaście starszych bitów adresu bazowego segmentu znajduje się na jednym z czterech rejestrów segmentowych, podczas gdy cztery najmłodsze bity są równe zeru.  W związku z tym, adres bazowy w segmencie jest reprezentowany przez liczbę 16-bitową, segment posiada stałą długość równą 2^16 = 64 kB. Procesory te w trybie rzeczywistym zawierają 4 rejestry segmentowe (można wykorzystać 4 segmenty jednocześnie):
  • segment programu (rejestr CS)
  • segment stosu (rejestr SS)
  • segmenty danych (rejestry DS, ES)
5. Schemat segmentacji pamięci w Intel 8086:

6. Rejestry procesora to niewielkich rozmiarów komórki pamięci umieszczone wewnątrz procesora służące do tymczasowego przechowania wyników obliczeń, adresów lokacji w pamięci operacyjnej itp.

Rejestry zaczynające się od E są rejestrami 32-bitowymi, natomiast te bez literki E są 16-bitowe:
  • (E)AX - rejestr wykorzystywany tylko do operacji w operacjach arytmetycznych i logicznych
  • (E)BX - rejestr adresowy danych
  • (E)CX - rejestr licznikowy dla rozkazów pętli iteracyjnych
  • (E)BP - rejestr adresowy układów wejścia-wyjścia
  • (E)SP - wskaźnik stosu
  • (E)SI, E(DI) - rejestry indeksowe
  • (E)IP  - wskaźnik rozkazu (wskazuje adres rozkazu wykonywany w następnym cyklu rozkazowym)
7. Rejestr segmentowy to rejestr procesora, który służy do przechowywania adresu początkowego adresu pamięci, w którym umieszczane są rozkazy, dane albo stos programów. Wyróżniamy następujące rejestry segmentowe:
  • CS - pobieranie rozkazu
  • SS - operacje na stosie
  • DS - odczyt/zapis danych oraz operacje na łańcuchach (źródło danych)
  • ES - operacje na łańcuchach (przeznaczenie danych)
  • SS - adresowanie bazowe rejestrem BP
8. Rejestr flagowy (rejestr stanu) to rejestr procesora opisujący i kontrolujący jego stan. Jego zawartość zależy do ostatnio wykonanej operacji lub od trybu pracy procesora. Struktura rejestru flagowego:
  • bity warunków - są ustawiane przez jednostkę arytmetyczno-logiczną (ALU) po każdej operacji arytmetycznej lub logicznej; są podstawą do wykonywania rozkazów skoków warunkowych
  • bity stanu - są ustawiane programowo; określają sposób pracy procesora
Bity warunków:
  • C - flaga przeniesienia (wskazuje, że wynik operacji zawiera się w większej niż dostępna liczbie bitów)
  • O - flaga przepełnienia (wskazuje, czy wynik operacji powoduje przepełnienie reprezentacji słowa procesora; flaga podobna do flagi przeniesienia, jednak odnosi się do operacji ze znakiem)
  • Z - flaga zera (wskazuje, że wynikiem operacji arytmetycznej bądź logicznej było zero)
  • S - flaga znaku (wskazuje, że wynik operacji arytmetycznej był ujemny)
  • P - flaga parzystości (wskazuje parzystość liczby ustawionych bitów wyniku)
  • A - flaga przeniesienia pomocniczego (wykorzystywana podczas operacji na liczbach dziesiętnych w kodzie BCD)
Bity stanu:
  • D - flaga kierunku (wskazuje kierunek operacji na blokach pamięci)
  • I - flaga maskowania przerwań (ustawienie lub wyczyszczenie flagi umożliwia włączenie bądź wyłączenie przerwań)
  • T - flaga pracy krokowej (jeśli T=0 to po wykonaniu każdego rozkazu generowany jest wyjątek)