Architektura Systemów Komputerowych, Wydział Informatyki, ZUT

Podobne dokumenty
Rejestry procesora. Nazwa ilość bitów. AX 16 (accumulator) rejestr akumulatora. BX 16 (base) rejestr bazowy. CX 16 (count) rejestr licznika

Sterowanie pracą programu

Programowanie niskopoziomowe

Programowanie komputera

Architektura komputerów. Asembler procesorów rodziny x86

Sprzęt i architektura komputerów

organizacja procesora 8086

Załącznik do ćwiczenia w środowisku MASM32 wersji 10 Sterowanie przebiegiem wykonania programu

1. Operacje logiczne A B A OR B

Sprzęt i architektura komputerów

CPU ROM, RAM. Rejestry procesora. We/Wy. Cezary Bolek Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki

Architektura systemów komputerowych Laboratorium 8 Symulator SMS32 Instrukcje skoku i pętle

CPU. Architektura FLAGS Bit: dr Paweł Kowalczyk; DPTNS, KFCS UŁ. SI 16 bit. 16 bit. 16 bit.

Struktura i działanie jednostki centralnej

Architektura systemów komputerowych Laboratorium 13 Symulator SMS32 Operacje na bitach

Architektura systemów komputerowych Laboratorium 14 Symulator SMS32 Implementacja algorytmów

J. Duntemann Zrozumieć Assembler Leo J. Scanlon Assembler 8086/8088/80286 S. Kruk Programowanie w Języku Assembler

Procesor Intel 8086 model programisty. Arkadiusz Chrobot

Zadanie Zaobserwuj zachowanie procesora i stosu podczas wykonywania następujących programów

Programowanie mikrokontrolera 8051

Architektura Systemów Komputerowych

Podstawy programowania w języku C i C++

UTK Można stwierdzić, że wszystkie działania i operacje zachodzące w systemie są sterowane bądź inicjowane przez mikroprocesor.

Programowanie Niskopoziomowe

Procesor Intel 8086 model programisty. Arkadiusz Chrobot

Podstawy techniki cyfrowej Mikroprocesory. Mgr inż. Bogdan Pietrzak ZSR CKP Świdwin

Architektura komputerów

Technika mikroprocesorowa I Wykład 2

Lista instrukcji procesora 8051 część 2 Skoki i wywołania podprogramów, operacje na stosie, operacje bitowe

Jerzy Nawrocki, Wprowadzenie do informatyki

Architektura komputerów

Spis treści JĘZYK C - OPERATORY BITOWE. Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32

Języki i paradygmaty programowania

Wstęp do informatyki. System komputerowy. Magistrala systemowa. Architektura komputera. Cezary Bolek

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

Różności w C++ Marek Pudełko

Architektura Systemów Komputerowych

Architektura Systemów Komputerowych. Jednostka ALU Przestrzeń adresowa Tryby adresowania

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

Wprowadzenie do Architektury komputerów. Asembler procesorów rodziny x86

Przedmiot : Programowanie w języku wewnętrznym. Ćwiczenie nr 4

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy

INSTRUKCJE Instrukcje przeniesienia: Instrukcje konwersji: Arytmetyczne instrukcje:

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Mikrooperacje. Mikrooperacje arytmetyczne

Wstęp do Reverse engineeringu

5. Mikroprocesory 8086 i 8088

Programowanie w asemblerze Architektura procesora

Zestaw 3. - Zapis liczb binarnych ze znakiem 1

PRYWATNA WYŻSZA SZKOŁA BUSINESSU, ADMINISTRACJI I TECHNIK KOMPUTEROWYCH S Y L A B U S

Architektura typu Single-Cycle

Architektura komputerów. Komputer Procesor Mikroprocesor koncepcja Johna von Neumanna

Lista rozkazów mikrokontrolera 8051 część pierwsza: instrukcje przesyłania danych, arytmetyczne i logiczne

START: ; start programu od adresu 0100H ; zerowanie komórek od 01H do 07FH ( 1 dec dec)

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

Adam Kotynia, Łukasz Kowalczyk

Lista instrukcji mikroprocesora Programowanie w assemblerze

Magistrala systemowa (System Bus)

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

2 Literatura. c Dr inż. Ignacy Pardyka (Inf.UJK) ASK MP.02 Rok akad. 2011/ / 24

