Procesor Intel 8086 model programisty. Arkadiusz Chrobot

Podobne dokumenty
Procesor Intel 8086 model programisty. Arkadiusz Chrobot

Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

Programowanie niskopoziomowe

Sprzęt i architektura komputerów

Architektura komputerów

J. Duntemann Zrozumieć Assembler Leo J. Scanlon Assembler 8086/8088/80286 S. Kruk Programowanie w Języku Assembler

CPU. Architektura FLAGS Bit: dr Paweł Kowalczyk; DPTNS, KFCS UŁ. SI 16 bit. 16 bit. 16 bit.

Sprzęt i architektura komputerów

organizacja procesora 8086

Organizacja typowego mikroprocesora

Architektura komputerów. Komputer Procesor Mikroprocesor koncepcja Johna von Neumanna

UTK Można stwierdzić, że wszystkie działania i operacje zachodzące w systemie są sterowane bądź inicjowane przez mikroprocesor.

Zadanie Zaobserwuj zachowanie procesora i stosu podczas wykonywania następujących programów

Programowanie Niskopoziomowe

end start ; ustawienie punktu startu programu i koniec instrukcji w assemblerze.

Architektura Systemów Komputerowych, Wydział Informatyki, ZUT

Architektura komputerów. Asembler procesorów rodziny x86

Układ sterowania, magistrale i organizacja pamięci. Dariusz Chaberski

Procesory rodziny x86. Dariusz Chaberski

Podstawy techniki cyfrowej Mikroprocesory. Mgr inż. Bogdan Pietrzak ZSR CKP Świdwin

Wstęp do informatyki. System komputerowy. Magistrala systemowa. Architektura komputera. Cezary Bolek

Mikroprocesor Intel 8088 (8086)

PODSTAWOWE ELEMENTY ASEMBLERA TRYBY ADRESOWANIA. OPERATORY ASEMBLERA

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy

Logiczny model komputera i działanie procesora. Część 1.

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Architektura Systemów Komputerowych. Jednostka ALU Przestrzeń adresowa Tryby adresowania

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

Adam Kotynia, Łukasz Kowalczyk

ARCHITEKTURA PROCESORA,

Architektura komputerów

Magistrala systemowa (System Bus)

Architektura komputera. Dane i rozkazy przechowywane są w tej samej pamięci umożliwiającej zapis i odczyt

Przedmiot : Programowanie w języku wewnętrznym. Ćwiczenie nr 4

Struktura i działanie jednostki centralnej

BUDOWA I DZIAŁANIE MIKROPROCESORA

Technika mikroprocesorowa I Wykład 2

Programowanie na poziomie sprzętu. Tryb chroniony cz. 1

dr inż. Jarosław Forenc

Mikroprocesory rodziny INTEL 80x86

2 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.02 Rok akad. 2011/ / 24

Układ wykonawczy, instrukcje i adresowanie. Dariusz Chaberski

Zarządzanie pamięcią w systemie operacyjnym

1. Operacje logiczne A B A OR B

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

Pośredniczy we współpracy pomiędzy procesorem a urządzeniem we/wy. W szczególności do jego zadań należy:

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Architektura Systemów Komputerowych

Przykładowe pytania DSP 1

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Sprzętowe wspomaganie pamięci wirtualnej

Lista instrukcji mikroprocesora Programowanie w assemblerze

Architektura Systemów Komputerowych

Architektura systemów komputerowych Laboratorium 7 Symulator SMS32 Stos, Tablice, Procedury

PRZEWODNIK PO PRZEDMIOCIE

PROGRAMY REZYDENTNE Terminate and State Resident, TSR

CYKL ROZKAZOWY = 1 lub 2(4) cykle maszynowe

Architektura Systemów Komputerowych. Rozwój architektury komputerów klasy PC

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Architektura systemów komputerowych Laboratorium 14 Symulator SMS32 Implementacja algorytmów

Programowanie Niskopoziomowe

Programowanie Niskopoziomowe

Programowanie Niskopoziomowe

Luty 2001 Algorytmy (7) 2000/2001

Programowanie w asemblerze Środowiska 64-bitowe

