ASEMBLERY
Wstęp do programowania - podstawowe pojęcia
Przechowywanie informacji
Funkcje procesora centralnego
Wstęp do języka asembler
WSTĘP do programowania - podstawowe pojęcia
Program komputerowy napisany z użyciem instrukcji maszynowych może być wykonywany bezpośrednio przez odpowiedni procesor centralny.
Program taki jest na ogół wykonywany wielokrotnie szybciej niż program wysokiego poziomu (np. C, C++).
Mikrokomputer można logicznie podzielić na cztery części :
Procesor centralny - realizuje kolejne instrukcje programu
Systemowe składniki elektroniczne ( hardware ) - zapewniają przepływ danych z i do procesora.
Pamięć operacyjna - pamięć współdziałająca bezpośrednio z procesorem (przechowywanie danych
urządzenia wejścia-wyjścia
W organizacji przechowywania i przetwarzania danych posługujemy się następującymi strukturami: 0 lub 1. Informacja tak zapisana zawiera ilość informacji równą jednemu bitowi.
BIT - ilość informacji o charakterze „tak” lub „nie” gdy obie odpowiedzi są jednakowo prawdopodobne.
Gdy odpowiedzi „tak” przypiszemy 1, a odpowiedzi „nie” - 0, to każda z nich niesie ze sobą jedną jednostkę informacji.
ilość informacji
gdzie p oznacza prawdopodobieństwo pojawienia się tej informacji
BAJT to 8 bitów zestawionych w sekwencji.
Bajt zawierający 8 zer (00000000) ma wartość 0 w systemie dziesiętnym.
Bajt zawierający 8 jedynek (11111111) wartość 255 w systemie dziesiętnym.
Dwa bajty zestawione w sekwencji tworzą SŁOWO złożone z 16 bitów, przy czym pierwszy bajt w sekwencji (od lewej) nazywamy bajtem starszym, a drugi bajtem młodszym.
Słowo złożone z szesnastu symboli 1 reprezentuje wartość 65535 w systemie dziesiętnym. Natomiast 16 symboli 0 reprezentuje wartość 0 w systemie dziesiętnym.
Słowo można też podzielić na 4 części i używać zapisu systemu szesnastkowego.
SYSTEM SZESNASTKOWY - (heksadecymalny) - do zapisu używa się cyfr (od 0 do 9) i pierwszych sześciu liter alfabetu (od a do f), gdzie a ma wartość 10, a f ma wartość 15.
Jeżeli 16-bitowa liczba rozpoczyna się jedną z cyfr od a do f, to zawsze poprzedzamy ją cyfrą 0. Jest to konieczne dla rozróżnienia z nazwami, które rozpoczynają się od liter.
Cyfra szesnastkowa będąca połówką bajtu określa się mianem „NIBBLE” (kąsek).
PRZECHOWYWANIE INFORMACJI
Pamięć składa się z jednobajtowych komórek ponumerowanych od 0 z krokiem 1.
Numer komórki to adres komórki. Liczba komórek jest często wyrażana wielokrotnością liczby 1024.
Symbol K reprezentuje wartość 1024 lub 400 w zapisie szesnastkowym.
Do bajtu danych przechowywanych w pamięci odwołujemy się poprzez adres tego bajtu.
Aby zachować słowo szesnastkowe używamy dwóch kolejnych komórek pamięci. Dwa bajty tworzące słowo zapisujemy tak: młodszy bajt, pod niższym adresem, a starszy pod wyższym.
FUNKCJE PROCESORA CENTRALNEGO:
wykonywanie ciągu instrukcji umieszczonych w pamięci operacyjnej - wykonanie tego ciągu instrukcji poprzedza podanie tzw. adresu startowego
każdy bajt danych interpretowany jest jako funkcja, którą procesor ma wykonać
dodatkowe bajty zawierają specyficzne dane wykorzystywane przy realizacji danej funkcji nazywamy OPERANDAMI
po wykonaniu danej funkcji procesor przechodzi do wykonania kolejnego bajtu z kodem operacji i wykonuje funkcję dla niego określoną
Programowanie komputera polega na podaniu sekwencji bajtów reprezentujących rządane funkcje.
WSTĘP DO JĘZYKA ASEMBLER
Każda instrukcja jest prezentowana w komputerze przez odpowiedni wzorzec bitowy. Gdy programujemy sekwencję tych instrukcji nie jesteśmy zmuszeni do zapamiętywania tych wzorców bitowych, zamiast nich używamy tzw. „mnemoników”, dla przedstawienia każdej z tych funkcji, które procesor ma realizować.
Programista pisze sekwencję dyrektyw dla języka symbolicznego, natomiast ASEMBLER dokonuje translacji napisanego programu (symbolicznego) na odpowiednie wzorce bitowe, rozpoznawane przez procesor.
Przykład prostego programu w asemblerze:
cel: dodanie dwóch liczb 10 i 25, które znajdują się w pamięci, a następnie odjęcie liczby 8 od uzyskanej sumy i umieszczenie wyniku w innym miejscu pamięci operacyjnej.
1. DATA SEGMENT
2. INPUT1 DW 10
3. INPUT2 DW 25
4. INPUT3 DW 8
5. WYNIK DW ?
6. DATA ENDS
7. CODE SEGMENT
8. MOV AX, INPUT1 ;pobranie
9. MOV BX, INPUT2 ;pobranie
10. ADD AX, BX ;dodanie
11. MOV BX, INPUT3 ;pobranie
12. SUB AX, BX ;odjęcie
13. MOV WYNIK, AX ;zapamiętanie
14. CODE ENDS
Numery (od 1 do 14) na początku każdej linii umieszczone są tylko w celu informacyjnym i nie występują w programie.
Opis programu:
Linia 1 - informacja dla asemblera, że definiujemy wartości umieszczane w pamięci operacyjnej.
Linie 2, 3, 4 - przypisują wartości (10, 25, 8) odpowiednim etykietom (INPUT1, INPUT2, INPUT3).
Dyrektywa DW definiuje wartość etykiety wcześniej zapisanej.
Linia 5 - informuje procesor o tym, że etykieta WYNIK (później) przyjmie pewną wartość (w obecnej chwili jeszcze nie znaną - stąd znak zapytania po dyrektywie DW)
Linia 6 - informacja o zakończeniu definiowania wartości
Linia 7 - instrukcja mówiąca o tym, że poniżej znajduje się kod programu
Linia 8 - mnemonik MOV informuje asembler, że ma nastąpić przesłanie zawartości pamięci zdefiniowanej przez etykietę INPUT1 do rejestru AX
Linia 9 - mnemonik MOV informuje asembler, że ma nastąpić przesłanie zawartości pamięci zdefiniowanej przez etykietę INPUT2 do rejestru BX
Linia 10 - mnemonik ADD powoduje dodanie rejestrów AX i BX oraz umieszczenie wyniku w rejestrze napisanym jako pierwszy (w naszym programie jest to rejestr AX)
Linia 11 - mnemonik MOV informuje asembler, że ma nastąpić przesłanie zawartości pamięci zdefiniowanej przez etykietę INPUT3 do rejestru BX
Linia 12 - mnemonik SUB powoduje odjęcie wartości rejestru BX od wartości rejestru AX. Wynik, tak jak przy mnemoniku ADD, umieszczany jest w rejestrze napisanym jako pierwszy (w naszym programie jest to rejestr AX).
Linia 13 - mnemonik MOV informuje asembler, że ma nastąpić przesłanie zawartości rejestru AX pod etykietę WYNIK.
Linia 14 - informuje asembler, że w tym miejscu kod programu się kończy.
Każda instrukcja napisana w asemblerze może zostać podzielona na cztery oddzielne pola:
pole etykiety - jeśli występuje - jest zawsze na początku
pole kodu operacji - gdy nie poprzedza je etykieta, musi poprzedzać je jeden lub więcej znaków spacji. Pole to określa funkcję, którą ma wykonać asembler.
pole operandów - następuje po polu kodu operacji jeżeli jest potrzebne. Jest ono wykorzystywane do precyzyjnego określania funkcji, która ma być wykonywana, np.:
operand 10 w linii drugiej naszego programu informuje asembler jaką wartość ma umieścić w słowie (etykiecie) aktualnie definiowanym.
Większą ilość operandów rozdzielamy przecinkiem (linie 8 - 13). Identyfikujemy jeden z nich jako źródło, a drugi jako przeznaczenie danej funkcji . Operand „przeznaczenie” musi występować przed operandem źródło.
Pole komentarza - występuje opcjonalnie po polu operandów, poprzedzone znakiem średnika ( ; ).
Architektura mikroprocesora 8088
Na pojęcie architektury mikroprocesora składają się:
sposób adresowania pamięci
zestaw realizowanych instrukcji
omówienie wewnętrznych składników mikroprocesora
Rys. Schemat budowy mikrokomputera
Przesyłanie danych pomiędzy CPU, a pamięcią operacyjną następuje poprzez interfejs pamięci. Dane rozpoznawane jako instrukcje umieszczane są w kolejce instrukcji. System sterujący wykonaniem instrukcji pobiera je z kolejki instrukcji i przesyła je do jednostki wykonawczej, gdzie są interpretowane i wykonywane. Z jednostką wykonawczą współpracuje jednostka logiczna. Jednostka ta realizuje operacje arytmetyczne i operacje porównania. Ponadto jednostka logiczna ustawia flagi sygnalizujące stan. Na przykład flaga SF jest ustawiona dla oznaczenia ujemnego wyniku operacji arytmetycznej.
Asemblery - wykład I
8