Wprowadzenie do informatyki Wykad 5 Jzyk asemblera Jerzy
Wprowadzenie do informatyki Wykład 5 Język asemblera Jerzy. Nawrocki@put. poznan. pl http: //www. cs. put. poznan. pl/~nawrocki/ics/ J. Nawrocki, Wprowadzenie. . , Wykład 5 Copyright, 2001 © Jerzy R. Nawrocki
Plan wykładu • Prosty program • • • DEBUG Arytmetyka heksadecymalna Liczby ujemne Koncepcja von Neumanna Rozkazy skoku J. Nawrocki, Wprowadzenie. . , Wykład 5
Prosty program Rejestry AX 3 BX CX DX SI 0 7 1 8 DI 2 var J. Nawrocki, Wprowadzenie. . , Wykład 5 ax, bx, cx, dx, si, di: integer;
Prosty program Instrukcja ADD p, z p : = p + z ax : = ax + bx + 2 add ax, bx add ax, 2 J. Nawrocki, Wprowadzenie. . , Wykład 5
Prosty program Struktura najprostszego programu Dlaczego tak? Czasami najwięcej rzucają cienia właśnie wyjaśnienia. code segment assume cs: code start: instrukcje code ends end start J. Nawrocki, Wprowadzenie. . , Wykład 5
Prosty program Przykład programu ax : = ax + bx + cx prog segment assume cs: prog start: add ax, bx Koniec add ax, cx pracy int 3 prog ends end start J. Nawrocki, Wprowadzenie. . , Wykład 5
Prosty program Kompilacja – pierwszy krok Zapisz program w pliku prog. asm J. Nawrocki, Wprowadzenie. . , Wykład 5
Prosty program Uproszczony schemat kompilacji prog. obj prog. asm MASM LINK prog. lst J. Nawrocki, Wprowadzenie. . , Wykład 5 prog. exe
Prosty program Kompilacja - MASM Polecenie Błędy Ostrzeżenia J. Nawrocki, Wprowadzenie. . , Wykład 5
Prosty program Kompilacja – Listing kompilacji Numer wiersza Adres względny J. Nawrocki, Wprowadzenie. . , Wykład 5 Kod przekładu Tekst programu
Prosty program Kompilacja - LINK Polecenie Nieistotne ostrzeżenie J. Nawrocki, Wprowadzenie. . , Wykład 5
Prosty program Uruchomienie - DEBUG J. Nawrocki, Wprowadzenie. . , Wykład 5
Plan wykładu • Prosty program • DEBUG • • Arytmetyka heksadecymalna Liczby ujemne Koncepcja von Neumanna Rozkazy skoku J. Nawrocki, Wprowadzenie. . , Wykład 5
DEBUG Najważniejsze komendy R rejestr (Register) G (Go) Q (Quit) J. Nawrocki, Wprowadzenie. . , Wykład 5
DEBUG - przykład sesji -rax AX 0000 : 1 -rbx BX 0000 : 2 -rcx Wynik CX 0005 : 3 -g AX=0006 BX=0002 CX=0003 DX=0000 SP=0000 DS=198 C ES=198 C SS=199 C CS=199 C IP=0004 199 C: 0004 CC INT 3 -q Nast. instrukcja J. Nawrocki, Wprowadzenie. . , Wykład 5
DEBUG - przykład sesji DEBUG MS DOS J. Nawrocki, Wprowadzenie. . , Wykład 5
Częściowe podsumowanie Hura! Ale to proste! Umiemy już: • napisać program, • skompilować go, • uruchomić. J. Nawrocki, Wprowadzenie. . , Wykład 5
DEBUG - inna sesja Dziwne ! 6 + 6 = 18 czy 12? J. Nawrocki, Wprowadzenie. . , Wykład 5
Plan wykładu • Prosty program • DEBUG • Arytmetyka heksadecymalna • Liczby ujemne • Koncepcja von Neumanna • Rozkazy skoku J. Nawrocki, Wprowadzenie. . , Wykład 5
Arytmetyka heksadecymalna Cyfry 0 do 9 J. Nawrocki, Wprowadzenie. . , Wykład 5 A 10 B 11 C 12 D 13 E 14 F 15
Arytmetyka heksadecymalna System dziesiętny 12310 1*102 + 2* 101 + 3* 100 = 100 + 20 J. Nawrocki, Wprowadzenie. . , Wykład 5 + 3
Arytmetyka heksadecymalna System szesnastkowy 12316 1*162 + 2* 161 + 3* 160 = 256 + 32 + 3 = 29110 1216 = 1*161 + 2*160 = 16 + 2 = 1810 J. Nawrocki, Wprowadzenie. . , Wykład 5
Arytmetyka heksadecymalna Aha! 1216 = 1810 J. Nawrocki, Wprowadzenie. . , Wykład 5
Arytmetyka heksadecymalna Dodawanie metodą pośrednią 28 F 16 2*256 + 8*16 + 15 11 65510 + 37 F 16 60 E 16 3*256 + 7*16 + 15 6*256 + 0*16 + 14 + 89510 155010 J. Nawrocki, Wprowadzenie. . , Wykład 5
Arytmetyka heksadecymalna Dodawanie metodą bezpośrednią 28 F + 37 F J. Nawrocki, Wprowadzenie. . , Wykład 5
Arytmetyka heksadecymalna Dodawanie metodą bezpośrednią 28 F + 37 F J. Nawrocki, Wprowadzenie. . , Wykład 5 F 16 + F 16 = 1510 + 1510= 3010 : 1610 = 1 reszta 1410= 1 reszta E 16
Arytmetyka heksadecymalna Dodawanie metodą bezpośrednią 1 28 F + 37 F E J. Nawrocki, Wprowadzenie. . , Wykład 5 F 16 + F 16 = 1510 + 1510= 3010 : 1610 = 1 reszta 1410= 1 reszta E 16
Arytmetyka heksadecymalna Dodawanie metodą bezpośrednią 1 2 8 F + 3 7 F E J. Nawrocki, Wprowadzenie. . , Wykład 5
Arytmetyka heksadecymalna Dodawanie metodą bezpośrednią 1 2 8 F + 3 7 F E J. Nawrocki, Wprowadzenie. . , Wykład 5 1 + 816 + 716 = = 1610 : 1610 = 1 reszta 010= 1 reszta 016
Arytmetyka heksadecymalna Dodawanie metodą bezpośrednią 11 2 8 F + 3 7 F 0 E J. Nawrocki, Wprowadzenie. . , Wykład 5 1 + 816 + 716 = = 1610 : 1610 = 1 reszta 010= 1 reszta 016
Arytmetyka heksadecymalna Dodawanie metodą bezpośrednią 11 2 8 F + 3 7 F 0 E J. Nawrocki, Wprowadzenie. . , Wykład 5
Arytmetyka heksadecymalna Dodawanie metodą bezpośrednią 11 28 F + 37 F 0 E J. Nawrocki, Wprowadzenie. . , Wykład 5 1 + 216 + 316 = = 610 : 1610 = 0 reszta 610= 0 reszta 616
Arytmetyka heksadecymalna Dodawanie metodą bezpośrednią 011 28 F + 37 F 60 E J. Nawrocki, Wprowadzenie. . , Wykład 5 1 + 216 + 316 = = 610 : 1610 = 0 reszta 610= 0 reszta 616
Arytmetyka heksadecymalna Dodawanie metodą bezpośrednią 011 28 F + 37 F 60 E J. Nawrocki, Wprowadzenie. . , Wykład 5
Arytmetyka heksadecymalna ax: = ax + bx + cx 011 28 F + 37 F 60 E J. Nawrocki, Wprowadzenie. . , Wykład 5
Arytmetyka heksadecymalna ax: = ax + bx + cx Nie można prościej ? J. Nawrocki, Wprowadzenie. . , Wykład 5
Arytmetyka heksadecymalna ax : = bx + cx prog move MOV c, z start: c : = z prog J. Nawrocki, Wprowadzenie. . , Wykład 5 segment assume cs: prog mov ax, bx add ax, cx int 3 ends end start
Arytmetyka heksadecymalna ax: = bx + cx 011 28 F + 37 F 60 E J. Nawrocki, Wprowadzenie. . , Wykład 5
Arytmetyka heksadecymalna ax : = bx - cx prog subtract SUB c, z start: c : = c - z prog J. Nawrocki, Wprowadzenie. . , Wykład 5 segment assume cs: prog mov ax, bx sub ax, cx int 3 ends end start
Arytmetyka heksadecymalna ax : = bx - cx A czy można tak? prog segment assume cs: prog start: prog J. Nawrocki, Wprowadzenie. . , Wykład 5 sub bx, cx mov ax, bx int 3 ends end start
Plan wykładu • Prosty program • DEBUG • Arytmetyka heksadecymalna • Liczby ujemne • Koncepcja von Neumanna • Rozkazy skoku J. Nawrocki, Wprowadzenie. . , Wykład 5
Liczby ujemne Uzupełnienie do 2 kod (b) = b jeśli b 0 2 n - |b| jeśli b < 0 n bitów daje przedział: [-2 n-1 , 2 n-1 - 1] J. Nawrocki, Wprowadzenie. . , Wykład 5
Liczby ujemne 4 bity kod(b) 15 b 7 J. Nawrocki, Wprowadzenie. . , Wykład 5
Liczby ujemne 3 bity Liczba 3 J. Nawrocki, Wprowadzenie. . , Wykład 5 Kod 3 2 2 1 1 0 0 -1 7 -2 6 -3 5 -4 4 23 - |b|
Liczby ujemne 16 bitów 1111 FFFF = -1 + 2 0001 1 J. Nawrocki, Wprowadzenie. . , Wykład 5 32767 7 FFF . . . 1 1 0 0 -1 FFFF . . . -32767 8001 -32768 8000
Liczby ujemne ax: = bx + cx 1111 FFFF + 2 0001 J. Nawrocki, Wprowadzenie. . , Wykład 5
Liczby ujemne Zmiana znaku 5 -5 -7 7 1. Zaneguj bity (0 1, 1 0) 2. Dodaj 1 FFFF = -1 0000 0001 J. Nawrocki, Wprowadzenie. . , Wykład 5 0 F 1 E 2 D 3 C 4 B 5 A 6 9 7 8 F - cyfra
Liczby ujemne Zmiana znaku 0 F 1 E 1. Zaneguj bity (0 1, 1 0) 2. Dodaj 1 0002 FFFD FFFE = -2 J. Nawrocki, Wprowadzenie. . , Wykład 5 2 D 3 C 4 B 5 A 6 9 7 8 F - cyfra
Liczby ujemne ax : = - ax prog negation NEG c c : = -c J. Nawrocki, Wprowadzenie. . , Wykład 5 segment assume cs: prog start: prog neg ax int 3 ends end start
Liczby ujemne ax : = - ax J. Nawrocki, Wprowadzenie. . , Wykład 5
Plan wykładu • • Prosty program DEBUG Arytmetyka heksadecymalna Liczby ujemne • Koncepcja von Neumanna • Rozkazy skoku J. Nawrocki, Wprowadzenie. . , Wykład 5
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 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 Przykładowe kody rozkazów Kod 1 2 3 4 5 6 Rozkaz Mov. Reg. Con(R, C) Mov. Reg(Rd, Rs) Add. Reg(Rd, Rs) Sub. Reg(Rd, Rs) Neg. Reg(R) Int(C) J. Nawrocki, Wprowadzenie. . , Wykład 5 Przykład 111 221 312 421 52 63 R 1 1 R 2 R 1+R 2 R 2–R 1 R 2 - R 2
Koncepcja von Neumanna ax : = bx - cx prog segment assume cs: prog start: prog mov ax, bx sub ax, cx int 3 ends end start J. Nawrocki, Wprowadzenie. . , Wykład 5 201 402 63
Koncepcja von Neumanna ax : = bx - cx 10 13 10 Licznik rozkazów 16 18 2 0 1 4 0 2 6 3 J. Nawrocki, Wprowadzenie. . , Wykład 5 Mov. Reg ax bx Sub. Reg ax cx Int ax 0 bx 5 cx 3
Koncepcja von Neumanna ax : = bx - cx 10 13 10 Licznik rozkazów 16 18 2 0 1 4 0 2 6 3 J. Nawrocki, Wprowadzenie. . , Wykład 5 Mov. Reg ax bx Sub. Reg ax cx Int ax 0 bx 5 cx 3 1. Ściągnięcie rozkazu z pamięci
Koncepcja von Neumanna ax : = bx - cx 10 13 13 Licznik rozkazów 16 18 2 0 1 4 0 2 6 3 J. Nawrocki, Wprowadzenie. . , Wykład 5 Mov. Reg ax bx Sub. Reg ax cx Int ax 0 bx 5 cx 3 1 a. Ustawienie licznika na następny rozkaz
Koncepcja von Neumanna ax : = bx - cx 10 13 13 Licznik rozkazów 16 18 2 0 1 4 0 2 6 3 J. Nawrocki, Wprowadzenie. . , Wykład 5 Mov. Reg ax bx Sub. Reg ax cx Int ax 0 5 bx 5 2. Wykonanie rozkazu cx 3
Koncepcja von Neumanna ax : = bx - cx 10 13 13 Licznik rozkazów 16 18 2 0 1 4 0 2 6 3 J. Nawrocki, Wprowadzenie. . , Wykład 5 Mov. Reg ax bx Sub. Reg ax cx Int ax 0 5 bx 5 cx 3 1. Ściągnięcie rozkazu z pamięci
Koncepcja von Neumanna ax : = bx - cx 10 13 16 Licznik rozkazów 16 18 2 0 1 4 0 2 6 3 J. Nawrocki, Wprowadzenie. . , Wykład 5 Mov. Reg ax bx Sub. Reg ax cx Int ax 0 5 bx 5 cx 3 1 a. Ustawienie licznika na następny rozkaz
Koncepcja von Neumanna ax : = bx - cx 10 13 16 Licznik rozkazów 16 18 2 0 1 4 0 2 6 3 J. Nawrocki, Wprowadzenie. . , Wykład 5 Mov. Reg ax bx Sub. Reg ax cx Int ax 0 5 2 bx 5 2. Wykonanie rozkazu cx 3
Plan wykładu • • • Prosty program DEBUG Arytmetyka heksadecymalna Liczby ujemne Koncepcja von Neumanna • Rozkazy skoku J. Nawrocki, Wprowadzenie. . , Wykład 5
Rozkazy skoku Skoki warunkowe PSW. . . SF ZF. . . CMP c, z compare JNE jump if not equal . . . e: J. Nawrocki, Wprowadzenie. . , Wykład 5 e if c = z then begin. . . end;
Rozkazy skoku Skoki warunkowe jump if equal jump if not less jump if greater jump if not greater jump if less JE e JNL e JG e JNG e JL e J. Nawrocki, Wprowadzenie. . , Wykład 5 if c <> z then. . . if c <= z then. . . if c >= z then. . .
Rozkazy skoku Skoki warunkowe - przykład ax : = min {bx, cx} mov cmp jle mov ok: int ax, bx ax, cx ok ax, cx 3 J. Nawrocki, Wprowadzenie. . , Wykład 5 ax: = bx; if ax > cx then ax: = cx
Rozkazy skoku Skok bezwarunkowy pocz: CMP c, z jump while c = z do JNE kon begin . . . JMP pocz end; kon: J. Nawrocki, Wprowadzenie. . , Wykład 5 c=z Tak . . . Nie
Rozkazy skoku Skok bezwarunkowy CMP c, z if c = z JNE els then ins 1 JMP kon els: ins 2 else ins 2 kon: J. Nawrocki, Wprowadzenie. . , Wykład 5 c=z Tak ins 1 Nie ins 2
Rozkazy skoku Skok bezwarunkowy - przykład ax : = nwd {ax, bx} while ax <> bx do ax bx Nie begin Tak if ax > bx then ax > bx Nie ax: = ax - bx else Tak bx: = bx - ax ax: =ax-bx bx: =bx-ax end; J. Nawrocki, Wprowadzenie. . , Wykład 5
Rozkazy skoku Skok bezwarunkowy - przykład whi: cmp je jle sub jmp els: sub od: jmp kon: int ax : = nwd {ax, bx} ax, bx while ax <> bx do kon begin els if ax > bx then ax, bx ax: = ax - bx od else bx, ax bx: = bx - ax whi end; 3 J. Nawrocki, Wprowadzenie. . , Wykład 5
Podsumowanie Wreszcie! 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 J. Nawrocki, Wprowadzenie. . , Wykład 5
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 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
- Slides: 73