Asembler wykład 02-10-2000, Maciej Kostyra



ASEMBLERY

  1. Wstęp do programowania - podstawowe pojęcia

  2. Przechowywanie informacji

  3. Funkcje procesora centralnego

  4. 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 :

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 0x01 graphic

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:

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.

0x08 graphic

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:

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.

Architektura mikroprocesora 8088

Na pojęcie architektury mikroprocesora składają się:

0x01 graphic

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



Wyszukiwarka