Zuzanna Hartleb i Artur Angiel

Kod znak-moduł. Wartość liczby wynosi. Reprezentacja liczb w kodzie ZM w 8-bitowym formacie:

Programowanie Niskopoziomowe

Wprowadzenie do Architektury komputerów. Asembler procesorów rodziny x86

AGH Akademia Górniczo-Hutnicza w Krakowie Katedra Elektroniki

Metody Realizacji Języków Programowania

architektura komputerów w 1 1

PODSTAWOWE ELEMENTY ASEMBLERA TRYBY ADRESOWANIA. OPERATORY ASEMBLERA

end start ; ustawienie punktu startu programu i koniec instrukcji w assemblerze.

Protokół komunikacyjny sondy cyfrowej CS-26/RS-485 (lub RS-232)

Asembler - język maszynowy procesora

Lista rozkazów mikrokontrolera 8051

Algorytm mnożenia sekwencyjnego (wariant 1)

Laboratorium 1: Wprowadzenie do środowiska programowego. oraz podstawowe operacje na rejestrach i komórkach pamięci

Arytmetyka stałopozycyjna

Wprowadzenie do architektury komputerów. Model programowy procesora i jego struktura Procesory CISC i RISC

Informacje wstępne. Historia Maszyna Turinga

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

Programowanie Niskopoziomowe

Procesory rodziny x86. Dariusz Chaberski

Mikrokontroler ATmega32. Język symboliczny

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

1. Asembler i wstawki asemblerowe w C

Spis treści JĘZYK C - INSTRUKCJA SWITCH, OPERATORY BITOWE. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF05

while(wyrażenie) instrukcja

Operatory AND, OR, NOT, XOR Opracował: Andrzej Nowak Bibliografia:

Podstawy programowania w języku C

Niektóre piny mogą pełnić różne role, zależnie od aktualnej wartości sygnałów sterujących.

Organizacja typowego mikroprocesora

Architektura komputerów

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Programowanie komputerowe. Zajęcia 1

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Przykładowe pytania DSP 1

Plan wykładu. Architektura systemów komputerowych. MnoŜenie realizacja sprzętowa (wersja 1) Układy mnoŝące liczby całkowite.

Arytmetyka liczb binarnych

Transkrypt:

Laboratorium: Wprowadzenie Pojęcia. Wprowadzone zostaną podstawowe pojęcia i mechanizmy związane z programowaniem w asemblerze. Dowiemy się co to są rejestry i jak z nich korzystać. Rejestry to są wewnętrzne komórki procesora, w których może on przechowywać wartości i na których wykonuje operacje. W zależności od typu procesora mogą być 16 bitowe (np. procesor 80286), 32 bitowe (np. procesor 80386 czy 80486) czy 64 bitowe (np. Intel i5). Na zajęciach poznamy rejestry 16 bitowe. Rejestry ogólnego przeznaczenia W skład bloku rejestrów ogólnego przeznaczenia wchodzą m.in. rejestry: arytmetyczne oraz indeksowe. Rejestry arytmetyczne Są to cztery 16-bitowe rejestry ogólnego przeznaczenia: AX, BX, CX, DX. Każdy z tych rejestrów może również działać jako dwa niezależne rejestry 8-bitowe: AX lub AH, AL akumulator, wykorzystywany do operacji arytmetycznych BX lub BH, BL bazowy, może być wykorzystany do adresowania CX lub CH, CL licznik, wykorzystywany w np. w pętlach DX lub DH, DL - danych, wykorzystywany np. przy operacjach na portach Rejestry indeksowe SI rejestr indeksowy źródła (Source Index). Uniwersalny rejestr indeksowy. Jest wykorzystywany w czasie dwuargumentowych operacji łańcuchowych do przetrzymywania adresu źródła danych. DI rejestr indeksowy przeznaczenia (Destination Index). Uniwersalny rejestr indeksowy. Jest wykorzystywany w czasie dwuargumentowych operacji łańcuchowych do przetrzymywania adresu przeznaczenia danych. Rejestr znaczników (rejestr flag, rejestr stanu) Znaczniki lub flagi to jednobitowe komórki zawierające informacje o wynikach operacji wykonywanych przez procesor. Są one zawarte w specjalnym rejestrze. Wybrane znaczniki: CF carry flag znacznik przeniesienia; przyjmuje wartość 1, gdy przy odejmowaniu nastąpiła pożyczka, lub gdy przy dodawaniu nastąpiło przeniesienie; do rejestru CF przechodzi także bit przesunięty poza rejestr lub komórkę w wyniku operacji przesunięcia bitowego PF parity flag znacznik parzystości; przyjmuje wartość 1, gdy wynik operacji ma parzystą liczbę bitów o wartości 1, w przeciwnym wypadku przyjmuje 0; ZF zero flag znacznik zera; przyjmuje wartość 1, gdy wynik operacji jest zerem. W przeciwnym wypadku przyjmuje 0; Kontakt: mszaber@wi.ps.pl 1

