Magistrala systemowa Jerzy Nawrocki, Jerzy Nawrocki Wydział Informatyki Politechnika Poznańska jerzy.nawrocki@put.poznan.pl Cel wykładu Asembler i koncepcja von Neumanna Wprowadzenie do programowania na poziomie języka asemblera Przedstawienie koncepcji von Neumanna Asembler i koncepcja von Neumanna () Plan wykładu Organizacja komputera IBM PC Prosty program DEBUG Arytmetyka heksadecymalna Liczby ujemne Mikroprocesor Pamięć Urządzenie wejścia-wyjścia Urządzenie wejścia-wyjścia Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Architektura typowego procesora Rejestr -bitowy Układ sterowania Licznik instr. Jednostka arytmetycznologiczna Rejestr Rejestr Rejestr Rejestr Słowo stanu Rozkaz pamiętania Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna
Jerzy Nawrocki, Prosty program - Rejestry Prosty program Instrukcja AX BX CX 7 DX SI 8 DI int,,, dx, si, di; ADD p, z = + + ; add, add, p = p + z; Asembler i koncepcja von Neumanna (7) Asembler i koncepcja von Neumanna (8) Sumator -bitowy Prosty program Instrukcja A B C C A B C A B C A B p = p + z; Sumator Sumator Sumator Półsumator = + + ; C C C C add, S S S S add, Asembler i koncepcja von Neumanna (9) Asembler i koncepcja von Neumanna () Struktura najprostszego programu Przykład programu Dlaczego tak? Czasami najwięcej rzucają cienia właśnie wyjaśnienia. code segment assume cs: code instrukcje code ends Asembler i koncepcja von Neumanna () = + + ; prog segment assume cs: prog add, add, int prog ends Koniec pracy Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna
Jerzy Nawrocki, Kompilacja pierwszy krok Uproszczony schemat kompilacji Zapisz program w pliku prog.asm prog.obj prog.asm MASM LINK prog.exe prog.lst Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Kompilacja MASM Uproszczony schemat kompilacji Polecenie prog.obj prog.asm MASM LINK prog.exe prog.lst Błędy Ostrzeżenia Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Kompilacja Listing kompilacji Uproszczony schemat kompilacji prog.lst prog.obj prog.asm MASM LINK prog.exe prog.lst Numer wiersza Adres względny Kod przekładu Tekst programu Asembler i koncepcja von Neumanna (7) Asembler i koncepcja von Neumanna (8) Asembler i koncepcja von Neumanna
Jerzy Nawrocki, Kompilacja LINK Uruchomienie programu DEBUG Polecenie Nieistotne ostrzeżenie Asembler i koncepcja von Neumanna (9) Asembler i koncepcja von Neumanna () Plan wykładu DEBUG Najważniejsze komendy Prosty program DEBUG Arytmetyka heksadecymalna Liczby ujemne R rejestr G Q (Register) (Go) (Quit) Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Tekst programu raz jeszcze prog segment assume cs: prog add, add, int prog ends Asembler i koncepcja von Neumanna () DEBUG - przykład sesji -r AX : -r BX : -r Wynik CX : -g AX= BX= CX= DX= SP= DS=98C ES=98C SS=99C CS=99C IP= 99C: CC INT -q Nast. instrukcja Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna
Jerzy Nawrocki, Częściowe podsumowanie DEBUG - inna sesja Hura! Ale to proste! Umiemy już: napisać program, skompilować go, uruchomić. Dziwne! + + = 8 czy? Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Plan wykładu Arytmetyka dziesiętna Prosty program DEBUG Arytmetyka heksadecymalna Liczby ujemne * + * + * = + + Asembler i koncepcja von Neumanna (7) Asembler i koncepcja von Neumanna (8) Arytmetyka binarna Arytmetyka heksadecymalna Aha! * + * + * = 8 = + + = * + * = + = 8 Asembler i koncepcja von Neumanna (9) Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna
Jerzy Nawrocki, Arytmetyka heksadecymalna Cyfry Arytmetyka heksadecymalna Cyfry do 9 A B C D E F BAD * + * + * = 8 + + = 989 Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Dodawanie metodą pośrednią Dodawanie metodą bezpośrednią 8F + 7F * + 8* + * + 7* + + 89 E * + * + 8F + 7F E F + F = + = : = reszta = reszta E Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Dodawanie metodą bezpośrednią Dodawanie metodą bezpośrednią 8F + 7F E + 8 + 7 = = : = reszta = reszta 8F + 7F E + + = = : = reszta = reszta Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna
Jerzy Nawrocki, Sprawdzenie za pomocą programu = + + ; Sprawdzenie za pomocą programu = + + ; 8F + 7F E Nie można prościej? Asembler i koncepcja von Neumanna (7) Asembler i koncepcja von Neumanna (8) Arytmetyka heksadecymalna Arytmetyka heksadecymalna = + ; = + ; move MOV c, z c = z; prog segment assume cs: prog mov, add, int prog ends 8F + 7F E Asembler i koncepcja von Neumanna (9) Asembler i koncepcja von Neumanna () Instrukcja MOV Poziom rejestrów Arytmetyka heksadecymalna = ; Rozkaz pamiętania subtract SUB c, z c = c z; prog segment assume cs: prog mov, sub, int prog ends Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna 7
Jerzy Nawrocki, Arytmetyka heksadecymalna Instrukcja SUB = ; = ; A czy można tak? prog segment assume cs: prog sub, mov, int prog ends mov, sub, int? sub, mov, int Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Instrukcja SUB Plan wykładu = ; mov, sub, int? sub, mov, int? Unikaj niekontrolowanych efektów ubocznych! Asembler i koncepcja von Neumanna () Prosty program DEBUG Arytmetyka heksadecymalna Liczby ujemne Asembler i koncepcja von Neumanna () Liczby ujemne bity Liczby ujemne bity = = if (a< && b>=) if (abs(a) > abs(b)) { ResultAbs= abs(a) abs(b); ResultSign=Ujemny;... Asembler i koncepcja von Neumanna (7) b 8 7 7 8 9 b<= b = Code(b) 8 b<= Code(b) = 8 + b Code(b) Asembler i koncepcja von Neumanna (8) Asembler i koncepcja von Neumanna 8
Jerzy Nawrocki, Liczby ujemne bity Liczby ujemne bity b 8 7 b 8 7 7 8 9 Code(b) 7 8 9 Code(b) b<= b = Code(b) b<= Code(b) = b b<= b = n Code(b) b<= Code(b) = n b Asembler i koncepcja von Neumanna (9) Asembler i koncepcja von Neumanna () Uzupełnienie do Liczby ujemne bity b jeśli b Code (b) = n - b jeśli b < n bitów daje przedział: [- n-, n- - ] Liczba Kod - 7 - - - - b Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Liczby ujemne bitów Negacja algebraiczna (zmiana znaku liczby) FFFF + = - + 77 7FFF...... - FFFF...... -77 8-78 8 - -7 7. Zaneguj bity (, ). Dodaj FFFF = - F E D C B A 9 7 8 F - cyfra Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna 9
Jerzy Nawrocki, Negacja algebraiczna (zmiana znaku liczby) Negacja algebraiczna (zmiana znaku liczby) = - ; F. Zaneguj bity (, ). Dodaj FFFD FFFE = - E D C B A 9 7 8 F - cyfra negation NEG c c = -c; prog segment assume cs: prog neg int prog ends Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Negacja algebraiczna (zmiana znaku liczby) Plan wykładu = - ; Prosty program DEBUG Arytmetyka heksadecymalna Liczby ujemne Asembler i koncepcja von Neumanna (7) Asembler i koncepcja von Neumanna (8) - Problem John Luis von Neumann Ur.: 8..9 w Budapeszcie Zm.: 8.7.97 w Waszyngtonie 9: Princeton University 9: Institute for Advanced Studies Specjalizowane kalkulatory (obliczanie toru pocisku) a uniwersalne komputery Asembler i koncepcja von Neumanna (9) Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna
Jerzy Nawrocki, Prosty program Sumator -bitowy A B A B A B A B = + + ; add, Sumator C Sumator C Sumator C Półsumator add, C C C C S S S S Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Program jako dane przechowywane w pamięci Dwie fazy:. Ściąganie rozkazu i jego dekodowanie. Wykonanie rozkazu Specjalny rejestr (licznik rozkazów) pokazuje następny rozkaz do wykonania. Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Przykładowe kody rozkazów = ; Kod Rozkaz Przykład MovRegCon(R, C) R MovRegReg(Rd, Rs) R R AddRegReg(Rd, Rs) R R+R SubRegReg(Rd, Rs) R R R NegReg(R) R - R Int(C) prog segment assume cs: prog mov, sub, int prog ends Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna () Asembler i koncepcja von Neumanna
Jerzy Nawrocki, = ; = ; Licznik rozkazów Int 8 MovRegReg SubRegReg. Ściągnięcie rozkazu z pamięci Licznik rozkazów Int 8 MovRegReg SubRegReg a. Ustawienie licznika na następny rozkaz Asembler i koncepcja von Neumanna (7) Asembler i koncepcja von Neumanna (8) = ; = ; Licznik rozkazów Int 8 MovRegReg SubRegReg. Wykonanie rozkazu Licznik rozkazów Int 8 MovRegReg SubRegReg. Ściągnięcie rozkazu z pamięci Asembler i koncepcja von Neumanna (9) Asembler i koncepcja von Neumanna (7) = ; = ; Licznik rozkazów Int 8 MovRegReg SubRegReg a. Ustawienie licznika na następny rozkaz Licznik rozkazów Int 8 MovRegReg SubRegReg. Wykonanie rozkazu Asembler i koncepcja von Neumanna (7) Asembler i koncepcja von Neumanna (7) Asembler i koncepcja von Neumanna
Jerzy Nawrocki, Plan wykładu Prosty program DEBUG Arytmetyka heksadecymalna Liczby ujemne Skoki warunkowe PSW... SF ZF... CoMPare CMP c, z Jump if Less or Equal JLE e... e: if (c > z) {... Asembler i koncepcja von Neumanna (7) Asembler i koncepcja von Neumanna (7) Skoki warunkowe - przykład Skoki warunkowe - przykład = min {, ; = min {, ; = ; if ( > ) { = ; mov, cmp, jle ok mov, ok: int = ; if ( > ) { = ; Asembler i koncepcja von Neumanna (7) Asembler i koncepcja von Neumanna (7) Skoki warunkowe Skok bezwarunkowy pocz: jump if equal JE e if (c!= z)... jump if not equal JNE e if (c == z)... jump if not less JNL e if (c < z)... jump if greater JG e if (c <= z)... CMP c, z JNE kon... while (c == z) {... Tak c = z... Nie jump if less JL e if (c >= z)... jump JMP pocz kon: Asembler i koncepcja von Neumanna (77) Asembler i koncepcja von Neumanna (78) Asembler i koncepcja von Neumanna
Jerzy Nawrocki, CMP c, z JNG els ins JMP kon els: ins kon: Skok bezwarunkowy if (c > z) { c = z Tak Nie ins ins ins else { ins Asembler i koncepcja von Neumanna (79) Tak > Tak =- Skok bezwarunkowy - przykład = nwd (, ); while (!= ) Nie { if ( > ){ Nie -= ; else{ =- -= ; Asembler i koncepcja von Neumanna (8) Skok bezwarunkowy - przykład whi: cmp, je kon jle els sub, jmp od els: sub, od: jmp whi kon: int = nwd (, ); while (!= ) { if ( > ){ -= ; else{ -= ; Asembler i koncepcja von Neumanna (8) Podsumowanie Podsumowanie Asembler i koncepcja von Neumanna (8) Podsumowanie Literatura Rejestr - rodzaj zmiennej DEBUG - interfejs z 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 poziomu Asembler i koncepcja von Neumanna (8) J.Nawrocki, Programowanie komputerów IBM PC w języku asemblera metodą systematyczną, WPP, 99. Asembler i koncepcja von Neumanna (8) Asembler i koncepcja von Neumanna