Zarządzanie pamięcią operacyjną

SYSTEMY LICZBOWE. Zapis w systemie dziesiętnym

RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC,

LEKCJA TEMAT: Zasada działania komputera.

Wybrane zagadnienia elektroniki współczesnej

Sterowanie pracą programu

Mikroprocesor Operacje wejścia / wyjścia

Architektura systemów informatycznych

DYDAKTYKA ZAGADNIENIA CYFROWE ZAGADNIENIA CYFROWE

PAMIĘCI. Część 1. Przygotował: Ryszard Kijanka

Adresowanie. W trybie natychmiastowym pole adresowe zawiera bezpośrednio operand czyli daną dla rozkazu.

UTK ARCHITEKTURA PROCESORÓW 80386/ Budowa procesora Struktura wewnętrzna logiczna procesora 80386

Architektura komputerów

architektura komputerów w 1 1

Ćwiczenie nr 4. Zasady kodowania podprogramów

MIKROKONTROLERY I MIKROPROCESORY

, " _/'--- " ~ n\l f.4e ' v. ,,v P-J.. ~ v v lu J. ... j -:;.",II. ,""", ",,> I->~" re. dr. f It41I r> ~ '<Q., M-c 'le...,,e. b,n '" u /.

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Liczniki, rejestry lab. 08 Mikrokontrolery WSTĘP

Programowanie komputera

1. Asembler i wstawki asemblerowe w C

Zarządzanie pamięcią operacyjną zagadnienia podstawowe

Systemy liczbowe używane w technice komputerowej

Techniki multimedialne

JAK DZIAŁAJĄ FUNKCJE PODZIAŁ PAMIĘCI

Kod znak-moduł. Wartość liczby wynosi. Reprezentacja liczb w kodzie ZM w 8-bitowym formacie:

Kod uzupełnień do dwóch jest najczęściej stosowanym systemem zapisu liczb ujemnych wśród systemów binarnych.

Programowanie Niskopoziomowe

Wprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy

Architektura systemów komputerowych Laboratorium 8 Symulator SMS32 Instrukcje skoku i pętle

Kod U2 Opracował: Andrzej Nowak

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Transkrypt:

Procesor Intel 8086 model programisty Arkadiusz Chrobot 26 września 2011

Spis treści 1 Wstęp 2 2 Rejestry procesora 8086 2 3 Adresowanie pamięci 4 4 Ważne elementy języka Pascal 8 1

1 Wstęp Głównym celem zadań, które będą realizowane przez Państwa w ramach laboratorium do przedmiotu Systemy Operacyjne, jest poznanie budowy i działania jednego z najprostszych systemów operacyjnych: MS-DOS System ten był pierwotnie przeznaczony dla komputerów wyposażonych w 16-bitowe procesory firmy Intel Współcześnie, procesor każdego komputera klasy PC umożliwia pracę w tzw trybie rzeczywistym i trybie wirtualnym, w których jest wstecznie zgodny z tymi układami Nawet pobieżna znajomość budowy 16-bitowych mikroprocesorów Intela znacznie ułatwi zadanie poznania funkcjonowania oprogramowania napisanego dla nich Naszą uwagę skupimy na opisie cech procesora 8086, które mają największe znaczenie dla programisty 2 Rejestry procesora 8086 Formalnie, przedstawienie modelu programisty danego procesora powinno się zacząć od omówienia jego listy rozkazów Niestety objętość tej instrukcji, ani czas przeznaczony na zajęcia laboratoryjne nie pozwalają na to Nasz opis zaczniemy więc od rejestrów, które są dostępne, bezpośrednio lub pośrednio dla programisty Procesor 8086 wyposażony jest w osiem 16-bitowych rejestrów, które zwykło się nazywać rejestrami ogólnego przeznaczenia Są to rejestry AX, BX, CX, DX, SI, DI, SP i BP Rzeczywiście, każdy z nich może zostać użyty jako rejestr, w którym przechowywane są dane, jednakże niektóre z rozkazów procesora 8086 traktują te rejestry w specjalny sposób Rejestr AX nazywany jest rejestrem akumulatora, ponieważ z niego muszą korzystać operacje arytmetyczne (konkretnie: mnożenie i dzielenie) Rejestr BX jest nazywany rejestrem bazowym, ponieważ jest wykorzystywany w niektórych trybach adresowania do przechowywania części adresu nazywanej przesunięciem lub offsetem 1 Adres ten wskazuje komórkę w obszarze pamięci nazywanym segmentem danych 2 Rejestr CX jest nazywany rejestrem licznikowym, ponieważ korzysta z niego instrukcja pętli (ang loop) przechowując liczbę powtórzeń, które musi jeszcze wykonać Rejestr DX może pełnić rolę rozszerzenia akumulatora w instrukcjach mnożenia i dzielenia (są w nim przechowywane starsze bity wyniku) Rejestry SI i DI pełnią rolę rejestrów indeksowych w instrukcjach łańcuchowych SI zawiera offset źródła, a DI offset przeznaczenia Rejestr SP jest używany przez instrukcje obsługujące sprzętowy stos i nazywany jest wskaźnikiem stosu (ang stack pointer) Ostatnim z grupy omawianych rejestrów jest rejestr BP, który może pełnić podobną rolę jak rejestr BX (dlatego również nazywany jest rejestrem bazowym), ale zawiera 1 Termin ten będzie objaśniony w rozdziale o adresowaniu pamięci 2 Ten termin również będzie opisany w rozdziale poświęconym adresowaniu pamięci 2

