Język asemblera
Język asemblera
Copyright, 2001 © Jerzy R. Nawrocki
Jerzy.Nawrocki@put.poznan.pl
http://www.cs.put.poznan.pl/~nawrocki/ic
s/
Wprowadzenie do
informatyki
Wykład 5
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Koncepcja von Neumanna
Koncepcja von Neumanna
Specjalizowane kalkulatory (obliczanie
toru pocisku) a uniwersalne komputery
Jak zrealizować uniwersalność:
• program jako łącznice kablowe
• program jako dane przechowywane w
pamięci (koncepcja von Neumanna)
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Koncepcja von Neumanna
Koncepcja von Neumanna
Dwie fazy:
1.
Ściąganie
rozkazu i jego
dekodowanie
2.
Wykonanie
rozkazu
Specjalny rejestr (
licznik rozkazów
)
pokazuje następny rozkaz do
wykonania.
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Kodowanie rozkazów
Kodowanie rozkazów
Kod Rozkaz Przykład
1
MovRegCon(
R
, C)
1
1
0
R1
0
2
IfRegLeCon(
R
, C, I)
2
2
1 20
R2
1 ..
3
MulRegReg(
Rd
, Rs)
3
1
2
R1
R1
*R2
4
SubRegCon(
Rd
, C)
4
2
1
R2
R2
-
1
5
Jump(I)
5
14
6
Stop
6
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Obliczanie n!
Obliczanie n!
Start
Start
Stop
Stop
R1
R1
1
1
R1
R1
R1 *
R1 *
R2
R2
R2
R2
R2 - 1
R2 - 1
R2 >
R2 >
1
1
Tak
Nie
Warunek
pocz.:
R2 = n
Warunek
końc.:
R1 = n!
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Kodowanie rozkazów
Kodowanie rozkazów
1
1
1
1
1
1
MovRegCon
R1
1
10
2
2
2
2
1
1
13
25
25
IfRegLeCon
3
3
17
MulRegReg
1
1
2
2
4
4
2
2
1
1
20
SubRegCon
5
5
13
13
6
6
23
Jump
25
Stop
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Kodowanie rozkazów
Kodowanie rozkazów
1
1
1
1
1
1
MovRegCon
R1
1
10
2
2
2
2
1
1
13
25
25
IfRegLeCon
3
3
17
MulRegReg
1
1
2
2
4
4
2
2
1
1
20
SubRegCon
5
5
13
13
6
6
23
Jump
25
Stop
R2
R2
R1
R1
3
3
10
10
IC
IC
We
Wyj
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Kodowanie rozkazów
Kodowanie rozkazów
1
1
1
MovRegCon
R1
1
10
2
2
1
1
13
25
25
IfRegLeCon
3
3
17
MulRegReg
1
1
2
2
4
4
2
2
1
1
20
SubRegCon
5
5
13
13
6
6
23
Jump
25
Stop
R2
R2
R1
R1
3
3
13
13
IC
IC
1
1
We
Wyj
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Kodowanie rozkazów
Kodowanie rozkazów
1
1
1
1
1
1
MovRegCon
R1
1
10
2
2
2
2
1
1
13
25
25
IfRegLeCon
3
3
17
MulRegReg
1
1
2
2
4
4
2
2
1
1
20
SubRegCon
5
5
13
13
6
6
23
Jump
25
Stop
R2
R2
R1
R1
3
3
17
17
IC
IC
1
1
We
Wyj
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Kodowanie rozkazów
Kodowanie rozkazów
1
1
1
1
1
1
MovRegCon
R1
1
10
2
2
2
2
1
1
13
25
25
IfRegLeCon
3
3
17
MulRegReg
1
1
2
2
4
4
2
2
1
1
20
SubRegCon
5
5
13
13
6
6
23
Jump
25
Stop
R2
R2
R1
R1
3
3
20
20
IC
IC
1
1
3
3
We
Wyj
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Kodowanie rozkazów
Kodowanie rozkazów
1
1
1
1
1
1
MovRegCon
R1
1
10
2
2
2
2
1
1
13
25
25
IfRegLeCon
3
3
17
MulRegReg
1
1
2
2
4
4
2
2
1
1
20
SubRegCon
5
5
13
13
6
6
23
Jump
25
Stop
R2
R2
R1
R1
3
3
23
23
IC
IC
1
1
3
3
2
2
We
Wyj
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Kodowanie rozkazów
Kodowanie rozkazów
1
1
1
1
1
1
MovRegCon
R1
1
10
2
2
2
2
1
1
13
25
25
IfRegLeCon
3
3
17
MulRegReg
1
1
2
2
4
4
2
2
1
1
20
SubRegCon
5
5
13
13
6
6
23
Jump
25
Stop
R2
R2
R1
R1
3
3
13
13
IC
IC
1
1
3
3
2
2
We
Wyj
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Kodowanie rozkazów
Kodowanie rozkazów
1
1
1
1
1
1
MovRegCon
R1
1
10
2
2
2
2
1
1
13
25
25
IfRegLeCon
3
3
17
MulRegReg
1
1
2
2
4
4
2
2
1
1
20
SubRegCon
5
5
13
13
6
6
23
Jump
25
Stop
R2
R2
R1
R1
3
3
17
17
IC
IC
1
1
3
3
2
2
We
Wyj
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Kodowanie rozkazów
Kodowanie rozkazów
1
1
1
1
1
1
MovRegCon
R1
1
10
2
2
2
2
1
1
13
25
25
IfRegLeCon
3
3
17
MulRegReg
1
1
2
2
4
4
2
2
1
1
20
SubRegCon
5
5
13
13
6
6
23
Jump
25
Stop
R2
R2
R1
R1
3
3
20
20
IC
IC
1
1
3
3
2
2
6
6
We
Wyj
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Kodowanie rozkazów
Kodowanie rozkazów
1
1
1
1
1
1
MovRegCon
R1
1
10
2
2
2
2
1
1
13
25
25
IfRegLeCon
3
3
17
MulRegReg
1
1
2
2
4
4
2
2
1
1
20
SubRegCon
5
5
13
13
6
6
23
Jump
25
Stop
R2
R2
R1
R1
3
3
23
23
IC
IC
1
1
3
3
2
2
6
6
1
1
We
Wyj
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Kodowanie rozkazów
Kodowanie rozkazów
1
1
1
1
1
1
MovRegCon
R1
1
10
2
2
2
2
1
1
13
25
25
IfRegLeCon
3
3
17
MulRegReg
1
1
2
2
4
4
2
2
1
1
20
SubRegCon
5
5
13
13
6
6
23
Jump
25
Stop
R2
R2
R1
R1
3
3
13
13
IC
IC
1
1
3
3
2
2
6
6
1
1
We
Wyj
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Kodowanie rozkazów
Kodowanie rozkazów
1
1
1
1
1
1
MovRegCon
R1
1
10
2
2
2
2
1
1
13
25
25
IfRegLeCon
3
3
17
MulRegReg
1
1
2
2
4
4
2
2
1
1
20
SubRegCon
5
5
13
13
6
6
23
Jump
25
Stop
R2
R2
R1
R1
3
3
13
13
IC
IC
1
1
3
3
2
2
6
6
1
1
We
Wyj
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Plan wykładu
Plan wykładu
• Prosty program
• DEBUG
• Arytmetyka
heksadecymalna
• Liczby ujemne
• Najważniejsze rozkazy
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Prosty program
Prosty program
Rejestry
var
ax, bx, cx, dx, si, di:
integer;
var
ax, bx, cx, dx, si, di:
integer;
AX
3
BX
0
CX
7
DX
1
SI
8
DI
2
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Prosty program
Prosty program
Instrukcja
p := p + z
p := p + z
ADD
p
,
z
ax := ax + bx +
2
add ax, bx
add ax, 2
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Prosty program
Prosty program
Struktura programu
Program: zbiór (oddzielnie kompilowanych)
modułów
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Prosty program
Prosty program
Struktura programu
Program: zbiór (oddzielnie kompilowanych)
modułów
Erro
r
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Prosty program
Prosty program
Struktura programu
Program: zbiór (oddzielnie kompilowanych)
modułów
m1.as
m
m
a
s
m
m1.obj
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Prosty program
Prosty program
Struktura programu
Program: zbiór (oddzielnie kompilowanych)
modułów
m
a
s
m
m1.as
m
m
a
s
m
m1.obj
m2.as
m
m2.obj
L
i
n
k
p.exe
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Prosty program
Prosty program
Struktura programu
Program: zbiór (oddzielnie kompilowanych)
modułów
Moduł: zbiór
segmentów
Pamięć
0
6
5
5
3
5
Intel
8080
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Prosty program
Prosty program
Struktura programu
Program: zbiór (oddzielnie kompilowanych)
modułów
Moduł: zbiór
segmentów
Kod
Dane
Stos
Dodatk
Intel
8086
0
1
0
4
8
5
7
5
0
6
5
5
3
5
c
s
d
s
s
s
e
s
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Prosty program
Prosty program
Struktura programu
nazwa_seg
SEGMENT
ASSUME CS:
nazwa_seg
etyk_pocz
:
instrukcje
nazwa_seg
ENDS
END
etyk_pocz
Program: zbiór (oddzielnie kompilowanych)
modułów
Moduł: zbiór segmentów
Koniec
modułu
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Prosty program
Prosty program
Przykład programu
prog
SEGMENT
ASSUME CS:
prog
start
:
add ax, bx
add ax, cx
int 3
prog
ENDS
END
start
ax := ax + bx + cx
Koniec
pracy
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Prosty program
Prosty program
Kompilacja i uruchomienie
Zapisz program w pliku
plik
.asm
masm
plik
link
plik
debug
plik
.exe
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Plan wykładu
Plan wykładu
• Prosty program
• DEBUG
• Arytmetyka
heksadecymalna
• Liczby ujemne
• Najważniejsze rozkazy
J.Nawrocki, Wprowadzenie ..,
Wykład 5
DEBUG
DEBUG
Najważniejsze komendy
R
rejestr
(Register)
G
(Go)
Q
(Quit)
J.Nawrocki, Wprowadzenie ..,
Wykład 5
DEBUG - przykład sesji
DEBUG - przykład sesji
Wynik
-
rax
AX
0000
1
-
rbx
BX
0000
2
-
rcx
CX
0005
3
:
:
:
-
g
AX=0006 BX=0002 CX=0003 DX=0000 SP=0000
DS=1A8D ES=1A8D SS=1A9D CS=1A9D IP=0004
1A9D:0004 CC INT 3
-
q
J.Nawrocki, Wprowadzenie ..,
Wykład 5
DEBUG - inna sesja
DEBUG - inna sesja
-
rax
AX
0000
6
-
rbx
BX
0000
6
-
rcx
CX
0005
6
:
:
:
-
g
AX=0012 BX=0002 CX=0003 DX=0000 SP=0000
DS=1A8D ES=1A8D SS=1A9D CS=1A9D IP=0004
1A9D:0004 CC INT 3
-
q
12 czy 18?
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Plan wykładu
Plan wykładu
• Prosty program
• DEBUG
• Arytmetyka
heksadecymalna
• Liczby ujemne
• Najważniejsze rozkazy
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
Cyfry
0
do
9
A 10
B 11
C 12
D 13
E 14
F 15
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
System szesnastkowy
123
16
= 1*
16
2
+ 2*
16
1
+ 3*
16
0
=
= 256 + 32 + 3
= 291
10
12
16
= 1*16
1
+ 2*16
0
= 16 + 2
= 18
10
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
-
rax
AX
0000
6
-
rbx
BX
0000
6
-
rcx
CX
0005
6
:
:
:
-
g
AX=0012 BX=0002 CX=0003 DX=0000 SP=0000
DS=1A8D ES=1A8D SS=1A9D CS=1A9D IP=0004
1A9D:0004 CC INT 3
-
q
OK.
12
16
= 18
10
Debug - problem
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
Dodawanie
28F
+
37F
28F
+
37F
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
Dodawanie
28
F
+ 37
F
28
F
+ 37
F
F
16
+
F
16
=
15
10
+ 15
10
= 30
10
30
10
:
16
10
=
1 reszta 14
10
=
1 reszta E
16
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
Dodawanie
1
28
F
+ 37
F
E
1
28
F
+ 37
F
E
F
16
+
F
16
=
15
10
+ 15
10
= 30
10
30
10
:
16
10
=
1 reszta 14
10
=
1 reszta E
16
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
Dodawanie
1
2
8
F
+ 3
7
F
E
1
2
8
F
+ 3
7
F
E
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
Dodawanie
1
2
8
F
+ 3
7
F
E
1
2
8
F
+ 3
7
F
E
1
+
8
16
+
7
16
=
= 16
10
16
10
:
16
10
=
1 reszta 0
10
=
1 reszta 0
16
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
Dodawanie
11
2
8
F
+ 3
7
F
0E
11
2
8
F
+ 3
7
F
0E
1
+
8
16
+
7
16
=
= 16
10
16
10
:
16
10
=
1 reszta 0
10
=
1 reszta 0
16
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
Dodawanie
11
2
8
F
+ 3
7
F
0E
11
2
8
F
+ 3
7
F
0E
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
Dodawanie
11
2
8F
+
3
7F
0E
11
2
8F
+
3
7F
0E
1
+
2
16
+
3
16
=
= 6
10
6
10
:
16
10
=
0 reszta 6
10
=
0 reszta 6
16
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
Dodawanie
011
2
8F
+
3
7F
60E
011
2
8F
+
3
7F
60E
1
+
2
16
+
3
16
=
= 6
10
6
10
:
16
10
=
0 reszta 6
10
=
0 reszta 6
16
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
Dodawanie
011
2
8F
+
3
7F
60E
011
2
8F
+
3
7F
60E
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Plan wykładu
Plan wykładu
• Prosty program
• DEBUG
• Arytmetyka
heksadecymalna
• Liczby ujemne
• Najważniejsze rozkazy
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Liczby ujemne
Liczby ujemne
Uzupełnienie do 2
Liczba ujemna -
b
jest
reprezentowana jako:
2
n
-
b
n
bitów daje przedział:
[-2
n
-1
, 2
n
-1
- 1]
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Liczby ujemne
Liczby ujemne
3 bity
000
2
=
0
10
001
2
=
1
10
010
2
=
2
10
011
2
=
3
10
100
2
=
4
10
101
2
=
5
10
110
2
=
6
10
111
2
=
7
10
3
3
3
2
2
2
1
1
1
0
0
0
-1
7
7
-2
6
6
-3
5
5
-4
4
4
Liczba
Kod
2
3
-
b
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Liczby ujemne
Liczby ujemne
16 bitów
32767
7FFF
7FFF
...
...
...
1
1
1
0
0
0
-1
FFFF
FFFF
...
...
...
-32767
8001
8001
-32768
8000
8000
1111
FFFF
FFFF
+
2
2
0001
1
111
FFFF
FFFF
+
2
2
0001
-1
+ 2
1
-1
+ 2
1
=
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Zmiana znaku
Liczby ujemne
Liczby ujemne
1. Zaneguj bity (0 1, 1 0)
2. Dodaj 1
0
F
1
E
2
D
3
C
4
B
5
A
6
9
7
8
FFFF =
-1
0000
0001
5 -5
-7 7
F -
cyfra
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Zmiana znaku
Liczby ujemne
Liczby ujemne
1. Zaneguj bity (0 1, 1 0)
2. Dodaj 1
0
F
1
E
2
D
3
C
4
B
5
A
6
9
7
8
0002
=
-2
FFFD
FFFE
F -
cyfra
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Plan wykładu
Plan wykładu
• Prosty program
• DEBUG
• Arytmetyka
heksadecymalna
• Liczby ujemne
• Najważniejsze rozkazy
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Rozkazy pomocnicze
Najważniejsze rozkazy
Najważniejsze rozkazy
c := z
c := z
MOV
c
,
z
SUB
c
,
z
c := c - z
c := c - z
NEG
c
c := - c
c := - c
ax := bx - cx -
1
mov ax, bx
sub ax, cx
sub ax, 1
move
subtra
ct
negatio
n
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Skoki warunkowe
Najważniejsze rozkazy
Najważniejsze rozkazy
if c = z
then
begin
. . .
end;
if c = z
then
begin
. . .
end;
CMP
c
,
z
JNE
e
. . .
e
:
c
o
mp
are
j
ump if
n
ot
e
qual
SF ZF
. . .
. . .
PS
W
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Skoki warunkowe
Najważniejsze rozkazy
Najważniejsze rozkazy
JE
e
j
ump if
e
qual
if c <> z
then ...
if c <> z
then ...
JNL
e
j
ump if
n
ot
l
ess
if c < z
then ...
if c < z
then ...
JG
e
j
ump if
g
reater
if c <= z
then ...
if c <= z
then ...
JNG
e
j
ump if
n
ot
g
reater
if c > z
then ...
if c > z
then ...
JL
e
j
ump if
l
ess
if c >= z
then ...
if c >= z
then ...
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Skoki warunkowe - przykład
Najważniejsze rozkazy
Najważniejsze rozkazy
ax := min {bx,
cx}
mov ax, bx
cmp ax, cx
jle ok
mov ax, cx
ok: int 3
ax:= bx;
if ax > cx
then
ax:= cx
ax:= bx;
if ax > cx
then
ax:= cx
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Skok bezwarunkowy
Najważniejsze rozkazy
Najważniejsze rozkazy
while c = z
do
begin
. . .
end;
while c = z
do
begin
. . .
end;
pocz
:
CMP
c
,
z
JNE
kon
. . .
JMP
pocz
kon
:
c = z
. . .
Tak
Nie
j
u
m
p
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Skok bezwarunkowy
Najważniejsze rozkazy
Najważniejsze rozkazy
if c = z
then
ins1
else
ins2
if c = z
then
ins1
else
ins2
CMP c,
z
JNE
els
ins1
JMP
kon
els:
ins2
kon:
c = z
ins1
Tak
Nie
ins2
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Skok bezwarunkowy -
przykład
Najważniejsze rozkazy
Najważniejsze rozkazy
ax := nwd {ax,
bx}while ax <> bx do
begin
if ax > bx then
ax:= ax - bx
else
bx:= bx - ax
end;
while ax <> bx do
begin
if ax > bx then
ax:= ax - bx
else
bx:= bx - ax
end;
ax
bx
ax >
bx
ax:=ax-
bx
bx:=bx-
ax
Tak
Tak
Nie
Nie
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Skok bezwarunkowy -
przykład
Najważniejsze rozkazy
Najważniejsze rozkazy
ax := nwd {ax,
bx}
whi: cmp ax, bx
je kon
jle els
sub ax, bx
jmp od
els: sub bx, ax
od: jmp whi
kon: int 3
while ax <> bx do
begin
if ax > bx then
ax:= ax - bx
else
bx:= bx - ax
end;
while ax <> bx do
begin
if ax > bx then
ax:= ax - bx
else
bx:= bx - ax
end;
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Podsumowanie
Podsumowanie
Rejestr - rodzaj zmiennej
DEBUG - interfejs z
użytkownikiem
Reprezentacja
heksadecymalna
Pisanie programów w
języku asemblera jest
trudniejsze niż w języku
wysokiego poziomu
Wreszcie
!
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Literatura
Literatura
• J.Nawrocki, Programowanie
komputerów IBM PC w języku
asemblera metodą
systematyczną, WPP, 1991.
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Ocena wykładu
Ocena wykładu
1. Wrażenie ogólne? (1 -
6)
2. Zbyt wolno czy zbyt
szybko?
3. Czy dowiedziałeś się
czegoś ważnego?
4. Co poprawić i jak?