Kierunek INFORMATYKA. Specjalność "Informatyka morska" Przedmiot Architektura Systemów Komputerowych

Podobne dokumenty
A Machine Architecture that is Really Intuitive and Easy. Dane: notacja dwójkowa, zapis w kodzie dopełnieniowym

UKŁADY MIKROPROGRAMOWALNE

Struktura i działanie jednostki centralnej

. III atyka, sem, Inform Symulator puterów Escape rchitektura kom A

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

Architektura komputerów

Techniki multimedialne

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

MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW

Wprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy

Architektura typu Single-Cycle

Programowanie Niskopoziomowe

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

Architektura komputerów Reprezentacja liczb. Kodowanie rozkazów.

Procesor i jego architektura (CISC, RISC, 32/64 bity). Systemy wieloprocesorowe. wer Wojciech Myszka 16 pa«zdziernika 2008

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Lista Rozkazów: Język komputera

ARCHITEKTURA PROCESORA,

Pracownia Komputerowa wykład VI

Logiczny model komputera i działanie procesora. Część 1.

Architektura komputerów wer. 7

Informatyka kodowanie liczb. dr hab. inż. Mikołaj Morzy

Architektura komputerów. Asembler procesorów rodziny x86

Pracownia Komputerowa wykład IV

Języki i metodyka programowania. Reprezentacja danych w systemach komputerowych

Podstawy Informatyki dla Nauczyciela

Mikrokontroler ATmega32. Język symboliczny

INFORMATYKA. Zajęcia organizacyjne. Arytmetyka komputerowa.

Systemy zapisu liczb.

Architektura komputerów wer. 3

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

Specyfika projektowania Mariusz Rawski

Uniwersytet w Białymstoku Wydział Ekonomiczno-Informatyczny w Wilnie SYLLABUS na rok akademicki 2010/2011

Organizacja typowego mikroprocesora

Systemy liczenia. 333= 3*100+3*10+3*1

Technika Cyfrowa i Mikroprocesorowa

Pracownia Komputerowa wyk ad VI

Technologie Informacyjne

Sprzęt komputera - zespół układów wykonujących programy wprowadzone do pamięci komputera (ang. hardware) Oprogramowanie komputera - zespół programów

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Wstęp do informatyki. Maszyna RAM. Schemat logiczny komputera. Maszyna RAM. RAM: szczegóły. Realizacja algorytmu przez komputer

Jednostki informacji. Bajt moŝna podzielić na dwie połówki 4-bitowe nazywane tetradami (ang. nibbles).

1. Operacje logiczne A B A OR B

Cyfrowy zapis informacji. 5 grudnia 2013 Wojciech Kucewicz 2

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

Magistrala systemowa (System Bus)

DYDAKTYKA ZAGADNIENIA CYFROWE ZAGADNIENIA CYFROWE

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

Technologie Informacyjne Wykład 3

L6.1 Systemy liczenia stosowane w informatyce

Przedmiot: Urządzenia techniki komputerowej Nauczyciel: Mirosław Ruciński

Architektura komputerów

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

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

Programowanie niskopoziomowe

Budowa i zasada działania komputera. dr Artur Bartoszewski

Mikrokontrolery w mechatronice. Wstępne uwagi

Architektura systemów komputerowych Laboratorium 5 Kodowanie liczb i tekstów

Sprzęt i architektura komputerów

Kodowanie informacji. Kody liczbowe

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

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

Układy mikroprogramowane

Pracownia Komputerowa wyk ad IV

Technika mikroprocesorowa I Studia niestacjonarne rok II Wykład 2

Teoretyczne Podstawy Informatyki

Podstawy Informatyki Układ sterujący

Ćwiczenie 3. Konwersja liczb binarnych

PODSTAWY INFORMATYKI. Informatyka? - definicja

Budowa komputera Komputer computer computare

Projektowanie. Projektowanie mikroprocesorów

Mikroprocesor Operacje wejścia / wyjścia

Architektura systemów komputerowych. Arytmetyka maszyn cyfrowych

Wstęp do informatyki. Pojęcie liczebności. Zapis liczb. Liczenie bez liczebników. Podstawy arytmetyki komputerowej. Cezary Bolek

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

Projekt prostego procesora

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

Układ wykonawczy, instrukcje i adresowanie. Dariusz Chaberski

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

Programowalne układy logiczne

Podstawy działania układów cyfrowych...2 Systemy liczbowe...2 Kodowanie informacji...3 Informacja cyfrowa...4 Bramki logiczne...

System Liczbowe. Szesnastkowy ( heksadecymalny)

Architektura komputerów

Sprzęt i architektura komputerów

SYSTEMY LICZBOWE. SYSTEMY POZYCYJNE: dziesiętny (arabski): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 rzymski: I, II, III, V, C, M

