1 Wprowadzenie do informatyki Wykład 5(c) Jerzy Nawrocki Wprowadzenie do informatyki Wykład 5 Język asemblera Copyright, 2001 © Jerzy R. Nawrocki Wprowadzenie do informatyki, Wykład 5
2 Koncepcja von NeumannaSpecjalizowane 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
3 Koncepcja von NeumannaDwie 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
4 J.Nawrocki, Wprowadzenie .., Wykład 5Kodowanie rozkazów Kod Rozkaz Przykład 1 MovRegCon(R, C) R1 0 2 IfRegLeCon(R, C, I) R2 1 .. 3 MulRegReg(Rd, Rs) R1 R1*R2 4 SubRegCon(Rd, C) R2 R2-1 5 Jump(I) 6 Stop J.Nawrocki, Wprowadzenie .., Wykład 5
5 J.Nawrocki, Wprowadzenie .., Wykład 5Obliczanie n! Start Stop R1 1 R1 R1 * R2 R2 R2 - 1 R2 > 1 Tak Nie Warunek pocz.: R2 = n Warunek końc.: R1 = n! J.Nawrocki, Wprowadzenie .., Wykład 5
6 J.Nawrocki, Wprowadzenie .., Wykład 5Kodowanie rozkazów 1 MovRegCon 10 1 R1 1 1 2 13 IfRegLeCon 2 1 25 17 3 MulRegReg 1 2 20 4 SubRegCon 2 1 23 5 Jump 13 25 6 Stop J.Nawrocki, Wprowadzenie .., Wykład 5
7 J.Nawrocki, Wprowadzenie .., Wykład 5Kodowanie rozkazów 1 MovRegCon 10 1 R1 1 1 We Wyj 2 13 IfRegLeCon R2 R1 2 10 1 3 25 IC 17 3 MulRegReg 1 2 20 4 SubRegCon 2 1 23 5 Jump 13 25 6 Stop J.Nawrocki, Wprowadzenie .., Wykład 5
8 J.Nawrocki, Wprowadzenie .., Wykład 5Kodowanie rozkazów 1 MovRegCon 10 1 R1 1 1 We Wyj 2 13 IfRegLeCon R2 R1 2 13 1 3 1 25 IC 17 3 MulRegReg 1 2 20 4 SubRegCon 2 1 23 5 Jump 13 25 6 Stop J.Nawrocki, Wprowadzenie .., Wykład 5
9 J.Nawrocki, Wprowadzenie .., Wykład 5Kodowanie rozkazów 1 MovRegCon 10 1 R1 1 1 We Wyj 2 13 IfRegLeCon R2 R1 2 17 1 3 1 25 IC 17 3 MulRegReg 1 2 20 4 SubRegCon 2 1 23 5 Jump 13 25 6 Stop J.Nawrocki, Wprowadzenie .., Wykład 5
10 J.Nawrocki, Wprowadzenie .., Wykład 5Kodowanie rozkazów 1 MovRegCon 10 1 R1 1 1 We Wyj 2 13 IfRegLeCon R2 R1 2 20 1 3 1 25 IC 17 3 3 MulRegReg 1 2 20 4 SubRegCon 2 1 23 5 Jump 13 25 6 Stop J.Nawrocki, Wprowadzenie .., Wykład 5
11 J.Nawrocki, Wprowadzenie .., Wykład 5Kodowanie rozkazów 1 MovRegCon 10 1 R1 1 1 We Wyj 2 13 IfRegLeCon R2 R1 2 23 1 3 1 25 IC 17 3 2 3 MulRegReg 1 2 20 4 SubRegCon 2 1 23 5 Jump 13 25 6 Stop J.Nawrocki, Wprowadzenie .., Wykład 5
12 J.Nawrocki, Wprowadzenie .., Wykład 5Kodowanie rozkazów 1 MovRegCon 10 1 R1 1 1 We Wyj 2 13 IfRegLeCon R2 R1 2 13 1 3 1 25 IC 17 3 2 3 MulRegReg 1 2 20 4 SubRegCon 2 1 23 5 Jump 13 25 6 Stop J.Nawrocki, Wprowadzenie .., Wykład 5
13 J.Nawrocki, Wprowadzenie .., Wykład 5Kodowanie rozkazów 1 MovRegCon 10 1 R1 1 1 We Wyj 2 13 IfRegLeCon R2 R1 2 17 1 3 1 25 IC 17 3 2 3 MulRegReg 1 2 20 4 SubRegCon 2 1 23 5 Jump 13 25 6 Stop J.Nawrocki, Wprowadzenie .., Wykład 5
14 J.Nawrocki, Wprowadzenie .., Wykład 5Kodowanie rozkazów 1 MovRegCon 10 1 R1 1 1 We Wyj 2 13 IfRegLeCon R2 R1 2 20 1 3 1 25 IC 17 3 2 3 MulRegReg 1 6 2 20 4 SubRegCon 2 1 23 5 Jump 13 25 6 Stop J.Nawrocki, Wprowadzenie .., Wykład 5
15 J.Nawrocki, Wprowadzenie .., Wykład 5Kodowanie rozkazów 1 MovRegCon 10 1 R1 1 1 We Wyj 2 13 IfRegLeCon R2 R1 2 23 1 3 1 25 IC 17 3 2 3 MulRegReg 1 1 6 2 20 4 SubRegCon 2 1 23 5 Jump 13 25 6 Stop J.Nawrocki, Wprowadzenie .., Wykład 5
16 J.Nawrocki, Wprowadzenie .., Wykład 5Kodowanie rozkazów 1 MovRegCon 10 1 R1 1 1 We Wyj 2 13 IfRegLeCon R2 R1 2 13 1 3 1 25 IC 17 3 2 3 MulRegReg 1 1 6 2 20 4 SubRegCon 2 1 23 5 Jump 13 25 6 Stop J.Nawrocki, Wprowadzenie .., Wykład 5
17 J.Nawrocki, Wprowadzenie .., Wykład 5Kodowanie rozkazów 1 MovRegCon 10 1 R1 1 1 We Wyj 2 13 IfRegLeCon R2 R1 2 13 1 3 1 25 IC 17 3 2 3 MulRegReg 1 1 6 2 20 4 SubRegCon 2 1 23 5 Jump 13 25 6 Stop J.Nawrocki, Wprowadzenie .., Wykład 5
18 J.Nawrocki, Wprowadzenie .., Wykład 5Plan wykładu Prosty program DEBUG Arytmetyka heksadecymalna Liczby ujemne Najważniejsze rozkazy J.Nawrocki, Wprowadzenie .., Wykład 5
19 J.Nawrocki, Wprowadzenie .., Wykład 5Prosty program Rejestry AX 3 BX CX 7 DX 1 SI 8 DI 2 var ax, bx, cx, dx, si, di: integer; Pascal J.Nawrocki, Wprowadzenie .., Wykład 5
20 J.Nawrocki, Wprowadzenie .., Wykład 5Prosty program Instrukcja p := p + z Pascal ADD p, z ax := ax + bx + 2 add ax, bx add ax, 2 J.Nawrocki, Wprowadzenie .., Wykład 5
21 J.Nawrocki, Wprowadzenie .., Wykład 5Prosty program Struktura programu Program: zbiór (oddzielnie kompilowanych) modułów J.Nawrocki, Wprowadzenie .., Wykład 5
22 J.Nawrocki, Wprowadzenie .., Wykład 5Prosty program Struktura programu Program: zbiór (oddzielnie kompilowanych) modułów Error J.Nawrocki, Wprowadzenie .., Wykład 5
23 J.Nawrocki, Wprowadzenie .., Wykład 5Prosty program Struktura programu Program: zbiór (oddzielnie kompilowanych) modułów m1.asm masm m1.obj J.Nawrocki, Wprowadzenie .., Wykład 5
24 J.Nawrocki, Wprowadzenie .., Wykład 5Prosty program Struktura programu Program: zbiór (oddzielnie kompilowanych) modułów m1.asm masm m1.obj L i n k p.exe m2.asm masm m2.obj J.Nawrocki, Wprowadzenie .., Wykład 5
25 J.Nawrocki, Wprowadzenie .., Wykład 5Prosty program Struktura programu Program: zbiór (oddzielnie kompilowanych) modułów Moduł: zbiór segmentów Pamięć 65535 Intel 8080 J.Nawrocki, Wprowadzenie .., Wykład 5
26 J.Nawrocki, Wprowadzenie .., Wykład 5Prosty program Struktura programu Program: zbiór (oddzielnie kompilowanych) modułów Moduł: zbiór segmentów 65535 Intel 8086 Kod Dane Stos Dodatk cs ds ss es J.Nawrocki, Wprowadzenie .., Wykład 5
27 J.Nawrocki, Wprowadzenie .., Wykład 5Prosty program Struktura programu Program: zbiór (oddzielnie kompilowanych) modułów Moduł: zbiór segmentów nazwa_seg SEGMENT ASSUME CS: nazwa_seg etyk_pocz: instrukcje nazwa_seg ENDS END etyk_pocz Koniec modułu J.Nawrocki, Wprowadzenie .., Wykład 5
28 J.Nawrocki, Wprowadzenie .., Wykład 5Prosty program Przykład programu ax := ax + bx + cx prog SEGMENT ASSUME CS: prog start: add ax, bx add ax, cx int 3 prog ENDS END start Koniec pracy J.Nawrocki, Wprowadzenie .., Wykład 5
29 Prosty program Kompilacja i uruchomienieZapisz program w pliku plik.asm masm plik link plik debug plik .exe J.Nawrocki, Wprowadzenie .., Wykład 5
30 J.Nawrocki, Wprowadzenie .., Wykład 5Plan wykładu Prosty program DEBUG Arytmetyka heksadecymalna Liczby ujemne Najważniejsze rozkazy J.Nawrocki, Wprowadzenie .., Wykład 5
31 Najważniejsze komendy J.Nawrocki, Wprowadzenie .., Wykład 5DEBUG Najważniejsze komendy R rejestr (Register) G (Go) Q (Quit) J.Nawrocki, Wprowadzenie .., Wykład 5
32 J.Nawrocki, Wprowadzenie .., Wykład 5DEBUG - przykład sesji - rax AX 0000 : 1 - rbx BX 0000 2 : Wynik - 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
33 J.Nawrocki, Wprowadzenie .., Wykład 5DEBUG - inna sesja - rax AX 0000 : 6 - rbx BX 0000 6 : 12 czy 18? - 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 J.Nawrocki, Wprowadzenie .., Wykład 5
34 J.Nawrocki, Wprowadzenie .., Wykład 5Plan wykładu Prosty program DEBUG Arytmetyka heksadecymalna Liczby ujemne Najważniejsze rozkazy J.Nawrocki, Wprowadzenie .., Wykład 5
35 Arytmetyka heksadecymalnaCyfry 0 do 9 A B C D E F J.Nawrocki, Wprowadzenie .., Wykład 5
36 Arytmetyka heksadecymalnaSystem szesnastkowy 12316 = 1* * * 160 = = = 29110 1216 = 1* *160 = = 1810 J.Nawrocki, Wprowadzenie .., Wykład 5
37 Arytmetyka heksadecymalna- rax Debug - problem AX 0000 : 6 - rbx BX 0000 6 : OK. 1216 = 1810 - 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 J.Nawrocki, Wprowadzenie .., Wykład 5
38 Arytmetyka heksadecymalnaDodawanie 28F + 37F J.Nawrocki, Wprowadzenie .., Wykład 5
39 Arytmetyka heksadecymalnaDodawanie F16 + F16 = = 3010 3010 : 1610 = 1 reszta 1410= 1 reszta E16 28F + 37F J.Nawrocki, Wprowadzenie .., Wykład 5
40 Arytmetyka heksadecymalnaDodawanie F16 + F16 = = 3010 3010 : 1610 = 1 reszta 1410= 1 reszta E16 1 28F + 37F E J.Nawrocki, Wprowadzenie .., Wykład 5
41 Arytmetyka heksadecymalnaDodawanie 1 28F + 37F E J.Nawrocki, Wprowadzenie .., Wykład 5
42 Arytmetyka heksadecymalnaDodawanie = = 1610 1610 : 1610 = 1 reszta 010= 1 reszta 016 1 28F + 37F E J.Nawrocki, Wprowadzenie .., Wykład 5
43 Arytmetyka heksadecymalnaDodawanie = = 1610 1610 : 1610 = 1 reszta 010= 1 reszta 016 11 28F + 37F 0E J.Nawrocki, Wprowadzenie .., Wykład 5
44 Arytmetyka heksadecymalnaDodawanie 11 28F + 37F 0E J.Nawrocki, Wprowadzenie .., Wykład 5
45 Arytmetyka heksadecymalnaDodawanie = = 610 610 : 1610 = 0 reszta 610= 0 reszta 616 11 28F + 37F 0E J.Nawrocki, Wprowadzenie .., Wykład 5
46 Arytmetyka heksadecymalnaDodawanie = = 610 610 : 1610 = 0 reszta 610= 0 reszta 616 011 28F + 37F 60E J.Nawrocki, Wprowadzenie .., Wykład 5
47 Arytmetyka heksadecymalnaDodawanie 011 28F + 37F 60E J.Nawrocki, Wprowadzenie .., Wykład 5
48 J.Nawrocki, Wprowadzenie .., Wykład 5Plan wykładu Prosty program DEBUG Arytmetyka heksadecymalna Liczby ujemne Najważniejsze rozkazy J.Nawrocki, Wprowadzenie .., Wykład 5
49 J.Nawrocki, Wprowadzenie .., Wykład 5Liczby ujemne Uzupełnienie do 2 Liczba ujemna -b jest reprezentowana jako: 2n - b n bitów daje przedział: [-2n-1 , 2n-1 - 1] J.Nawrocki, Wprowadzenie .., Wykład 5
50 J.Nawrocki, Wprowadzenie .., Wykład 5Liczby ujemne 3 bity Liczba Kod 0002 = 010 0012 = 110 0102 = 210 0112 = 310 1002 = 410 1012 = 510 1102 = 610 1112 = 710 23 - b J.Nawrocki, Wprowadzenie .., Wykład 5
51 J.Nawrocki, Wprowadzenie .., Wykład 5Liczby ujemne 16 bitów FFF FFFF 1111 FFFF + 2 0001 -1 + 2 1 = J.Nawrocki, Wprowadzenie .., Wykład 5
52 J.Nawrocki, Wprowadzenie .., Wykład 5Liczby ujemne Zmiana znaku 5 -5 -7 7 0 F 1 E 2 D 3 C 4 B 5 A 6 9 7 8 F - cyfra 1. Zaneguj bity (0 1, 1 0) 2. Dodaj 1 FFFF = -1 0000 0001 J.Nawrocki, Wprowadzenie .., Wykład 5
53 J.Nawrocki, Wprowadzenie .., Wykład 5Liczby ujemne Zmiana znaku 0 F 1 E 2 D 3 C 4 B 5 A 6 9 7 8 1. Zaneguj bity (0 1, 1 0) 2. Dodaj 1 F - cyfra 0002 FFFD FFFE = -2 J.Nawrocki, Wprowadzenie .., Wykład 5
54 J.Nawrocki, Wprowadzenie .., Wykład 5Plan wykładu Prosty program DEBUG Arytmetyka heksadecymalna Liczby ujemne Najważniejsze rozkazy J.Nawrocki, Wprowadzenie .., Wykład 5
55 Najważniejsze rozkazyRozkazy pomocnicze c := z Pascal move MOV c, z subtract SUB c, z c := c - z negation NEG c c := - c ax := bx - cx - 1 mov ax, bx sub ax, cx sub ax, 1 J.Nawrocki, Wprowadzenie .., Wykład 5
56 Najważniejsze rozkazySkoki warunkowe SF ZF . . . PSW if c = z then begin . . . end; Pascal compare CMP c, z JNE e . . . e: jump if not equal J.Nawrocki, Wprowadzenie .., Wykład 5
57 Najważniejsze rozkazySkoki warunkowe Pascal if c <> z then ... jump if equal JE e jump if not less JNL e if c < z then ... jump if greater JG e if c <= z then ... jump if not greater JNG e if c > z then ... jump if less JL e if c >= z then ... J.Nawrocki, Wprowadzenie .., Wykład 5
58 Najważniejsze rozkazySkoki warunkowe - przykład 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 J.Nawrocki, Wprowadzenie .., Wykład 5
59 Najważniejsze rozkazySkok bezwarunkowy while c = z do begin . . . end; Pascal pocz: CMP c, z JNE kon . . . JMP pocz kon: c = z . . . Tak Nie jump J.Nawrocki, Wprowadzenie .., Wykład 5
60 Najważniejsze rozkazySkok bezwarunkowy if c = z then ins1 else ins2 Pascal CMP c, z JNE els ins1 JMP kon els: ins2 kon: c = z ins1 Tak Nie ins2 J.Nawrocki, Wprowadzenie .., Wykład 5
61 Najważniejsze rozkazySkok bezwarunkowy - przykład ax := nwd {ax, bx} ax bx ax > bx ax:=ax-bx bx:=bx-ax Tak Nie while ax <> bx do begin if ax > bx then ax:= ax - bx else bx:= bx - ax end; J.Nawrocki, Wprowadzenie .., Wykład 5
62 Najważniejsze rozkazySkok bezwarunkowy - przykład 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; J.Nawrocki, Wprowadzenie .., Wykład 5
63 J.Nawrocki, Wprowadzenie .., Wykład 5Podsumowanie 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
64 J.Nawrocki, Wprowadzenie .., Wykład 5Literatura J.Nawrocki, Programowanie komputerów IBM PC w języku asemblera metodą systematyczną, WPP, 1991. J.Nawrocki, Wprowadzenie .., Wykład 5
65 J.Nawrocki, Wprowadzenie .., Wykład 5Ocena 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? J.Nawrocki, Wprowadzenie .., Wykład 5