SF sign flag znacznik znaku; przyjmuje wartość 1, gdy wynik operacji jest liczbą ujemną, w przeciwnym wypadku przyjmuje 0; DF direction flag znacznik kierunku; steruje zmianą rejestrów indeksowych przy operacjach powtarzających. Jeśłi DF = 1 to zawartość rejestru będzie zmniejszana, w przeciwnym wypadku będzie zwiększana. Sprawne posługiwanie znacznikami może znacznie ułatwić programowanie i przyspieszyć wykonywanie kodu. Skoki warunkowe Skoki warunkowe są wykorzystywane wszędzie tam, gdzie spełnione są pewne warunki. Wszystkie warunki są oparte na znacznikach, tzn. skok zostanie wykonany, gdy określone znaczniki będą miały określone wartości. 0, 1 znacznik musi mieć jedną z tych wartości - oznacza że wartość znacnika nie ma wpływu na wykonanie skoku Nazwa instrukcji (o tych samych warunkach) Znaczniki CF ZF OF PF SF Dodatki JE, JZ - 1 - - - Skok, gdy ZF = 1 JP, JPE - - - 1 - Skok, gdy PF = 1 JO - - 1 - - Skok, gdy OF = 1 JS - - - - 1 Skok, gdy SF = 1 JNE, JNZ - 0 - - - Skok, gdy ZF = 0 JNP, JPO - - - 0 - Skok, gdy PF = 0 JNO - - 0 - - Skok, gdy OF = 0 JB, JNAE, JC 1 - - - - Skok, gdy CF = 1 JNB, JAE, JN 0 - - - - Skok, gdy CF = 0 Instrukcje porównania CMP to instrukcja porównująca dwa argumenty. CMP odejmuje od siebie argumenty i na tej podstawie ustawia znaczniki (wynik odejmowania nie jest nigdzie składowany). Składnia : CMP A, B Relacja Skok dla liczby bez znaku Skok dla liczby ze znakiem A = B JE JE A > B JA JG A < B JB JL A > = B JAE JGE A<= B JBE JLE A B JNE JNE Krok 1. Uruchamiamy Microsoft Visual Studio 2005 lub 2008. Otwieramy nowy projekt (menu-file-new-project). Konfigurujemy jak na rys.1. Projekt umieszczamy Kontakt: mszaber@wi.ps.pl 2

w katalogu C:\users\inazwisko, gdzie nazwisko to pierwsza litera własnego imienia i nazwisko. Rys.1. Ustawienia przy tworzeniu nowego projektu Krok 2. Konfigurujemy wzorzec projektu tak jak na rys.2. (typu Single Document) Rys.2. Konfiguracja projektu Krok 3. Przykłady instrukcji warunkowej w asemblerze. Kompilujemy program wciskając przycisk F5 : Kontakt: mszaber@wi.ps.pl 3

Rys.3. Wstawka asemblerowa w Visual C++ komentarz: wstawkę asemblerową rozpoczynamy od słowa, a ciąg instrukcji do wykonania pomiędzy klamrowymi nawiasami ; Kolejny przykład zastosowania instrukcji warunkowej: /* przykladowy pseudokod if (a == 5) b = 2; else b = 1; */ a = 5; //0x05 add al, 0xfb ;0xfb = -5 jz et1 ; jeśli wynik operacji = 0, ZF=1 Kontakt: mszaber@wi.ps.pl 4