Wstęp do informatyki. Pojęcie liczebności. Liczenie bez liczebników. Podstawy arytmetyki komputerowej. Cezary Bolek

AHDL - Język opisu projektu. Podstawowe struktury języka. Komentarz rozpoczyna znak i kończy znak %. SUBDESIGN

DZIESIĘTNY SYSTEM LICZBOWY

Architektura komputerów

dr inż. Jarosław Forenc

1.1. Pozycyjne systemy liczbowe

Przykładowe pytania DSP 1

LEKCJA TEMAT: Współczesne procesory.

Systemy liczbowe używane w technice komputerowej

Transkrypt:

Kierunek INOMATYKA Specjalność "Informatyka morska" Przedmiot Architektura Systemów Komputerowych Wstęp w pracy laboratoryjne Architektura mikrokomputera SimpSim, programowanie na Asemblerze i kompilacja na język maszynowy Prof. zw. dr hab. Evgeny Ochin 1 Szczecin, 2016 1 Dydaktyka E.Ochina http://goo.gl/swlzjr Praca naukowa E.Ochina http://goo.gl/jvjix

Spis treści Niektóre notacji i definicje... 3 Architektura mikrokomputera SimpSim... 4 Zasada sterowania programowego... 5 Wejście i dodawanie dwóch liczb całkowitych... 5 Wejście, dodawanie i odejmowanie dwóch liczb całkowitych... 7 Organizacja cyklów za pomocy operacji jmple... 8 Organizacja przesunięcia cyklicznego w prawo za pomocy operacji ror... 10 Symulator mikrokomputera SimpSim... 13 Kod maszynowy do MK SimpSim... 13 Kod Asemblera do MK SimpSim... 13 Dodawanie dwóch liczb na Asemblerze... 14 Mnożenie przez dodawanie na Asemblerze... 14 Lądowanie operandów mikrokomputera SimpSim... 15 Asembler mikrokomputera SimpSim (szczegółowy opis)... 16 Przykłady programowania na Asemblerze mikrokomputera SimpSim... 21 Program Hello world... 21 Program dodawania liczb całkowitych... 22 Program dodawania liczb zmiennoprzecinkowych... 22 Program odwracania kolejności danych... 23 Program sortowania danych z najmniejszych do największych... 24 Krótko o mikroprogramowaniu mikrokomputera SimpSim... 26 Literatura... 28 Strona 2

Niektóre notacji i definicje Bit b (ang. bit = binary digit) jest to najmniejsza jednostka pamięci komputerowej. Bit przyjmuje dwa znaczenia bє{0,1}. Bajt B (ang. Byte) jest to ciąg 8 bitów, numerowanych od prawej do lewej B[7:0] lub od lewej do prawej B[0:7]. Tabela 1. Definicja bajtu 1B=8b, bity numerowane od prawej do lewej 1B=8b, bity numerowane od lewej do prawej Słowo W (ang. Word) jest to ciąg 16 bitów, numerowanych od prawej do lewej W[15:0] lub od lewej do prawej W[0:15]. Słowo podwójne WW jest to ciąg 32 bitów, numerowanych od prawej do lewej WW[31:0] lub od lewej do prawej WW[0:31]. Kilobajt KB jest to ciąg 2 10 =1024 bajtów, numerowanych od lewej do prawej KB(0:2 10-1)[7:0]. Megabyte MB jest to ciąg 2 20 =1024x1024 bajtów, numerowanych od lewej do prawej MB(0: 2 20-1)[7:0]. Gigabyte GB jest to ciąg 2 30 =1024x1024x1024 bajtów, numerowanych od lewej do prawej GB(0: 2 30-1)[7:0]. Dalej są jednostki informacyjne terabyte, petabyte, exabyte i inne. SL Systemy Liczbowe SL 2 SL dwójkowy SL 16 SL szesnastkowy SL 10 SL dziesiętny SL 2-10 SL dwójkowo-dziesiętny MK Mikro Komputer Mikroprogramowalny układ sterujący to układ o stałej strukturze sprzętowej, którego działanie jest opisane tzw. mikroprogramem. Program ten zapisywany jest w pamięci układu (OM (ys.21), POM lub EPOM) zwanej pamięcią sterowania. Mikrooperacją nazywa się elementarną czynność możliwą do wykonania w danym układzie w jednym takcie jego pracy. Mikrorozkazem nazywa się słowo dwójkowe określające sygnały wyjściowe w układzie sterującym. Słowo to jest przechowywane w pamięci (OM (ys.21), POM lub EPOM) i powoduje wykonanie jednej lub kilku mikrooperacji. Mikroinstrukcją nazywa się sformalizowany zapis opisujący czynności wykonywane przez układ sterujący w jednym elementarnym takcie jego pracy. Mikroprogramem nazywa się sekwencję mikroinstrukcji (słów sterujących). Mikroprogramowaniem poziomym nazywać będziemy taki sposób pracy układu sterującego, w którym generowanie sygnałów sterujących, wykonaniem mikrooperacji jest takie, że każdy bit mikrorozkazu reprezentuje niezależny sygnał sterujący. Przy takim sposobie mikroprogramowania każdy rozkaz ma od razu format mikrorozkazu. Mikrooperacje są kodowane w kodzie 1 z N. Mikroprogramowaniem pionowym nazywać będziemy taki sposób pracy układu sterującego, w którym wykonanie rozkazu polega na zainicjowaniu odpowiedniej sekwencji mikrorozkazów reprezentujących mikroprogram a kody mikrorozkazów tworzą sektory przyporządkowane wykonywanym funkcjom sterującym (mikrooperacjom). Mikrooperacje są kodowane dowolnym kodem (ys.21). Mikro Komputer = Procesor + Pamięć rejestrowa () + Pamięć główna () + Układy Wejścia/Wyjścia danych + Magistrale danych, adresowa i sterująca ys. 1. Architektura najprostszego mikrokomputera Procesor = Jednostka Arytmetyczno-Logiczna (ALU) + Licznik programowy (PC) + ejestr rozkazów (I) Strona 3

