Wstęp do informatyki - Katedra Informatyki > Home

Transkrypt

Wstęp do informatyki - Katedra Informatyki > Home
Program
Komputer jest urządzeniem, którego działanie opiera się na wykonywaniu przez
procesor instrukcji pobieranych z pamięci operacyjnej (instrukcje procesora – kod
programu)
Instrukcje procesora odnoszą się do prostych operacji na wewnętrznych rejestrach
procesora oraz operacji odczytu/zapisu komórek pamięci operacyjnej i układów we/wy
Wstęp do informatyki
Interakcja między maszyną i komputerem odbywa się za pośrednictwem układów
we/wy i opiera się na konwersji danych zrozumiałych dla człowieka na dane
zakodowane w formie cyfrowej (i odwrotnie).
Programowanie komputera - asembler
CPU
ROM, RAM
ALU
Cezary Bolek
[email protected]
Uniwersytet Łódzki
Rejestry
procesora
We/Wy
Wydział Zarządzania
Katedra Informatyki
Wstęp do informatyki
Język wysokiego poziomu
(C, Pascal, Java, etc.)
Kompilacja
(kompilator)
...
for (i=1; i<10, i++) {
n=10+x*2;
}
...
Program w języku asemblera składa się z linii zawierających
instrukcję do wykonania przez procesor.
Cechy
Instrukcje asemblera są bardzo prostymi operacjami, na liczbach
zapisanych w rejestrach roboczych lub komórkach pamięci za
pomocą ALU.
Instrukcje języka wysokiego
poziomu, zmienne, operatory
arytmetyczne, swobodny układ
tekstu programu, etc..
Linia programu w języku asemblera składa się z pól:
...
Język niskiego poziomu:
asembler
np.
MOV AL,FF
wait: SUB AL,1
JNS wait
...
Instrukcje asemblera: mnemoniki,
nazwy rejestrów, adresy komórek
pamięci, etykiety linii, sztywny układ
tekstu programu
...
F5
58
03
...
Bajty zapisane w pliku lub w pamięci
komputera, które odpowiadają kolejnym
instrukcjom dla procesora
Wstęp do informatyki
wait: MOV AL,BL
etykieta
mnemonik
(pole moŜe
(instrukcja)
być puste)
Asemblacja
(asembler)
Kod maszynowy
2
Asembler
Języki programowania
Przykład
Cezary Bolek <[email protected]>
; załaduj do AL wartość z BL
operandy
mnemonika
komentarz
Mnemoniki są łatwymi do zapamiętania skrótami operacji procesora.
Wszystkie liczby w programie są liczbami szesnastkowymi !
Cezary Bolek <[email protected]>
3
Wstęp do informatyki
Cezary Bolek <[email protected]>
4
1
Instrukcja przesłań
Postać programu w pamięci
0
instr_1
instr_2
...
instr_k-1
instr_k
END
n
Instrukcje programu
umieszczone są w pamięci
i mogą zajmować róŜną
liczbę bajtów.
Operacje przesyłania wartości
MOV
Program (w symulatorze)
uruchamiany jest zawsze
od instrukcji umieszczonej
pod adresem 0
X,Y
mov AL,13
mov DL,A5
wartość lub
miejsce źródłowe
(co lub skąd)
miejsce
przeznaczenia
(dokąd)
Program musi kończyć się
dyrektywą END. Wszystkie
instrukcje umieszczone po tej
dyrektywie są ignorowane
; move
Instrukcja przesłania MOV nie wpływa na bity rejestru SR
Wstęp do informatyki
Cezary Bolek <[email protected]>
5
Wstęp do informatyki
Cezary Bolek <[email protected]>
Instrukcje arytmetyczne
6
Instrukcje logiczne
Operacje logiczne (AND, OR, XOR)
Operacje arytmetyczne (ADD, SUB, MUL, DIV)
ADD
AND
1 operand
i miejsce
umieszczenia
wyniku
2 operand
(wartość lub
miejsce)
1 operand
i miejsce
umieszczenia
wyniku
add AL,BL
mul DL,04
A B AND
0
00
0
01
0
10
1
11
Operacje inkrementacji (zwiększenia o 1) rejestru
INC
X,Y
or AL,BL
xor DL,04
X,Y
X
;X←X+1
inc BL
2 operand
(wartość lub
miejsce)
XOR
0
1
1
0
OR
0
1
1
1
A
B
AND
OR
XOR
= 01001011
= 11011101
= 01001001
= 11011111
= 10010110
Operacje dekrementacji (zmniejszenia o 1) rejestru
DEC
X
;X←X-1
Logical negation operation (bit negation)
dec DL
NOT
Wstęp do informatyki
Cezary Bolek <[email protected]>
7
Wstęp do informatyki
X
not AL
A
NOT
= 01010101
= 10101010
Cezary Bolek <[email protected]>
8
2
Instrukcje przesunięć
Instrukcje rotacji
Operacje przesunięć bitowych
w prawo (SHR) i w lewo (SHL)
SHR
SHL
X
X
Operacje przesunięć rotacyjnych
w prawo (ROR) i w lewo (ROL)
shr BL
shl DL
;shift right
;shift left
0
SHL
0
SHR
Wstęp do informatyki
A
SHL
= 00001111
= 00011110
A
SHL
= 11110000
= 11100000
A
SHR
= 00001111
= 00000111
A
SHR
= 11110000
= 01111000
Cezary Bolek <[email protected]>
ROR
ROL
ROR
9
Wstęp do informatyki
S
O
Z
MOV
1 – gdy instrukcja arytmetyczna zakończyła się błędem
(w sensie arytmetyki U2)
0 – gdy instrukcja arytmetyczna powiodła się
1 – gdy procesor moŜe przyjąć przerwanie
0 – gdy procesor nie przyjmuje przerwań
BL,A
AL,BL
Cezary Bolek <[email protected]>
A
ROR
= 00001111
= 10000111
A
ROR
= 11110000
= 01111000
10
I S O Z
SR = 0 0 0 0 0 0 0 0
I S O Z
SR = 0 0 0 0 0 0 0 0
; Dodaj BL do AL, wynik będzie w AL
AL = 0 0 0 0 1 1 0 0
BL = 0 0 0 0 1 0 1 0
Wstęp do informatyki
= 11110000
= 11100001
; Zapisz liczbę 10 do rejestru BL
BL = 0 0 0 0 1 0 1 0
ADD
bit I (interrupt)
A
ROL
; Zapisz liczbę 2 do rejestru AL
AL = 0 0 0 0 0 0 1 0
bit O (overflow):
1 – gdy instrukcja dała wynik ujemny (w kodzie U2)
0 – gdy instrukcja dała wynik nieujemny
AL,2
BL = 0 0 0 0 0 0 0 0
1 – gdy instrukcja dała wynik 0
0 – gdy wynik instrukcji jest róŜny od zera
bit S (sign):
= 00001111
= 00011110
Cezary Bolek <[email protected]>
AL = 0 0 0 0 0 0 1 0
Bity rejestru SR ustawiane są zgodnie z wynikiem ostatnio wykonanej
instrukcji arytmetycznej, logicznej lub przesunięć:
bit Z (zero):
A
ROL
Przykład 1
MOV
I
ror BL
rol DL
; rotate right
; rotate left
ROL
Rejestr SR i instrukcje arytmetyczne
SR
X
X
I S O Z
SR = 0 0 0 0 0 0 0 0
Wynikiem instrukcji ADD jest liczba Ch (12d) w rejestrze AL.
Wynik jest niezerowy (Z=0), poprawny (O=0), nieujemny (S=0)
11
Wstęp do informatyki
Cezary Bolek <[email protected]>
12
3
Przykład 2
MOV
CL,F
Przykład 3
; Zapisz liczbę 15 do rejestru CL
CL = 0 0 0 0 1 1 1 1
DL = 0 0 0 0 0 0 0 0
I SO Z
SR = 0 0 0 0 0 0 0 0
MOV
AL,0
; wyzeruj rejestr AL
AL = 0 0 0 0 0 0 0 0
MOV
DL,F
; Zapisz liczbę 15 do rejestru DL
CL = 0 0 0 0 1 1 1 1
DL = 0 0 0 0 1 1 1 1
MUL
DL,CL
I S O Z
SR = 0 0 0 0 0 0 0 0
DEC
I SO Z
SR = 0 0 0 0 0 0 0 0
DL = 1 1 1 0 0 0 0 1
; zmniejsz wartość AL o 1
AL = 1 1 1 1 1 1 1 1
; PomnóŜ CL i DL, wynik będzie w DL
CL = 0 0 0 0 1 1 1 1
AL
I S O Z
SR = 0 0 0 0 1 0 0 0
Wynikiem instrukcji DEC jest liczba –1(U2) w rejestrze AL.
Wynik jest niezerowy (Z=0), poprawny (O=0), ujemny (S=1)
I SO Z
SR = 0 0 0 0 1 1 0 0
Wynikiem instrukcji MUL jest liczba –31(U2) w rejestrze DL.
Wynik jest niezerowy (Z=0), niepoprawny (O=1), ujemny (S=1)
Wstęp do informatyki
Cezary Bolek <[email protected]>
13
Wstęp do informatyki
Cezary Bolek <[email protected]>
Przykład 4
MOV
AL,FF
INC
AL
Przykład 5
MOV
; zapisz –1(U2) do rejestru AL
AL = 1 1 1 1 1 1 1 1
SUB
Cezary Bolek <[email protected]>
; Zapisz liczbę –128(U2) do rejestru AL
AL,2
I SO Z
SR = 0 0 0 0 0 0 0 0
; Odejmij 2 od AL, wynik będzie w AL
AL = 0 1 1 1 1 1 1 0
I SO Z
SR = 0 0 0 0 0 0 1 0
Wynikiem instrukcji INC jest liczba 0 w rejestrze AL.
Wynik jest zerowy (Z=1), poprawny (O=0), nieujemny (S=0)
Wstęp do informatyki
AL,80
AL = 1 0 0 0 0 0 0 0
I SO Z
SR = 0 0 0 0 0 0 0 0
; zwiększ wartość AL o 1
AL = 0 0 0 0 0 0 0 0
14
I S O Z
SR = 0 0 0 0 0 1 0 0
Wynikiem instrukcji SUB jest liczba 126(U2) w rejestrze AL.
Wynik jest niezerowy (Z=0), niepoprawny (O=1), nieujemny (S=0)
15
Wstęp do informatyki
Cezary Bolek <[email protected]>
16
4
Rejestr SR i instrukcje przesunięć
Rejestr SR i instrukcje logiczne
Operacje logiczne na bitach rejestrów nie mają sensu arytmetycznego,
dlatego bit O (overflow) nie jest zmieniany.
Operacje przesunięć na bitach rejestrów nie mają sensu arytmetycznego,
dlatego bit O (overflow) nie jest zmieniany.
Bity S i Z są ustawiane tak samo jak dla instrukcji arytmetycznych.
Bity S i Z są ustawiane tak samo jak dla instrukcji arytmetycznych.
MOV
AL,7F
; Zapisz liczbę 127 do rejestru AL
AL = 0 1 1 1 1 1 1 1
80 = 1 0 0 0 0 0 0 0
OR
AL,80
MOV
I SO Z
SR = 0 0 0 0 0 0 0 0
SHL
I SO Z
SR = 0 0 0 0 1 0 0 0
Wstęp do informatyki
Cezary Bolek <[email protected]>
17
Wstęp do informatyki
minus:
stop:
np.
AL,5
stop
AL,5
BL,FF
loop:
minus:
...
MOV
OUT
JMP
...
AL,55
1
loop
Cezary Bolek <[email protected]>
18
Cezary Bolek <[email protected]>
JZ
JNZ
next
next
; skocz jeśli Z=1 (ostatnia instrukcja dała wynik 0)
; skocz jeśli Z=0 (skocz jeśli wynik jest niezerowy)
JS
JNS
next
next
; skocz jeśli S=1 (skocz jeśli wynik ujemny)
; skocz jeśli S=0 (skocz jeśli wynik nieujemny)
JO
JNO
next
next
; skocz jeśli O=1 (skocz jeśli wynik niepoprawny)
; skocz jeśli O=0 (skocz jeśli wynik poprawny)
Instrukcje skoków warunkowych stosuje się najczęściej do
realizacji cykli w programach
nieskończona pętla
Wstęp do informatyki
I SO Z
SR = 0 0 0 0 0 0 1 0
Instrukcja testuje wartość odpowiedniego bitu SR i wykonuje się
(wykonuje skok do podanej etykiety) jeśli warunek określony
mnemonikiem instrukcji jest spełniony, w przeciwnym wypadku skok się
nie wykonuje.
Instrukcja JMP nie zmienia bitów rejestru SR
plus:
; Przesuń bity AL o jedną pozycję w lewo
Instrukcje skoków warunkowych nie zmieniają bitów rejestru SR, ale ich
wykonanie zaleŜy od stanu poszczególnych bitów SR !!!
instrukcja skoku bezwarunkowego
do instrukcji o etykiecie next:
...
ADD
JMP
SUB
MOVE
...
I SO Z
SR = 0 0 0 0 0 0 0 0
Instrukcje skoków warunkowych
next
np.
AL
AL = 0 0 0 0 0 0 0 0
Instrukcje skoku bezwarunkowego
JMP
; Zapisz liczbę –128(U2) do rejestru AL
AL = 1 0 0 0 0 0 0 0
; Przeprowadź operację OR na bitach AL i liczby 80h
AL = 1 1 1 1 1 1 1 1
AL,80
19
Wstęp do informatyki
Cezary Bolek <[email protected]>
20
5
Przykład
...
MOV
DEC
JNZ
...
loop:
Instrukcje porównań
AL←
←7F
AL,7F
AL
loop
error:
CMP
AL←
← AL-1
cykl wykona się
dokładnie 127 razy
(np. pętla opóźniająca)
...
MUL
JO
...
...
...
Operacje porównań
N
X,Y
1 operand
Z=1
cmp AL,77
cmp AL,BL
; compare
2 operand
T
AL,BL
error
ok:
error:
...
MUL
JNO
JMP
...
...
...
Instrukcja porównania CMP wykonuje odejmowanie operandów (X-Y),
a następnie ustawia bity rejestru SR zgodnie z wynikiem operacji.
Wynik operacji nie jest zapisywany.
AL,BL
ok
error
Instrukcja CMP słuŜy do wykrywania konkretnej wartości w rejestrze
CMP wpływa tylko na bity S (znak) i Z (zero), a więc pozwala stwierdzić
a) czy X<Y (bit S=1)
b) czy X=Y (Z=1)
wykrywanie i obsługa błędów podczas operacji arytmetycznych
Wstęp do informatyki
Cezary Bolek <[email protected]>
21
Przykład
loop:
nowy
cyfra
...
IN
CMP
JNZ
...
...
IN
CMP
JS
CMP
JNS
...
07
AL,0D
loop
Wstęp do informatyki
Cezary Bolek <[email protected]>
Instrukcje dostępu do portów
Dotyczy tylko programu
symulatora uŜywanego
w laboratorium
cykl oczekiwania
na odczyt wartości 13
z portu 7 (np. znak
Enter z klawiatury)
ROM, RAM
CPU
0
07
AL,30
nowy
AL,40
nowy
; czytaj kod ASCII znaku z klawiatury
; sprawdź czy kod jest >= ‘0’
; znak nie jest cyfrą, czytaj nowy znak
; sprawdź czy kod jest < ‘9’
; znak nie jest cyfrą, czytaj nowy znak
fragment programu wczytującego z klawiatury znaki cyfr,
ignorujący inne wprowadzone znaki
sygnalizator świetlny
1
wyświetlać cyfrowy
2
termostat (grzejnik)
3
ruch robota
4
Cezary Bolek <[email protected]>
termostat (temperatura)
silnik krokowy
5
6
winda (odczyt klawiatury i połoŜenia)
klawiatura alfanumeryczna
7
klawiatura alfanumeryczna (odczyt)
8
klawiatura numeryczna
23
klawiatura
winda (sterowanie napędem)
Out
Wstęp do informatyki
22
Wstęp do informatyki
numer
portu
klawiatura numeryczna (odczyt)
In
Cezary Bolek <[email protected]>
24
6
Instrukcje dostępu do portów
IN
numer
instrukcja odczytu wartości z portu o podanym numerze,
wartość jest umieszczana w rejestrze AL
OUT
numer
instrukcja wysłania wartości do portu o podanym numerze,
wartość musi być wcześniej umieszczona w rejestrze AL
MOV
OUT
AL,55
01
zapalenie kombinacji świateł na
sygnalizatorze ulicznym (port 01)
Wstęp do informatyki
IN
CMP
JZ
0
AL,1B
end
wczytanie znaku z klawiatury
i jeśli był to znak Escape, to
skok do zakończenia programu
Cezary Bolek <[email protected]>
25
7