Wprowadzenie do informatyki Wykad 4 Asembler i koncepcja
Wprowadzenie do informatyki Wykład 4 Asembler i koncepcja von Neumanna Jerzy. Nawrocki@put. poznan. pl http: //www. cs. put. poznan. pl/jnawrocki/wdi/ J. Nawrocki, Asembler i koncepcja Copyright, 2007 © Jerzy R. Nawrockivon Neumanna
Plan wykładu • • • Prosty program DEBUG Arytmetyka heksadecymalna Liczby ujemne Koncepcja von Neumanna Rozkazy skoku J. Nawrocki, Asembler i koncepcja von Neumanna
Prosty program Rejestry AX 3 BX CX DX SI 0 7 1 8 DI 2 int ax, bx, cx, dx, si, di; J. Nawrocki, Asembler i koncepcja von Neumanna
Prosty program Instrukcja ADD p, z p = p + z; ax = ax + bx + 2; add ax, bx add ax, 2 J. Nawrocki, Asembler i koncepcja von Neumanna
Prosty program Struktura najprostszego programu Czasami najwięcej rzucają cienia właśnie wyjaśnienia. Dlaczego tak? code segment assume cs: code start: instrukcje code ends end start J. Nawrocki, Asembler i koncepcja von Neumanna
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, Asembler i koncepcja von Neumanna
Prosty program Kompilacja – pierwszy krok Zapisz program w pliku prog. asm J. Nawrocki, Asembler i koncepcja von Neumanna
Prosty program Uproszczony schemat kompilacji prog. obj prog. asm MASM LINK prog. lst J. Nawrocki, Asembler i koncepcja von Neumanna prog. exe
Prosty program Kompilacja - MASM Polecenie Błędy Ostrzeżenia J. Nawrocki, Asembler i koncepcja von Neumanna
Prosty program Kompilacja – Listing kompilacji prog. lst Numer wiersza Adres względny Kod przekładu J. Nawrocki, Asembler i koncepcja von Neumanna Tekst programu
Prosty program Uproszczony schemat kompilacji prog. obj prog. asm MASM LINK prog. lst J. Nawrocki, Asembler i koncepcja von Neumanna prog. exe
Prosty program Kompilacja - LINK Polecenie Nieistotne ostrzeżenie J. Nawrocki, Asembler i koncepcja von Neumanna
Prosty program Uruchomienie - DEBUG J. Nawrocki, Asembler i koncepcja von Neumanna
DEBUG Najważniejsze komendy R rejestr (Register) G (Go) Q (Quit) J. Nawrocki, Asembler i koncepcja von Neumanna
Tekst programu raz jeszcze prog segment assume cs: prog start: prog add ax, bx add ax, cx int 3 ends end start J. Nawrocki, Asembler i koncepcja von Neumanna
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, Asembler i koncepcja von Neumanna
DEBUG - przykład sesji DEBUG MS DOS J. Nawrocki, Asembler i koncepcja von Neumanna
DEBUG - inna sesja Dziwne ! 6 + 6 = 18 czy 12? J. Nawrocki, Asembler i koncepcja von Neumanna
Arytmetyka heksadecymalna Cyfry 0 do 9 A 10 B 11 C 12 D 13 E 14 F 15 J. Nawrocki, Asembler i koncepcja von Neumanna
Arytmetyka heksadecymalna System dziesiętny 12310 1*102 + 2* 101 + 3* 100 = 100 + 20 + 3 J. Nawrocki, Asembler i koncepcja von Neumanna
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, Asembler i koncepcja von Neumanna
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, Asembler i koncepcja von Neumanna
Arytmetyka heksadecymalna Dodawanie metodą bezpośrednią 1 28 F + 37 F E F 16 + F 16 = 1510 + 1510= 3010 : 1610 = 1 reszta 1410= 1 reszta E 16 J. Nawrocki, Asembler i koncepcja von Neumanna
Arytmetyka heksadecymalna ax = bx + cx; prog move MOV c, z segment assume cs: prog start: c = z; prog J. Nawrocki, Asembler i koncepcja von Neumanna mov ax, bx add ax, cx int 3 ends end start
Arytmetyka heksadecymalna ax = bx – cx; prog subtract SUB c, z segment assume cs: prog start: c = c – z; prog J. Nawrocki, Asembler i koncepcja von Neumanna 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, Asembler i koncepcja von Neumanna sub bx, cx mov ax, bx int 3 ends end start
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, Asembler i koncepcja von Neumanna
Liczby ujemne 4 bity kod(b) 15 b 7 J. Nawrocki, Asembler i koncepcja von Neumanna
Liczby ujemne 3 bity Liczba 3 Kod 3 2 2 1 1 0 0 -1 7 -2 6 -3 5 -4 4 J. Nawrocki, Asembler i koncepcja von Neumanna 23 - |b|
Liczby ujemne 16 bitów 1111 FFFF = -1 + 2 0001 1 32767 7 FFF . . . 1 1 0 0 -1 FFFF . . . -32767 8001 -32768 8000 J. Nawrocki, Asembler i koncepcja von Neumanna
Liczby ujemne Zmiana znaku 5 -5 -7 7 1. Zaneguj bity (0 1, 1 0) 2. Dodaj 1 FFFF = -1 0000 0001 J. Nawrocki, Asembler i koncepcja von Neumanna 0 F 1 E 2 D 3 C 4 B 5 A 6 9 7 8 F - cyfra
Liczby ujemne ax = - ax; prog negation NEG c c = -c; segment assume cs: prog start: prog J. Nawrocki, Asembler i koncepcja von Neumanna neg ax int 3 ends end start
Koncepcja von Neumanna John Luis von Neumann Ur. : 28. 12. 1903 w Budapeszcie Zm. : 8. 07. 1957 w Waszyngtonie 1930: Princeton University 1933: Institute for Advanced Studies J. Nawrocki, Asembler i 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, Asembler i koncepcja von Neumanna
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) Przykład 111 221 312 421 52 63 J. Nawrocki, Asembler i koncepcja von Neumanna 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, Asembler i koncepcja von Neumanna 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 Mov. Reg ax bx Sub. Reg ax cx Int J. Nawrocki, Asembler i koncepcja von Neumanna 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 Mov. Reg ax bx Sub. Reg ax cx Int ax 0 bx 5 cx 3 1 a. Ustawienie licznika na następny rozkaz J. Nawrocki, Asembler i koncepcja von Neumanna
Koncepcja von Neumanna ax = bx – cx; 10 13 13 Licznik rozkazów 16 18 2 0 1 4 0 2 6 3 Mov. Reg ax bx Sub. Reg ax cx Int ax 0 5 bx 5 2. Wykonanie rozkazu J. Nawrocki, Asembler i koncepcja von Neumanna cx 3
Rozkazy skoku Skoki warunkowe PSW. . . SF ZF. . . CMP c, z Co. MPare JLE Jump if Less or Equal e . . . e: J. Nawrocki, Asembler i koncepcja von Neumanna if (c > z) {. . . }
Rozkazy skoku Skoki warunkowe - przykład ax = min {bx, cx}; ax = bx; ax = cx; J. Nawrocki, Asembler i koncepcja von Neumanna
Rozkazy skoku Skoki warunkowe - przykład ax = min {bx, cx}; mov ax, bx ax = bx; if (ax > cx) { ax = cx; ok: int 3 J. Nawrocki, Asembler i koncepcja von Neumanna }
Rozkazy skoku Skoki warunkowe jump if equal jump if not less jump if greater jump if less JE e JNL e JG e JL e J. Nawrocki, Asembler i koncepcja von Neumanna if (c != z). . . if (c == z). . . if (c <= z). . . if (c >= z). . .
Rozkazy skoku Skok bezwarunkowy pocz: CMP c, z jump while (c == z) JNE kon { . . . JMP pocz } kon: J. Nawrocki, Asembler i koncepcja von Neumanna c=z Tak . . . Nie
Rozkazy skoku Skok bezwarunkowy CMP c, z if (c > z) JNG els { ins 1 JMP kon } else { els: ins 2 kon: } J. Nawrocki, Asembler i koncepcja von Neumanna c=z Tak ins 1 Nie ins 2
Rozkazy skoku Skok bezwarunkowy - przykład ax = nwd (ax, bx); while (ax != bx) ax bx Nie { Tak if (ax > bx){ ax > bx Nie ax-= bx; }else{ Tak bx-= ax; ax=ax-bx bx=bx-ax } } J. Nawrocki, Asembler i koncepcja von Neumanna
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) kon { els if (ax > bx){ ax, bx ax-= bx; od }else{ bx, ax bx-= ax; whi } 3 } J. Nawrocki, Asembler i koncepcja von Neumanna
Podsumowanie Rejestr - rodzaj zmiennej DEBUG - interfejs z Wreszcie! użytkownikiem Reprezentacja heksadecymalna Podstawowe instrukcje arytmetyki liczb całkowitych Instrukcje skoku Pisanie programów w języku asemblera jest trudniejsze niż w języku wysokiego J. Nawrocki, Programowanie komputerów IBM poziomu PC w języku asemblera metodą J. Nawrocki, Asembler i koncepcja von Neumanna systematyczną, WPP, 1991.
- Slides: 48