Architektura mikrokomputera SimpSim Mikrokomputer SimpSim (MK SimpSim) nie istnieje w sprzęcie. aczej jest to symulacja sprzętu przy użyciu programów uruchamianych na komputerach z systemem Windows i Linux. SimpSim reprezentuje wielu z rzeczywistych cech prawdziwych komputerów. Architektura mikrokomputera SimpSim została opracowana w holenderskim Uniwersytecie Twente 2 wyłącznie do celów edukacyjnych. Kierownik projektu dr Anne-Gert Bultena potwierdziła, że Akademia Morska w Szczecinie mogą korzystać Symulator Mikrokomputera SimpSim bez ograniczeń 3. ys. 2. Architektura mikrokomputera SimpSim adresacjia pamęci rejestrowej (Asembler SimpSim) adresacjia pamęci glównej (Asembler SimpSim) ALU(addi, addf, and, or, xor, ror) o[7:0]=db[0].db[6:0] 4 PC[7:0] I[15:0] Pamięć rejestrowa (0:15)[7:0] organizowana jako zestaw 16 rejestrów jednobajtowych z umożliwia jednoczesnego odczytu pary operandów. Pamięć główna (0:255)[7:0] organizowana jako zestaw 256 komórek jednobajtowych. 2 HTTP://WWW.UTWENTE.NL/EN/?GCLID=CJWKEAJWXMETBDJX6SZ2P7DSQ0SJADJHAQNEAOS-NUYVC8MJXXXBUBIIWD5CQ_CNXTJYY_9INISOC37W_WCB 3 HTTPS://SITES.GOOGLE.COM/SITE/TECHNOLOGIESIECIOWEAM/HOME/ZADANIE-DOMOWE-N1/LICENSE-SIMPSIM 4 TUTAJ KOPKA (.) OZNACZA KONKATENACJI, TZN POŁĄCZENIE DWÓCH CIĄGÓW BITOWYCH Strona 4

Zasada sterowania programowego Begin [00:) 0; PC:=0; [0:] 0 I:=[PC].[PC+1] PC:=PC+2 I 3 =C (halt) 0 1 End Deczyfracja kodu rozkazu I3 Wykonanie operacji I3 ys. 3. Zasada sterowania programowego Wejście i dodawanie dwóch liczb całkowitych ys. 4. Program wejścia (load) i dodawania dwóch liczb całkowitych B=B +B (addi skrót od addition integer) Strona 5

ys. 5. Dump (treśći) pamęci mikrokomputera SimpSim po wykonaniu operacji B=B +B ys. 6. Struktura mikrokomputera SimpSim: wykonanie pozkazu Addi 321 Strona 6

Wejście, dodawanie i odejmowanie dwóch liczb całkowitych ys. 7. Program wejścia, dodawania i odejmowanie dwóch liczb całkowitych (B=B +B i B=B -B ) ys, 8. Dump (treści) pamięci mikrokomputera SimpSim po wykonaniu operacji B=B +B (halt perwszy) Strona 7

ys. 9. Dump (treści) pamięci mikrokomputera SimpSim po wykonaniu operacji B=B -B (halt drugi) Organizacja cyklów za pomocy operacji jmple ys. 10. Aplikacja operacji jmple Strona 8

ys. 11. Dump (treści) pamięci mikrokomputera SimpSim po wykonaniu operacji Cicle jmple ys. 12. Struktura mikrokomputera SimpSim: wykonanie pozkazu jmple A<=0, 06 Strona 9