et1: koniec: mov bl, 1 jmp koniec mov bl, 2 mov b, bl printf("wartość b: %d", b); /* przykladowy pseudokod if (a == 15) b = 2; else b = 1; */ a = 15; //0x0f xor al, 0x0f jz et1 ; jeśli wynik operacji = 0, ZF=1 et1: koniec: mov bl, 1 jmp koniec mov bl, 2 mov b, bl printf("wartość b: %d", b); Krok 4. Operacja logiczna: AND, OR i XOR Instrukcja AND jest wygodna do maskowania argumentów np. polecenie wyzerować w ax bit numer n. Stosuje się wówczas instrukcję AND z odpowiednią maską, w której bit n jest wyzerowane, a pozostałe są równe 1. Instrukcja AND wpływa na znaczniki np. ZF (znacznik zera) : 1 gdy wynik operacji AND jest zerem, 0 jeśli wynik jest różny od zera. Instrukcja OR jest wygodna do ustawiania bitów w argumencie, np. polecenie ustawić w bx bity 2, 4, 6 nie zmieniając pozostałych, to wykorzystujemy w operacji OR maskę, w której bity 2, 4 i 6 będą równe 1, natomiast pozostałe będą zerami. Instrukcja XOR jest wygodna do odwracania bitów, np. polecenie odwrócenia/ zanegowania bitów 1, 2, 7 w rejestrze bx, nie zmieniając pozostałych bitów, to użyjemy w operacji XOR maski z ustawionymi (równymi 1) bitami 1, 2 i 7, a pozostałymi równymi zero. Instrukcja AND niszczy zawartość rejestru, oprócz interesujących nas bitów. W celu zachowaniu rejestru stosujemy instrukcję TEST. Działa ona identycznie jak AND, ale nie zapisuje wyniku działania. Po co nam więc taka instrukcja? Otóż, wynik nie jest zapisywany, ale TEST ustawia dla nas flagi identycznie jak AND. test al, 0x01 Kontakt: mszaber@wi.ps.pl 5

jz bit_1_byl_zerem ; jnz bit_1_nie_byl_zerem void main() a = 157; //0x9D, binarnie 1001 1101 xor al, al and al, 0xfe ; wyzeruj b0 mov b, al ; b = 0x9C, binarnie 1001 1100 printf("wartość b: %d", b); // 156 Rys.4. Działanie AND logicznego void main() a = 202; //0xCA, binarnie 1100 1010 xor al, al or al, 0x11 ; wstaw 1 na b0 i b4 mov b, al ; b = 0xDB, binarnie 1101 1011 printf("wartość b: %d", b); // 219 Rys.5. Działanie OR logicznego void main() a = 187; //0xBB, binarnie 1011 1011 xor al, al printf("wartość b: %d", b); // 154 Rys.6. Działanie XOR logicznego Kontakt: mszaber@wi.ps.pl 6

//zprawdzanie b0, parzystość/nieparzystość liczby unsigned char a, wynik; a = 14; xor al, al ; w al = 0000 1110 test al, 0x01 ; 0000 0001 <-maska jz et1 ; b0 jest równy 0 czyli operacja = 0 to ZF =1 mov ah, 1 ; w przeciwnym wypadku jmp koniec et1: mov ah, 0 jmp koniec koniec: mov wynik, ah printf("wartość b: %d", wynik); Rys.7. Działanie instrukcji TEST sprawdzanie parzystości liczby Krok 5. Proszę przepisać i dokonać analizy kodu z kroku 3 oraz 4 z wykorzystaniem narzędzia Debugera Krok 6. Możemy użyć instrukcji warunkowe do realizacji pętli. void main() skok: mov al, 0xff ; definiujemy liczbę iteracji pętli dec al jnz skok ; zmniejszamy licznik pętli ; wykonaj skok jeśli licznik nie jest zerowy Krok 7. Przesunięcia bitowe : Rys.8. Działanie SHL i SHR Kontakt: mszaber@wi.ps.pl 7

SHL przesunięcia bitowe w lewo o zadaną liczbę miejsc SHR przesunięcia bitowe w prawo o zadaną liczbę miejsc. Krok 8. Dana jest liczba ośmiobitowa b (b7b6b5b4b3b2b1b0). Ustaw bity wg następnej kolejności b6b7b4b5b2b3b0b1. Krok 9. Dana jest dowolna liczba ośmiobitowa, Znajdź liczbę jedynek. Opracowanie na podstawie: Asembler. Miniprzewodnik. Grzegorz Michałek. Kontakt: mszaber@wi.ps.pl 8