Wstęp do informatyki - Katedra Informatyki > Home
Transkrypt
Wstęp do informatyki - Katedra Informatyki > Home
Program Komputer jest urządzeniem, którego działanie opiera się na wykonywaniu przez procesor instrukcji pobieranych z pamięci operacyjnej (instrukcje procesora – kod programu) Instrukcje procesora odnoszą się do prostych operacji na wewnętrznych rejestrach procesora oraz operacji odczytu/zapisu komórek pamięci operacyjnej i układów we/wy Wstęp do informatyki Interakcja między maszyną i komputerem odbywa się za pośrednictwem układów we/wy i opiera się na konwersji danych zrozumiałych dla człowieka na dane zakodowane w formie cyfrowej (i odwrotnie). Programowanie komputera - asembler CPU ROM, RAM ALU Cezary Bolek [email protected] Uniwersytet Łódzki Rejestry procesora We/Wy Wydział Zarządzania Katedra Informatyki Wstęp do informatyki Język wysokiego poziomu (C, Pascal, Java, etc.) Kompilacja (kompilator) ... for (i=1; i<10, i++) { n=10+x*2; } ... Program w języku asemblera składa się z linii zawierających instrukcję do wykonania przez procesor. Cechy Instrukcje asemblera są bardzo prostymi operacjami, na liczbach zapisanych w rejestrach roboczych lub komórkach pamięci za pomocą ALU. Instrukcje języka wysokiego poziomu, zmienne, operatory arytmetyczne, swobodny układ tekstu programu, etc.. Linia programu w języku asemblera składa się z pól: ... Język niskiego poziomu: asembler np. MOV AL,FF wait: SUB AL,1 JNS wait ... Instrukcje asemblera: mnemoniki, nazwy rejestrów, adresy komórek pamięci, etykiety linii, sztywny układ tekstu programu ... F5 58 03 ... Bajty zapisane w pliku lub w pamięci komputera, które odpowiadają kolejnym instrukcjom dla procesora Wstęp do informatyki wait: MOV AL,BL etykieta mnemonik (pole moŜe (instrukcja) być puste) Asemblacja (asembler) Kod maszynowy 2 Asembler Języki programowania Przykład Cezary Bolek <[email protected]> ; załaduj do AL wartość z BL operandy mnemonika komentarz Mnemoniki są łatwymi do zapamiętania skrótami operacji procesora. Wszystkie liczby w programie są liczbami szesnastkowymi ! Cezary Bolek <[email protected]> 3 Wstęp do informatyki Cezary Bolek <[email protected]> 4 1 Instrukcja przesłań Postać programu w pamięci 0 instr_1 instr_2 ... instr_k-1 instr_k END n Instrukcje programu umieszczone są w pamięci i mogą zajmować róŜną liczbę bajtów. Operacje przesyłania wartości MOV Program (w symulatorze) uruchamiany jest zawsze od instrukcji umieszczonej pod adresem 0 X,Y mov AL,13 mov DL,A5 wartość lub miejsce źródłowe (co lub skąd) miejsce przeznaczenia (dokąd) Program musi kończyć się dyrektywą END. Wszystkie instrukcje umieszczone po tej dyrektywie są ignorowane ; move Instrukcja przesłania MOV nie wpływa na bity rejestru SR Wstęp do informatyki Cezary Bolek <[email protected]> 5 Wstęp do informatyki Cezary Bolek <[email protected]> Instrukcje arytmetyczne 6 Instrukcje logiczne Operacje logiczne (AND, OR, XOR) Operacje arytmetyczne (ADD, SUB, MUL, DIV) ADD AND 1 operand i miejsce umieszczenia wyniku 2 operand (wartość lub miejsce) 1 operand i miejsce umieszczenia wyniku add AL,BL mul DL,04 A B AND 0 00 0 01 0 10 1 11 Operacje inkrementacji (zwiększenia o 1) rejestru INC X,Y or AL,BL xor DL,04 X,Y X ;X←X+1 inc BL 2 operand (wartość lub miejsce) XOR 0 1 1 0 OR 0 1 1 1 A B AND OR XOR = 01001011 = 11011101 = 01001001 = 11011111 = 10010110 Operacje dekrementacji (zmniejszenia o 1) rejestru DEC X ;X←X-1 Logical negation operation (bit negation) dec DL NOT Wstęp do informatyki Cezary Bolek <[email protected]> 7 Wstęp do informatyki X not AL A NOT = 01010101 = 10101010 Cezary Bolek <[email protected]> 8 2 Instrukcje przesunięć Instrukcje rotacji Operacje przesunięć bitowych w prawo (SHR) i w lewo (SHL) SHR SHL X X Operacje przesunięć rotacyjnych w prawo (ROR) i w lewo (ROL) shr BL shl DL ;shift right ;shift left 0 SHL 0 SHR Wstęp do informatyki A SHL = 00001111 = 00011110 A SHL = 11110000 = 11100000 A SHR = 00001111 = 00000111 A SHR = 11110000 = 01111000 Cezary Bolek <[email protected]> ROR ROL ROR 9 Wstęp do informatyki S O Z MOV 1 – gdy instrukcja arytmetyczna zakończyła się błędem (w sensie arytmetyki U2) 0 – gdy instrukcja arytmetyczna powiodła się 1 – gdy procesor moŜe przyjąć przerwanie 0 – gdy procesor nie przyjmuje przerwań BL,A AL,BL Cezary Bolek <[email protected]> A ROR = 00001111 = 10000111 A ROR = 11110000 = 01111000 10 I S O Z SR = 0 0 0 0 0 0 0 0 I S O Z SR = 0 0 0 0 0 0 0 0 ; Dodaj BL do AL, wynik będzie w AL AL = 0 0 0 0 1 1 0 0 BL = 0 0 0 0 1 0 1 0 Wstęp do informatyki = 11110000 = 11100001 ; Zapisz liczbę 10 do rejestru BL BL = 0 0 0 0 1 0 1 0 ADD bit I (interrupt) A ROL ; Zapisz liczbę 2 do rejestru AL AL = 0 0 0 0 0 0 1 0 bit O (overflow): 1 – gdy instrukcja dała wynik ujemny (w kodzie U2) 0 – gdy instrukcja dała wynik nieujemny AL,2 BL = 0 0 0 0 0 0 0 0 1 – gdy instrukcja dała wynik 0 0 – gdy wynik instrukcji jest róŜny od zera bit S (sign): = 00001111 = 00011110 Cezary Bolek <[email protected]> AL = 0 0 0 0 0 0 1 0 Bity rejestru SR ustawiane są zgodnie z wynikiem ostatnio wykonanej instrukcji arytmetycznej, logicznej lub przesunięć: bit Z (zero): A ROL Przykład 1 MOV I ror BL rol DL ; rotate right ; rotate left ROL Rejestr SR i instrukcje arytmetyczne SR X X I S O Z SR = 0 0 0 0 0 0 0 0 Wynikiem instrukcji ADD jest liczba Ch (12d) w rejestrze AL. Wynik jest niezerowy (Z=0), poprawny (O=0), nieujemny (S=0) 11 Wstęp do informatyki Cezary Bolek <[email protected]> 12 3 Przykład 2 MOV CL,F Przykład 3 ; Zapisz liczbę 15 do rejestru CL CL = 0 0 0 0 1 1 1 1 DL = 0 0 0 0 0 0 0 0 I SO Z SR = 0 0 0 0 0 0 0 0 MOV AL,0 ; wyzeruj rejestr AL AL = 0 0 0 0 0 0 0 0 MOV DL,F ; Zapisz liczbę 15 do rejestru DL CL = 0 0 0 0 1 1 1 1 DL = 0 0 0 0 1 1 1 1 MUL DL,CL I S O Z SR = 0 0 0 0 0 0 0 0 DEC I SO Z SR = 0 0 0 0 0 0 0 0 DL = 1 1 1 0 0 0 0 1 ; zmniejsz wartość AL o 1 AL = 1 1 1 1 1 1 1 1 ; PomnóŜ CL i DL, wynik będzie w DL CL = 0 0 0 0 1 1 1 1 AL I S O Z SR = 0 0 0 0 1 0 0 0 Wynikiem instrukcji DEC jest liczba –1(U2) w rejestrze AL. Wynik jest niezerowy (Z=0), poprawny (O=0), ujemny (S=1) I SO Z SR = 0 0 0 0 1 1 0 0 Wynikiem instrukcji MUL jest liczba –31(U2) w rejestrze DL. Wynik jest niezerowy (Z=0), niepoprawny (O=1), ujemny (S=1) Wstęp do informatyki Cezary Bolek <[email protected]> 13 Wstęp do informatyki Cezary Bolek <[email protected]> Przykład 4 MOV AL,FF INC AL Przykład 5 MOV ; zapisz –1(U2) do rejestru AL AL = 1 1 1 1 1 1 1 1 SUB Cezary Bolek <[email protected]> ; Zapisz liczbę –128(U2) do rejestru AL AL,2 I SO Z SR = 0 0 0 0 0 0 0 0 ; Odejmij 2 od AL, wynik będzie w AL AL = 0 1 1 1 1 1 1 0 I SO Z SR = 0 0 0 0 0 0 1 0 Wynikiem instrukcji INC jest liczba 0 w rejestrze AL. Wynik jest zerowy (Z=1), poprawny (O=0), nieujemny (S=0) Wstęp do informatyki AL,80 AL = 1 0 0 0 0 0 0 0 I SO Z SR = 0 0 0 0 0 0 0 0 ; zwiększ wartość AL o 1 AL = 0 0 0 0 0 0 0 0 14 I S O Z SR = 0 0 0 0 0 1 0 0 Wynikiem instrukcji SUB jest liczba 126(U2) w rejestrze AL. Wynik jest niezerowy (Z=0), niepoprawny (O=1), nieujemny (S=0) 15 Wstęp do informatyki Cezary Bolek <[email protected]> 16 4 Rejestr SR i instrukcje przesunięć Rejestr SR i instrukcje logiczne Operacje logiczne na bitach rejestrów nie mają sensu arytmetycznego, dlatego bit O (overflow) nie jest zmieniany. Operacje przesunięć na bitach rejestrów nie mają sensu arytmetycznego, dlatego bit O (overflow) nie jest zmieniany. Bity S i Z są ustawiane tak samo jak dla instrukcji arytmetycznych. Bity S i Z są ustawiane tak samo jak dla instrukcji arytmetycznych. MOV AL,7F ; Zapisz liczbę 127 do rejestru AL AL = 0 1 1 1 1 1 1 1 80 = 1 0 0 0 0 0 0 0 OR AL,80 MOV I SO Z SR = 0 0 0 0 0 0 0 0 SHL I SO Z SR = 0 0 0 0 1 0 0 0 Wstęp do informatyki Cezary Bolek <[email protected]> 17 Wstęp do informatyki minus: stop: np. AL,5 stop AL,5 BL,FF loop: minus: ... MOV OUT JMP ... AL,55 1 loop Cezary Bolek <[email protected]> 18 Cezary Bolek <[email protected]> JZ JNZ next next ; skocz jeśli Z=1 (ostatnia instrukcja dała wynik 0) ; skocz jeśli Z=0 (skocz jeśli wynik jest niezerowy) JS JNS next next ; skocz jeśli S=1 (skocz jeśli wynik ujemny) ; skocz jeśli S=0 (skocz jeśli wynik nieujemny) JO JNO next next ; skocz jeśli O=1 (skocz jeśli wynik niepoprawny) ; skocz jeśli O=0 (skocz jeśli wynik poprawny) Instrukcje skoków warunkowych stosuje się najczęściej do realizacji cykli w programach nieskończona pętla Wstęp do informatyki I SO Z SR = 0 0 0 0 0 0 1 0 Instrukcja testuje wartość odpowiedniego bitu SR i wykonuje się (wykonuje skok do podanej etykiety) jeśli warunek określony mnemonikiem instrukcji jest spełniony, w przeciwnym wypadku skok się nie wykonuje. Instrukcja JMP nie zmienia bitów rejestru SR plus: ; Przesuń bity AL o jedną pozycję w lewo Instrukcje skoków warunkowych nie zmieniają bitów rejestru SR, ale ich wykonanie zaleŜy od stanu poszczególnych bitów SR !!! instrukcja skoku bezwarunkowego do instrukcji o etykiecie next: ... ADD JMP SUB MOVE ... I SO Z SR = 0 0 0 0 0 0 0 0 Instrukcje skoków warunkowych next np. AL AL = 0 0 0 0 0 0 0 0 Instrukcje skoku bezwarunkowego JMP ; Zapisz liczbę –128(U2) do rejestru AL AL = 1 0 0 0 0 0 0 0 ; Przeprowadź operację OR na bitach AL i liczby 80h AL = 1 1 1 1 1 1 1 1 AL,80 19 Wstęp do informatyki Cezary Bolek <[email protected]> 20 5 Przykład ... MOV DEC JNZ ... loop: Instrukcje porównań AL← ←7F AL,7F AL loop error: CMP AL← ← AL-1 cykl wykona się dokładnie 127 razy (np. pętla opóźniająca) ... MUL JO ... ... ... Operacje porównań N X,Y 1 operand Z=1 cmp AL,77 cmp AL,BL ; compare 2 operand T AL,BL error ok: error: ... MUL JNO JMP ... ... ... Instrukcja porównania CMP wykonuje odejmowanie operandów (X-Y), a następnie ustawia bity rejestru SR zgodnie z wynikiem operacji. Wynik operacji nie jest zapisywany. AL,BL ok error Instrukcja CMP słuŜy do wykrywania konkretnej wartości w rejestrze CMP wpływa tylko na bity S (znak) i Z (zero), a więc pozwala stwierdzić a) czy X<Y (bit S=1) b) czy X=Y (Z=1) wykrywanie i obsługa błędów podczas operacji arytmetycznych Wstęp do informatyki Cezary Bolek <[email protected]> 21 Przykład loop: nowy cyfra ... IN CMP JNZ ... ... IN CMP JS CMP JNS ... 07 AL,0D loop Wstęp do informatyki Cezary Bolek <[email protected]> Instrukcje dostępu do portów Dotyczy tylko programu symulatora uŜywanego w laboratorium cykl oczekiwania na odczyt wartości 13 z portu 7 (np. znak Enter z klawiatury) ROM, RAM CPU 0 07 AL,30 nowy AL,40 nowy ; czytaj kod ASCII znaku z klawiatury ; sprawdź czy kod jest >= ‘0’ ; znak nie jest cyfrą, czytaj nowy znak ; sprawdź czy kod jest < ‘9’ ; znak nie jest cyfrą, czytaj nowy znak fragment programu wczytującego z klawiatury znaki cyfr, ignorujący inne wprowadzone znaki sygnalizator świetlny 1 wyświetlać cyfrowy 2 termostat (grzejnik) 3 ruch robota 4 Cezary Bolek <[email protected]> termostat (temperatura) silnik krokowy 5 6 winda (odczyt klawiatury i połoŜenia) klawiatura alfanumeryczna 7 klawiatura alfanumeryczna (odczyt) 8 klawiatura numeryczna 23 klawiatura winda (sterowanie napędem) Out Wstęp do informatyki 22 Wstęp do informatyki numer portu klawiatura numeryczna (odczyt) In Cezary Bolek <[email protected]> 24 6 Instrukcje dostępu do portów IN numer instrukcja odczytu wartości z portu o podanym numerze, wartość jest umieszczana w rejestrze AL OUT numer instrukcja wysłania wartości do portu o podanym numerze, wartość musi być wcześniej umieszczona w rejestrze AL MOV OUT AL,55 01 zapalenie kombinacji świateł na sygnalizatorze ulicznym (port 01) Wstęp do informatyki IN CMP JZ 0 AL,1B end wczytanie znaku z klawiatury i jeśli był to znak Escape, to skok do zakończenia programu Cezary Bolek <[email protected]> 25 7