Organizacja przesunięcia cyklicznego w prawo za pomocy operacji ror ys. 13. Aplikacja operacji przesunięcia cyklicznego w prawo na 3 bity ys. 14. Dump (treści) pamięci mikrokomputera SimpSim po wykonaniu operacji przesunięcia cyklicznego w prawo na 3 bity Strona 10

ys. 15. Struktura mikrokomputera SimpSim: wykonanie przesunięcia cyklicznego w prawo na 3 bity ys. 16. Przesunięcie cykliczne w prawo na 1 bit Strona 11

ys. 17. Dump (treści) pamięci mikrokomputera SimpSim po wykonaniu przesunięcia cyklicznego w prawo na 1 bit Strona 12

Symulator mikrokomputera SimpSim Kod maszynowy do MK SimpSim MK SimpSim pozwala programom do wykonania tylko na poziomie kodów maszynowych. Kod maszynowy jest na najniższym poziomie abstrakcji. Użytkownik nie musi myśleć o takich rzeczach jak PC, I lub szczegóły cyklu maszyny. Wszystkie instrukcje komputerowe składa się z kodu operacji i pola argumentu. Dla MK SimpSim kod operacji składa się z 4 bitów (jest to możliwe mieć do 16 różnych instrukcji). Pole argument ma dwa formaty (Tab. 2). Tabela 2. ormaty instrukcji 4 bit 4 bit 4 bit 4 bit ormat I KOP L M N ormat II KOP L Adres Adding two numbers using machine code: Adres Kod maszynowy Wyjaśnienie 00 01 10 0A 0:=(OA) 02 03 11 0B 1:=(OB 04 05 52 01 2:=0+1 (dodawanie całkowite) 06 07 32 0C (0C):=2 08 C0 09 00 wstrzymanie komputera 0A 12 komórka ma wartość 12 hex, który jest 18 w systemie dziesiętnym 0B AC komórka ma wartość AC hex, która jest 172 w systemie dziesiętnym 0C 00 komórka dostaje odpowiedź od dodania Kod Asemblera do MK SimpSim Assembly code is the next level up in abstraction from machine code. The assembly code is run through the assembler (a kind of software) that converts the code to machine code that the machine recognizes. Assembly code is a level down in abstraction from high level code such as Python. It is easier to write assembly code than machine code but not as easy as high level code. Assembly code is specific to a particular machine architecture. The assembly code for an Intel processor is different than that for say a Motorola processor. This is a disadvantage of assembly code since most high level languages can be recompiled for a new architecture with very few changes. Send me email telling me you read this so I can see if students are taking advantage of this. Please do not tell friends - no grade is involved here. This is for information purposes only. The advantages of assembly code are that it creates very fast machine code - faster in many cases than high level code. It also allows access to specific hardware devices with their own characteristics. Kod Asemblera jest wyższy poziom abstrakcji od koda maszynowego. Asembler (oprogramowanie) konwertuje kod Asemblera do kodu maszynowego, że urządzenie rozpoznaje. Łatwiej jest napisać kod Asemblera niż kod maszynowy, ale nie jest tak proste jak kod na języku wysokiego poziomu, na przykład na Paskale. Kod Asemblera jest specyficzne dla każdej innej architektury maszyny - kod Asemblera do procesora Intel jest inny niż do procesora Motorola. To jest wadą Asemblera, ponieważ większość kodu Asemblera powinna być ponownie skompilowana dla nowej architektury. Korzyści z kodem Asemblera jest to, że tworzy bardzo szybki kod maszynowy - szybciej niż w wielu przypadkach kodu wysokiego poziomu. Strona 13

Dodawanie dwóch liczb na Asemblerze Etykieta Kod operacji Argument Wyjaśnienie load 0, [val1] 0:= (vol1)= (OA) load 1, [val2] 1:= (vol2) = (OB) addi 2, 1, 0 2:=0+1 (dodawanie całkowite) store 2, [ans] (ans)= (0C):=2 halt val1: db 18 val2: db 172 wstrzymanie komputera komórka ma wartość 12 hex, który jest 18 w systemie dziesiętnym komórka ma wartość AC hex, która jest 172 w systemie dziesiętnym val3: db 0, [val1] komórka dostaje odpowiedź od dodania Mnożenie przez dodawanie na Asemblerze Etykieta Kod operacji, gdzie B mnożna, B mnożnik, B iloczyn. Argument Wyjaśnienie load 1, [val1] mnożna load 0, [val2] mnożnik load 2, [zero] Iloczyn 2:=0 load 3, [one] 3:=1 move 4, 3 4:=3=1 loop: addi 2, 1, 2 2:=2+1 addi 4, 4, 3 4:=4+1 jmple 4<=0, loop If 4<=0 then goto loop store 2, [ans] (ans):=2 halt wstrzymanie komputera val1: db 3 komórka ma wartość 3 val2 db 7 komórka ma wartość 7 zero: db 0 komórka ma wartość 0 one: db 1 komórka ma wartość 1 ans: db 0 komórka dostaje odpowiedź od mnożenia (ans)= (vol1)*(vol2) Strona 14

16 rejestrów 0 Licznik programowy PC:=0 256 komórek pamięci głównej [00] [] ejestr rozkazów [01]= 0110 0000 Wyniki kompilacji []= 0000 0000 Otworzyć program w asemblerze Uruchomić program Uruchomić program krokami Pisać program w asemblerze Wyczyścić, i, PC ys. 18. Główne okno symulatora SimpSim Lądowanie operandów mikrokomputera SimpSim a) b) c) Program ładowania pary operandów B' i B" i operacji B=B +B. a) ładowanie pary operandów B' i B" w systemie dziesiętnym; b) ładowanie pary operandów B' i B" w systemie dwójkowym; c) ładowanie pary operandów B' i B" w systemie szesnastkowym. Strona 15

