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
Plan wykładu
Plan wykładu
• Prosty program
• DEBUG
• Arytmetyka
heksadecymalna
• Liczby ujemne
• Koncepcja von Neumanna
• Rozkazy skoku
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 najprostszego
programu
code segment
assume cs: code
start:
instrukcje
code ends
end start
Dlaczeg
o tak?
Czasami
najwięcej rzucają
cienia właśnie
wyjaśnienia.
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 – pierwszy krok
Zapisz
program w
pliku
prog.asm
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Prosty program
Prosty program
Uproszczony schemat
kompilacji
MAS
M
LINK
prog.o
bj
prog.e
xe
prog.as
m
prog.l
st
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Prosty program
Prosty program
Kompilacja - MASM
Poleceni
e
Błęd
y
Ostrzeże
nia
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Prosty program
Prosty program
Kompilacja – Listing
kompilacji
Numer
wiersza
Tekst
program
u
Kod
przekład
u
Adres
względ
ny
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Prosty program
Prosty program
Kompilacja - LINK
Nieistotne
ostrzeżenie
Poleceni
e
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Prosty program
Prosty program
Uruchomienie - DEBUG
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Plan wykładu
Plan wykładu
• Prosty program
• DEBUG
• Arytmetyka
heksadecymalna
• Liczby ujemne
• Koncepcja von Neumanna
• Rozkazy skoku
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=198C ES=198C SS=199C CS=199C IP=0004
199C:0004 CC INT 3
-
q
Nast. instrukcja
J.Nawrocki, Wprowadzenie ..,
Wykład 5
DEBUG - przykład sesji
DEBUG - przykład sesji
D
E
B
U
G
MS
DOS
MS
DOS
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Częściowe podsumowanie
Częściowe podsumowanie
Umiemy już:
• napisać program,
• skompilować go,
• uruchomić.
Hura!
Ale to
proste!
J.Nawrocki, Wprowadzenie ..,
Wykład 5
DEBUG - inna sesja
DEBUG - inna sesja
6 + 6 + 6 = 18 czy 12?
Dziwn
e!
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Plan wykładu
Plan wykładu
• Prosty program
• DEBUG
• Arytmetyka
heksadecymalna
• Liczby ujemne
• Koncepcja von Neumanna
• Rozkazy skoku
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 dziesiętny
123
10
= 100 + 20
+ 3
3*
10
0
2*
10
1
+
1*
10
2
+
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
System szesnastkowy
123
16
= 256 + 32 + 3
= 291
10
3*
16
0
2*
16
1
+
1*
16
2
+
12
16
= 1*
16
1
+ 2*
16
0
= 16 + 2
= 18
10
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
12
16
= 18
10
Aha!
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
Dodawanie metodą pośrednią
28F
16
+
37F
16
28F
16
+
37F
16
+
+
1550
10
11
2*
256
+ 8*
16
+ 15
3*
256
+ 7*
16
+ 15
655
10
895
10
6*
256
+ 0*
16
+ 14
60E
16
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
Dodawanie metodą
bezpośrednią
28F
+
37F
28F
+
37F
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
Dodawanie metodą
bezpośrednią
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 metodą
bezpośrednią
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 metodą
bezpośrednią
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 metodą
bezpośrednią
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 metodą
bezpośrednią
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 metodą
bezpośrednią
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 metodą
bezpośrednią
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 metodą
bezpośrednią
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 metodą
bezpośrednią
011
2
8F
+
3
7F
60E
011
2
8F
+
3
7F
60E
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
ax:= ax + bx + cx
011
2
8F
+
3
7F
60E
011
2
8F
+
3
7F
60E
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
ax:= ax + bx + cx
Nie
można
proście
j?
J.Nawrocki, Wprowadzenie ..,
Wykład 5
ax := bx + cx
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
c := z
c := z
MOV
c
,
z
mov
e
prog segment
assume cs: prog
start:
mov ax, bx
add ax, cx
int 3
prog ends
end start
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
ax:= bx + cx
011
2
8F
+
3
7F
60E
011
2
8F
+
3
7F
60E
J.Nawrocki, Wprowadzenie ..,
Wykład 5
ax := bx - cx
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
c := c - z
c := c - z
SUB
c
,
z
subtra
ct
prog segment
assume cs: prog
start:
mov ax, bx
sub ax, cx
int 3
prog ends
end start
J.Nawrocki, Wprowadzenie ..,
Wykład 5
ax := bx - cx
Arytmetyka heksadecymalna
Arytmetyka heksadecymalna
prog segment
assume cs: prog
start:
sub bx, cx
mov ax, bx
int 3
prog ends
end start
A czy
można
tak?
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Plan wykładu
Plan wykładu
• Prosty program
• DEBUG
• Arytmetyka
heksadecymalna
• Liczby ujemne
• Koncepcja von Neumanna
• Rozkazy skoku
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Liczby ujemne
Liczby ujemne
Uzupełnienie do 2
b jeśli b
0
2
n
- |b| jeśli b
< 0
kod (b)
=
n
bitów daje przedział:
[-2
n
-1
, 2
n
-1
- 1]
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Liczby ujemne
Liczby ujemne
4 bity
15
kod(b
)
b
7
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Liczby ujemne
Liczby ujemne
3 bity
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
1111
FFFF
FFFF
+
2
2
0001
1
111
FFFF
FFFF
+
2
2
0001
Liczby ujemne
Liczby ujemne
ax:= bx + cx
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
ax := - ax
Liczby ujemne
Liczby ujemne
c := -c
c := -c
NEG
c
negati
on
prog segment
assume cs: prog
start:
neg ax
int 3
prog ends
end start
J.Nawrocki, Wprowadzenie ..,
Wykład 5
ax := - ax
Liczby ujemne
Liczby ujemne
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Plan wykładu
Plan wykładu
• Prosty program
• DEBUG
• Arytmetyka heksadecymalna
• Liczby ujemne
• Koncepcja von Neumanna
• Rozkazy skoku
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
Koncepcja von Neumanna
Koncepcja von Neumanna
Kod Rozkaz Przykład
1
MovRegCon(
R
, C)
1
1
1
R1
1
2
MovRegReg(
Rd
, Rs)
2
2
1
R2
R1
3
AddRegReg(
Rd
, Rs)
3
1
2
R1
R1
+R2
4
SubRegReg(
Rd
, Rs)
4
2
1
R2
R2
–R1
5
NegReg(
R
)
5
2 R2
-
R2
6
Int(C)
6
3
Przykładowe kody rozkazów
J.Nawrocki, Wprowadzenie ..,
Wykład 5
ax := bx - cx
Koncepcja von Neumanna
Koncepcja von Neumanna
prog segment
assume cs: prog
start:
mov ax, bx
sub ax, cx
int 3
prog ends
end start
2 0
1
4 0
2
6 3
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Koncepcja von Neumanna
Koncepcja von Neumanna
2
2
0
0
1
1
MovRegReg
ax
bx
10
4
4
0
0
2
2
13
6
6
SubRegReg
3
3
16
Int
18
ax
cx
ax
ax
bx
bx
5
5
0
0
cx
cx
3
3
ax := bx - cx
10
10
Licznik
Licznik
rozkazów
rozkazów
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Koncepcja von Neumanna
Koncepcja von Neumanna
2
2
0
0
1
1
MovRegReg
ax
bx
10
4
4
0
0
2
2
13
6
6
SubRegReg
3
3
16
Int
18
ax
ax
bx
bx
10
10
Licznik
Licznik
rozkazów
rozkazów
5
5
0
0
ax
cx
cx
cx
3
3
ax := bx - cx
1. Ściągnięcie
rozkazu z
pamięci
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Koncepcja von Neumanna
Koncepcja von Neumanna
2
2
0
0
1
1
MovRegReg
ax
bx
10
4
4
0
0
2
2
13
6
6
SubRegReg
3
3
16
Int
18
ax
ax
bx
bx
13
13
Licznik
Licznik
rozkazów
rozkazów
5
5
0
0
ax
cx
cx
cx
3
3
ax := bx - cx
1a. Ustawienie
licznika na
następny rozkaz
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Koncepcja von Neumanna
Koncepcja von Neumanna
2
2
0
0
1
1
MovRegReg
ax
bx
10
4
4
0
0
2
2
13
6
6
SubRegReg
3
3
16
Int
18
ax
ax
bx
bx
13
13
Licznik
Licznik
rozkazów
rozkazów
5
5
0
0
ax
cx
cx
cx
3
3
ax := bx - cx
5
5
2. Wykonanie
rozkazu
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Koncepcja von Neumanna
Koncepcja von Neumanna
2
2
0
0
1
1
MovRegReg
ax
bx
10
4
4
0
0
2
2
13
6
6
SubRegReg
3
3
16
Int
18
ax
ax
bx
bx
13
13
Licznik
Licznik
rozkazów
rozkazów
5
5
0
0
ax
cx
cx
cx
3
3
ax := bx - cx
5
5
1. Ściągnięcie
rozkazu z
pamięci
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Koncepcja von Neumanna
Koncepcja von Neumanna
2
2
0
0
1
1
MovRegReg
ax
bx
10
4
4
0
0
2
2
13
6
6
SubRegReg
3
3
16
Int
18
ax
ax
bx
bx
16
16
Licznik
Licznik
rozkazów
rozkazów
5
5
0
0
ax
cx
cx
cx
3
3
ax := bx - cx
5
5
1a. Ustawienie
licznika na
następny rozkaz
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Koncepcja von Neumanna
Koncepcja von Neumanna
2
2
0
0
1
1
MovRegReg
ax
bx
10
4
4
0
0
2
2
13
6
6
SubRegReg
3
3
16
Int
18
ax
ax
bx
bx
16
16
Licznik
Licznik
rozkazów
rozkazów
5
5
0
0
ax
cx
cx
cx
3
3
ax := bx - cx
5
5
2
2
2. Wykonanie
rozkazu
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Plan wykładu
Plan wykładu
• Prosty program
• DEBUG
• Arytmetyka
heksadecymalna
• Liczby ujemne
• Koncepcja von Neumanna
• Rozkazy skoku
J.Nawrocki, Wprowadzenie ..,
Wykład 5
Skoki warunkowe
Rozkazy skoku
Rozkazy skoku
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
Rozkazy skoku
Rozkazy skoku
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
Rozkazy skoku
Rozkazy skoku
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
Rozkazy skoku
Rozkazy skoku
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
Rozkazy skoku
Rozkazy skoku
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
Rozkazy skoku
Rozkazy skoku
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
Rozkazy skoku
Rozkazy skoku
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?