przesunięcie względem początku segmentu stosu Rejestry AX, BX, CX i DX odznaczają się pewną szczególną cechą Każdy z nich jest złożony z dwóch 8-bitowych rejestrów Ich nazwy są dwuliterowe Nazwa rejestru 8-bitowego, który zawiera osiem starszych lub inaczej górnych bitów rejestru 16-bitowego kończy się literą H, a nazwa rejestru zawierającego osiem młodszych (dolnych) bitów kończy się na L Pierwsza litera jest również pierwszą literą nazwy rejestru, który tworzą, np: AX AH i AL Oprócz ośmiu wymie- AX AH AL BX BH BL CX CH CL DX DH DL Rysunek 1: Rejestry 8-bitowe nionych rejestrów ogólnego przeznaczenia istnieje 6 innych, które mają ściśle określone role Każdy z nich jest rejestrem 16-bitowym Pierwszy z nich, to rejestr IP, który jest nazywany wskaźnikiem rozkazów, bowiem przechowuje offset adresu następnej instrukcji, jaką wykona procesor Programista nie może wpływać bezpośrednio na zawartość tego rejestru Jedynym sposobem zmiany jego zawartości jest wykonanie dowolnej instrukcji skoku Kolejnym rejestrem jest rejestr flag Stany poszczególnych bitów tego rejestru określają stan w jakim znajduje się procesor Szczegółowo objaśnia to rysunek nr 2 Umieszczone w nim skróty mają następujące znaczenie: CF znacznik przeniesienia (po wykonaniu operacji arytmetycznej nastąpiło przeniesienie jedynki na najstarszej pozycji jej wyniku), PF znacznik parzystości (wynik ostatniej operacji logicznej lub arytmetycznej zawiera parzystą liczbę jedynek), 3

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OF DFIF TF SF ZF AF PF CF Rysunek 2: Rejestr flag AF znacznik dodatkowego przeniesienia (jak CF, ale przeniesienie było na czwartym bicie), ZF znacznik zera (wynik ostatniej operacji arytmetycznej lub logicznej był zerem), SF znacznik znaku (określa, czy wynik ostatniej operacji arytmetycznej był dodatni, czy ujemny, TF znacznik pułapki (określa, czy procesor pracuje w trybie debugowania), IF znacznik przerwań (określa, czy włączone są przerwania), DF znacznik kierunku (określa kierunek operacji łańcuchowych), OF znacznik przepełnienia (wynik ostatniej operacji arytmetycznej nie mieści się w akumulatorze), Ostatnie cztery rejestry, to CS, DS, SS i ES Są one nazywane rejestrami segmentowymi Procesor 8086, jak większość innych procesorów realizuje przetwarzanie oparte o model opracowany przez Johna von Neumanna Oznacza to, że rozkaz lub dana może zostać umieszczona w dowolnej komórce pamięci operacyjnej Jednakże procesor musi wiedzieć, który obszar pamięci zawiera instrukcje do wykonania, a który dane, na których te instrukcje powinny zostać wykonane Rejestry segmentowe zawierają właśnie adresy początków tych obszarów 3 Rejestr CS zawiera adres początku obszaru zawierającego instrukcje do wykonania, DS adres początku obszaru pamięci przechowującego dane, SS adres początku obszaru pamięci w którym jest zorganizowany stos ES jest dodatkowym rejestrem segmentowym, który może wskazywać dowolny z wymienionych obszarów lub inny, np pusty obszar 3 Adresowanie pamięci Z punktu widzenia programisty komputerowego, najważniejszą cechą, jeśli chodzi o zestaw procesor-pamięć jest to, ile pamięci może procesor zaadresować Okazuje się jednak, że procesor 8086 narzuca również pewien 3 Nie jest to dokładne wytłumaczenie Bardziej precyzyjny opis znajduje się w następnym rozdziale 4

szczególny sposób jej adresowania, o którym osoba pisząca program musi wiedzieć Czynnikiem determinującym rozmiar pamięci, jaką może się posługiwać procesor, jest szerokość jego magistrali adresowej, czyli połączenia między nim a pamięcią W przypadku procesora 8086 ta szyna jest 20-bitowa Oznacza to, że omawiany procesor może zaadresować 2 20 = 1 MiB pamięci operacyjnej Dosyć często zachodzi konieczność wykonania jakiejś operacji na adresie, np zwiększenia go o jeden Aby móc to zrobić procesor musi gdzieś ten adres zapamiętać Najbardziej odpowiednim miejscem jest oczywiście któryś z rejestrów, ale one wszystkie są co najwyżej 16-bitowe Rozwiązanie problemu jest stosunkowo proste: procesor 8086 używa dwóch rejestrów do zapamiętania adresu w pamięci Starsze 16 bitów jest zapamiętywanych w jednym z rejestrów segmentowych, a młodsze 4 w np rejestrze BX lub DX Takie rozwiązanie dzieli pamięć fizyczną na obszary o wielkości 16 bajów każdy, tak jak to pokazuje rysunek 3 Te dwie części adresu będziemy nazywać odpowiednio: częścią segmentową 4 i offsetem lub inaczej przesunięciem 5 Aby wskazać więc konkretną komórkę 6 w pamięci, musimy podać część segmentową i offset jej adresu Obszar o wielkości 16 bajtów będziemy nazywać segmentem fizycznym lub paragrafem Zauważmy, że adres z liczby 20-bitowej stał się liczbą 32-bitową Adres 20-bitowy będziemy nazywać adresem fizycznym, a 32-bitowy adresem logicznym Przy takim rozszerzeniu adresu powstaje jednak pewien problem Otóż adres jest traktowany tak samo, jak każda inna dana, co oznacza, że nie ma żadnego wbudowanego w procesor mechanizmu, który wymusiłby na programiście przestrzeganie podziału adresu na 16 i 4 bity W praktyce oznacza to, że programista może użyć jako adresu dowolnej liczby 32- bitowej Taki adres jest oczywiście podzielony na dwie 16-bitowe części O ile rozmiar części segmentowej nie uległ zmianie, to rozmiar offsetu wzrósł o 12 bitów Oznacza to, że segmenty generowane przez adres logiczny mają wielkość 2 16 = 65536 B (64 KiB) Należy również zauważyć, że 32-bitowy adres pozwala zaadresować 2 32 = 4 GiB pamięci W jaki więc sposób pogodzić ze sobą te dwie wydawałoby się sprzeczne wizje pamięci? Rozwiązanie pokazuje rysunek 4 Segmenty logiczne nachodzą na siebie tak, że początek następnego segmentu znajduje się wewnątrz poprzedniego Każdy kolejny segment logiczny rozpoczyna się 16 bajtów dalej od początku poprzedzającego go segmentu Pozostaje do opisania kwestia przeliczania adresu logicznego na fizyczny 7 Otóż adres logiczny zapisywany jest najczęściej w postaci dwóch liczb 4 Dosyć często tę część adresu nazywa się segmentem, ale jak wkrótce się przekonamy, termin ten jest niejednoznaczny 5 Pełny termin brzmi przesunięcie względem początku segmentu Początek segmentu wyznacza oczywiście część segmentowa adresu 6 inaczej: konkretny bajt 7 Operacja odwrotna jest opisana wcześniej 5

1 MB Rysunek 3: Pamięć podzielona na segmenty fizyczne szesnastkowych rozdzielonych znakiem dwukropka, np: 7FFFh:023Ah 8 Żeby przeliczyć go na adres fizyczny wystarczy pomnożyć przez 16 wartość części segmentowej i do wyniku dodać wartość offsetu Nasz przykładowy adres logiczny będzie więc przeliczony następująco: 7F F F h 10h+023Ah = 7F F F 0h + 023Ah = 8022Ah Ze względu na opisany wyżej układ segmenty logiczne mają pewne obszary wspólne, co dobrze ilustruje rysunek numer 4 Przekształcenie adresu logicznego w fizyczny nie może więc być jednoznaczne, tzn niektóre adresy logiczne, które nawet optycznie wydają się 8 Gwoli przypomnienia - h oznacza, że mamy do czynienia z liczbą szesnastkową Jeśli część segmentowa adresu zapisana jest np w rejestrze DS, a offset w rejestrze DX, to adres można zapisać w postaci DS:DX 6

64 KB 64 KB 1 MB Rysunek 4: Podział pamięci fizycznej na logiczne segmenty różne, dają po przekształceniu ten sam adres fizyczny, np: 07C0h : 0001h = 07C01h, 0700h : 0C01h = 07C01h, 0780h : 0501h = 07C01h Aby uniknąć takiej sytuacji zaleca się stosowanie adresów kanonicznych, czyli takich w których część segmentowa jest dowolna, natomiast wykorzystywane są tylko 4 najmłodsze bity offsetu (pozostałe są zawsze równe zero) 9 9 Z podanych trzech adresów, adresem kanonicznym jest tylko pierwszy 7

4 Ważne elementy języka Pascal Ten rozdział nie jest poświęcony procesorowi 8086, ale ma za zadanie przedstawienie elementów języka (Turbo) Pascal, które pozwalają na współpracę z systemem MS-DOS i mogą być przydatne podczas realizacji zajęć Więcej informacji na temat tych elementów można uzyskać w pomocy środowiska Turbo Pascal, lub z książek wymienionych w bibliografii 1 absolute słowo kluczowe, które pozwala umieścić zadeklarowaną zmienną pod określonym adresem w pamięci, np: var i v : array [ 0 2 5 5 ] of p o i n t e r a b s o l u t e $0000 : $0000 ; 2 mem,memw,meml tablice skojarzone z pamięcią komputera, które pozwalają odczytać odpowiednio: bajt, słowo i podwójne słowo z określonego adresu pamięci, np: var x : byte ; begin x:=mem[ $0000 : $0000 ] ; end 3 ptr funkcja pozwalająca utworzyć wskaźnik do miejsca w pamięci komputera na podstawie części segmentowej i offsetu, np: var x : p o i n t e r ; begin x:= ptr ( $0000, $0000 ) ; end 4 seg, ofs funkcje, które zwracają część segmentową i offset adresu zmiennej, przekazanej im jako parametr wywołania, var x : byte ; s, o : word ; begin s := seg ( x ) ; o:= o f s ( x ) ; end 5 port,portw tablice, które pozwalają odczytywać zawartość wybranych portów komputera var x : byte ; 8

begin x:= port [ $60 ] ; end Literatura [1] Gary Syck, Turbo Assembler - Biblia użytkownika, LP&T, Warszawa 1994 [2] Leonid Bułhak, Ryszard Goczyński, Michał Tuszyński, DOS 5 od środka, HELP, Warszawa 1997 9