Asembler mikrokomputera SimpSim (szczegółowy opis) Kod operacji 2 ozkaz asemblera i kompilacja w kod maszynowy (=>) load N,XY=> 2N,XY N:=XY; load 3,9 ;=> 23,09 Przykład (opis) load 3,9 ;=> 23,09 00 0010 0011 0 01 0000 1001 1 02 2 03 3 0000 1001 E E I 0010 0011 0000 1001 3 store N, [XY]=>3N,XY [XY]:=N; load 3,9 ;=> 23,09 store 3,[Eh];=>33,E; PC 0000 0000 PC:=PC+2 load 3,9 ;=> 23,09 store 3,[Eh];=>33,E; 00 0010 0011 0 01 0000 1001 1 02 0011 0011 2 03 1111 1110 3 0000 1001 E 0000 1001 E I 0011 0011 1111 1110 1 load N,[XY]=>1N,XY N:=[XY]; load 1,[02h];=>11,02 PC 0000 0010 PC:=PC+2 load 1,[02h] ;=>11,02 00 0001 0001 0 01 0000 0010 1 1111 1111 02 1111 1111 2 03 3 0000 1001 E E I 0001 0001 0000 0010 4 move N, M=>4N,M0 N:= M; load 2,09;=>22,09 move 0,2;=>40,20 PC 0000 0000 PC:=PC+2 load 2,09 ;=>22,09 move 0,2 ;=>40,20 00 0100 0000 0 0000 1001 01 0010 0000 1 02 2 0000 1001 03 3 E E I 0100 0000 0010 0000 PC 0000 0000 PC:=PC+2 Strona 16

addi L, M, N=>5L,MN L:=M+N; 0=1+ 2 ALU addi 5 load 1,18 ;=>21,18 load 2,09 ;=>22,09 addi 0,1,2;=> 50,12 00 0101 0000 0 0001 0001 01 0001 0010 1 0000 1000 02 2 0000 1001 03 3 E E I 0101 0000 0001 0010 addf L, M, N=>6L,MN; L:=M+N; PC 0000 0000 PC:=PC+2 0=1+ 2 ALU addf 6 load 1,18 ;=>21,18 load 2,09 ;=>22,09 addf 0,1,2;=> 60,12 00 0110 0000 0 0001 1100 01 0001 0010 1 0001 1000 02 2 0000 1001 03 3 E E I 0110 0000 0001 0010 or L, M, N=>7L,MN L:=M or N; PC 0000 0000 PC:=PC+2 0=1v 2 ALU or 7 load 1,00011000b;=>21,18 load 2, 00001001b;=>22,09 or 0,1,2;=> 70,12 00 0111 0000 0 0001 1001 01 0001 0010 1 0001 1000 02 2 0000 1001 03 3 E E I 0111 0000 0001 0010 PC 0000 0000 PC:=PC+2 Strona 17

and L, M, N=>7L,MN L:=M and N; 0=1 & 2 ALU and 8 load 1,00011000b;=>21,18 load 2, 00001001b;=>22,09 and 0,1,2;=> 70,12 00 1000 0000 0 0000 1000 01 0001 0010 1 0001 1000 02 2 0000 1001 03 3 E E I 1000 0000 0001 0010 xor L, M, N=>7L,MN L:=M xor N; PC 0000 0000 PC:=PC+2 0=1 2 ALU xor 9 A load 1,00011000b;=>21,18 load 2, 00001001b;=>22,09 xor 0,1,2;=> 70,12 Cykliczne przesunięcie w prawo (ror rotate to the right) ror N,M=>AN,M0 N= cykliczne przesunięcie N w prawo o K pozycjach bitowych. load 2,00011000b; =>21,18 move 1, 2; =>41,20 ror 1,2; =>A1,02; cykliczne przesunięcie zawartości rejestru 1 w prawo o 2 pozycjach bitowych, 1:= 1[1:0].1[7:2] 00 1001 0000 0 0001 0001 01 0001 0010 1 0001 1000 02 2 0000 1001 03 3 E E I 1001 0000 0001 0010 PC 0000 0000 PC:=PC+2 load 2,00011000b; =>21,18 move 1, 2; =>41,20 ror 1,2; =>A1,02; 00 1010 0001 0 01 0000 0010 1 00000110 02 2 00011000 03 3 E E I 1010 0001 0000 0010 PC 0000 0000 PC:=PC+2 1= b' 7 b' 6 b' 5 b' 4 b' 3 b' 2 b' 1 b' 0 1= b" 1 b" 0 b" 7 b" 6 b" 5 b" 4 b" 3 b" 2 Strona 18

jmpeq N=>0, XY if N=0 then PC:=XY (skok warunkowy) jmpeq 2=0, 14=> B2,0E; if 2=0 then PC:=14 jmpeq 2=0,14 ALU = 00 1011 0010 0 0001 0001 01 0000 1110 1 02 2 0000 0001 03 3 E E I 1011 0010 0000 1110 PC 0000 1110 PC:=PC+2 jmpeq 2=0,14 ALU = B jmpeq N=0, etykieta if N=0 then PC:= etykieta (skok warunkowy) jmpeq 2=0, End=> B2,0E; if 2=0 then PC:=End; {End=0E} jmp XY jmpeq 0=0, XY PC := XY; (skok bezwarunkowy) jmp 12=> B0,0C; PC := 12; 00 1011 0010 0 0001 0001 01 0000 1110 1 02 2 0000 0001 03 3 E E I 1011 0010 0000 1110 PC 0000 1110 PC:=PC+2 jmp 12 ALU = 00 1011 0000 0 0001 0001 01 0000 1110 1 02 2 03 3 E E I 1011 0000 0000 1110 PC 0000 1110 PC:=PC+2 Strona 19

D load N, [M]=>DN,[M] N := [M] load 1, [2]=> D0,12; 1 := [2] load 1, [2]; =>D0,12; 1 := [2] 00 1101 0000 0 01 0001 0010 1 0000 1111 02 2 1111 1110 03 3 E 0000 1111 E I 1101 0000 0001 0010 PC 0000 0000 PC:=PC+2 E store N, [M]=>EN,M [M] := N store 1, [2]; =>E0,12 [1] := 2 jmple N<=0, XY=>N,XY if N<=0 then PC:=XY (skok warunkowy) jmple 2<=0,14=> 2,0E; if 2<=0 then PC:=14 store 1, [2]; =>E0,12; [1] := 2 00 1110 0000 0 01 0001 0010 1 1000 1111 02 2 1111 1110 03 3 E 1000 1111 E I 1110 0000 0001 0010 PC 0000 0000 PC:=PC+2 jmple 2<=0,14 ALU <= 00 1011 0010 0 0000 0001 01 0000 1110 1 02 2 0000 1001 03 3 E E I 1011 0010 0000 1110 C halt Pseudo-Operacji db N db M,N,.. db "string",0 org addr PC 0000 1110 PC:=PC+2 Pseudo-Operacji mikrokomputera SimpSim Opis DATA BYTE: umieszczenie określonej wartości (s) w kolejnej lokalizacji pamięci (s). Bajty danych może być określony pojedynczo, na liście oddzielone przecinkami, lub jako ciąg znaków (zamknięty w cudzysłowie). Przykłady: db 1,4,9,16,25,36 db "Hello, world",10,0 (ciąg zakończony zerem, ze znakiem nowego wiersza następujące znaki druku) OIGIN: Umieść następną instrukcję lub bajt danych na adres pamięci addr. Pozwala to program lub informacje być umieszczone w dowolnych miejscach w pamięci. Strona 20

Przykłady programowania na Asemblerze mikrokomputera SimpSim Program Hello world ; Hello world.asm ; Ten program w asemblerze SimpSim drukuje prostą wiadomość. ; To pokazuje: ; asemblowanie na język maszynowy ; Segmenty programu i danych w pamięci ; drukowanie (z wykorzystaniem ) ; bezpośrednie, natychmiastowe, jak i pośrednie ładowanie danych ; labels warunkowe i bezwarunkowe skoki z etykietami ; dodawanie całkowite ; zatrzymanie ; bajty danych całkowite i tekstowe load 1,Text ; początek tekstu load 2,1 ; wzrost load 0,0 ;tekst-terminator NextChar:load,[1] ; uzyskać znak i wydrukować go na ekranie addi 1,1,2 ; wzrost adresu jmpeq =0,eady ; kiedy tekst-terminator, gotowe jmp NextChar ; następny znak eady: halt org 20h ;; Zaczyna się segment danych 0x20 Text: db 10 db "Hello world!!",10 db " from the",10 db " Simple Simulator",10 db 0 ; tekst-terminator Strona 21

Program dodawania liczb całkowitych load A,87d ; Konwersja D'10 => B'2= ; =Z' b'6 b'5 b'4 b'3 b'2 b'1 b'0 ; i zapisywanie w rejestr N10 (A) load B,-92d ; Konwersja D''10 => B''2= ; Z'' b''6 b''5 b''4 b''3 b''2 b''1 b''0 ; i zapisywanie w rejestr N11 (B) addi C,A,B ; Wykonanie operacji B=B'+B''=87-92=-5 ; i zapisywanie sumy (B) w rejestr N12 (C) halt ; Stop programu B=11111011b=-5 Program dodawania liczb zmiennoprzecinkowych load 0,10010011b ; 0:=-(3/16)*2^(1-4)=-3/128 load 1,00110010b ; 1:=(2/16)*2^(3-4)=1/16 addf 2,1,0 ; 2:=1+2 jako loat halt ; -3/128+1/16=5/128 OA=00001010b=10/16*2^(0-4)=5/128 Strona 22

Program odwracania kolejności danych ; Ten program w asemblerze SimpSim odwraca kolejność danych. ; Dane wejściowe: 1,12,23,34,45,56 ; Dane wyjściowe: 56, 45, 34, 23, 12, 1 ;; 1. Załaduj wskaźniki Lo i Hi, jako początek i koniec danych load 1,Data ; Lo wskaźnik (początek danych) load 2,EndOfData ; Hi wskaźnik (koniec danych) load 3,1 ; zwiększyć wskaźnik Lo load 4,-1 ; zmniejszyć wskaźnik Hi addi 2,2,4 ; zmniejszanie wskaźniku Hi do ostatniego elementu danych Loop: ;; 2. Sprawdź, czy skończyliśmy (if Hi <= Lo) move 0,1 ; Kopiowanie wskaźniku Lo w 1 do 0 jmple 2<=0,Done ; If (Hi <= Lo) skocz do Done ;; 3. Wymiana [Hi] i [Lo] load 5,[1] ; Załaduj [Lo] do 5 load 6,[2] ; Załaduj [Hi] do 6 store 5,[2] ; Załaduj 5 ([Lo]) do [Hi] store 6,[1] ; Załaduj 6 ([Hi]) do [Lo] ;; 4. Przesuń Lo wyższej jednym i Hi niżej jednym addi 1,1,3 ; Dodaj jeden do Lo addi 2,2,4 ; Odejmij jeden z Hi ;; 5. Kontynuuj pętli jmp Loop Done: ;; 6. Halt -- Skończyliśmy! halt org 20h ; rozpocząć segment danych w pamięci (lokalizacja 20h) Data: db 1h,12h,23h,34h,45h,56h,67h,78h,89h,9Ah EndOfData: db 0 ; Terminator danych Dane wejściowe: 1,12,23,34,45,56 Dane wyjściowe: 56,45,34,23,12,1 Strona 23

Program sortowania danych z najmniejszych do największych ; Ten program w asemblerze SimpSim sortuje dane z najmniejszych do największych. ; Dane wejściowe: 2,77,3,66,4,55,5,44,6,33,7,22,8,11,9 ; Dane wyjściowe: 2,3,4,5,6,7,8,9,11,22,33,44,55,66,77 ;; 1. Załaduj wskaźniki Lo i Hi, jako początek i koniec danych load 1,Data ; Lo wskaźnik (początek danych) load 2,EndOfData ; Hi wskaźnik (koniec danych) load 3,1 ; zwiększyć wskaźnik Lo load 4,-1 ; zmniejszyć wskaźnik Hi addi 2,2,4 ; zmniejszanie wskaźniku Hi do ostatniego elementu danych OuterLoop: ;; 2. Sprawdź, czy skończyliśmy (if Hi <= Lo) move 0,1 ; 0 Kopiowanie wskaźniku Lo w 1 do 0 jmple 2<=0,Done ; If (Hi <= Lo) skocz do Done ;; 3. Ustaw lowestemainingpointer (5) na bieżący wskaźnik Lo (1) move 5,1 ;; 4. Ustaw lowestemaining (6) do M[bieżący wskaźnik Lo] load 6,[1] ;; 5. Ustaw nextcheckpointer (7) do wskaźniku Lo + 1 move 7,1 ;; 7 <- 1 (wskaźnik Lo) addi 7,7,3 ;; 7 <- 7 + 1 (wskaźniku Lo + 1) InnerLoop: ;; 6. Jeśli HiPointer < nextcheckpointer, iść do inishinnerloop move 0,7 ;; 0 <- 7 (nextcheckpointer) addi 0,0,4 ;; 0 <- nextcheckpointer - 1 jmple 2<=0,ContinueOuterLoop ;; 2 jest HiPointer ;; 7. Jeśli wartość w M[nextCheckPointer] <= M[lowestemainingPointer] ;; ustaw lowestemainingpointer i lowestemaining w nextcheck move 0,6 ;; 0 <- lowestemaining (= M[lowestemainingPointer]) load 8,[7] ;; 8 <- M(nextCheckPointer) jmple 8<=0,oundLower ;; Znaleziony dolna, więc przechowywać go jmp ContinueInnerLoop ;; Jeśli nie znaleźliśmy jedną, część przechowującą pominąć oundlower: move 5,7 ;; lowestemainingpointer <- nextcheckpointer; move 6,8 ;; lowestemaining <- M[nextCheckPointer]; ContinueInnerLoop: ;; 8. wzrost nextcheckpointer i kontynuować z InnerLoop addi 7,7,3 ;; nextcheckpointer <- nextcheckpointer + 1; jmp InnerLoop ContinueOuterLoop: ;; 9. Znaleźliśmy lowestemaining numer i jego wskaźnik ;; Więc zamienić M[Lo Pointer] z M[lowestemainingPointer] load 9,[1] ;; 9 <- M[Lo Pointer] store 6,[1] ;; M[Lo Pointer] = M[lowestemainingPointer] store 9,[5] ;; M[lowestemainingPointer] = stary M[Lo Pointer] ;; 10. zwiększyć Lo Pointer i kontynuować z OuterLoop addi 1,1,3 ;; LoPointer = LoPointer + 1; jmp OuterLoop Done: ;; 11. Halt -- Skończyliśmy! halt org 0x40 ; rozpocząć segment danych w pamięci (lokalizacja 40h) Data: db 2h,77h,3h,66h,4h,55h,5h,44h,6h,33h db 7h,22h,8h,11h,9h EndOfData: db 0 ; Terminator danych Strona 24

Dane wejściowe: 2,77,3,66,4,55,5,44,6,33,7,22,8,11,9 Dane wejściowe: 2,3,4,5,6,7,8,9,11,22,33,44,55,66,77 Strona 25

Krótko o mikroprogramowaniu mikrokomputera SimpSim ysunek 19. Zasada sterowania programowego mikrokomputera SimpSim Strona 26

ys. 20. Zasada sterowania mikroprogramowego i struktura mikroprogramy mikrokomputera SimpSim Strona 27

ys. 21. Struktura automatu mikroprogramowego mikrokomputera SimpSim Literatura 1. Ochin E. Systemy Liczbowe Wykład 03, http://youtu.be/zjugpl-pwh4 2. Ochin E. Systemy liczbowe. Lulu Publishing, aleigh, North Carolina, USA, 2010 3. Ochin E. Akademia Morska, wydz. Nawigacyjny, kier. "TANSPOT", przedm. "IT", http://youtu.be/27u6r_z38 4. Wałaszek J 5. Systemy liczenia. http://edu.i-lo.tarnow.pl/inf/utils/012_2012/0102.php 5. Wałaszek J. Zapis w systemie uzupełnień do 2 - U2, http://edu.i-lo.tarnow.pl/inf/alg/006_bin/0018.php 6. Wałaszek J. System U2. http://edu.i-lo.tarnow.pl/inf/utils/012_2012/0103.php 7. Wałaszek J. Algorytmy. http://edu.i-lo.tarnow.pl/inf/utils/012_2012/0104.php 8. Wałaszek J. Informacja w komputerze. http://edu.i-lo.tarnow.pl/inf/utils/012_2012/0002.php 9. Wałaszek J. Sieci komputerowe. http://edu.i-lo.tarnow.pl/inf/utils/012_2012/0003.php 10. Dydaktyka E.Ochina http://goo.gl/swlzjr 11.Praca naukowa E.Ochina http://goo.gl/jvjix Linki wideo 1. Ochin E. Systemy Liczbowe Wykład 03, http://youtu.be/zjugpl-pwh4 2. System ósemkowy - Jak przeliczać liczby na system oktalny? [holicy.pl] http://www.youtube.com/watch?feature=fvwp&v=0acvnbqz9we&n=1 3. System hexadecymalny - zamiana liczb na system szesnastkowy [holicy.pl] http://www.youtube.com/watch?v=_t393utga98 4. Pozycyjny system liczbowy: wprowadzenie http://www.youtube.com/watch?v=k5kijxwnn2q 5. [Systemy liczbowe] Całkowite liczby binarne i dziesiętne - przeliczanie [helpbay.org] http://www.youtube.com/watch?v=evq6e85p50 5 I LICEUM OGÓLNOKSZTAŁCĄCE IM. KAZIMIEZA BODZIŃSKIEGO W TANOWIE MG JEZY WAŁASZEK, HTTP://EDU.I-LO.TANOW.PL/ Strona 28