Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz  

Autor artykułu: mgr Jerzy Wałaszek

©2021 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Przykładowa Maszyna Cyfrowa I

Projekty programów dla PMC

SPIS TREŚCI
Podrozdziały
W rozdziale umieściliśmy zbiór prostych projektów do zrealizowania w asemblerze PMC. W pierwszej kolejności należy narysować schemat blokowy tworzonego programu - nie starajcie się rozwiązywać problemu bezpośrednio w edytorze. Mając schemat blokowy przekształcamy każdą z operacji na ciąg instrukcji dla procesora PMC. Oto przykład rozwiązania:

Projekt przykładowy

Napisać program dla PMC, który odczyta liczbę dodatnią n, a następnie policzy sumę kolejnych wartości:

1 + (-2) + 3 + (-4) + 5 + (-6) +... + (+/-n)

Analiza

obrazek

Program ma odczytać pewną wartość. Będziemy więc potrzebowali zmiennej na przechowanie tej wartości. Do odczytu liczby zastosujemy gotowy algorytm z poprzedniego rozdziału. Po odczytaniu tej liczby mamy sumować kolejne wartości od 1 do n, które przyjmują znak dodatni dla liczb nieparzystych, a znak ujemny dla parzystych. Będzie więc nam potrzebna następna zmienna przechowująca te wartości. Liczba jest parzysta, jeśli dzieli się przez 2. Skoro tak, to w zapisie dwójkowym ostatni bit musi mieć wartość 0. W przeciwnym razie po podzieleniu przez 2 otrzymywalibyśmy resztę 1:

2 - 10(2), 4 - 100(2), 6 - 110(2), 8 - 1000(2), 10 - 1010(2) - liczby parzyste
1 - 1(2), 3 - 11(2), 5 - 101(2), 7 - 111(2), 9 - 1001(2), 11 - 1011(2) - liczby nieparzyste

Wynika z tego, iż do stwierdzenia, czy dana liczba jest parzysta lub nie wystarczy zbadać ostatni, najmłodszy bit tej liczby. Kolejne liczby należy sumować. Suma musi być umieszczona w osobnej zmiennej. Oznaczmy więc zmienne następująco:

n - liczba sumowań
i - kolejne liczby naturalne, które będą sumowane
s - wartość sumy.

Teraz możemy przystąpić do narysowania odpowiedniego schematu blokowego, a następnie na jego podstawie utworzymy program dla PMC.

        RUN START

N:      DAT 0  ;tutaj trafi odczytana liczba
X:      DAT 0  ;zmienna pomocnicza
I:      DAT 1  ;kolejne liczby naturalne
S:      DAT 0  ;wartość sumy przemiennej

START:  LDA INP    ;odczytujemy znak z bufora
        JZR #START ;bufor zajęty?
        JMI #START ;bufor pusty?
LP1:    SUB #"0"   ;obliczamy wartość cyfry
        STA X      ;i zapamiętujemy ją tymczasowo
        LDA N      ;N przemnażamy przez 10
        MUL #10
        ADD X      ;dodajemy cyfrę
        STA N      ;zapisujemy wynik
LP2:    LDA INP    ;pobieramy kolejny znak
        JZR #LP2   ;czekamy na dostępność bufora
        JMI #LP3   ;ale kończymy, gdy pusty. Wynik w N
        JMP #LP1   ;inaczej przetwarzamy znak
LP3:    LDA N      ;sprawdzamy, czy n-i < 0
        SUB I
        JMI #0     ;jeśli tak, to stop
        LDA I      ;sprawdzamy, czy i jest parzyste
        AND #1     ;badając najmłodszy bit
        JZR #SPAR
        LDA S      ;i nieparzyste - dodajemy
        ADD I
        JMP #ON1
SPAR:   LDA S      ;i parzyste - odejmujemy
        SUB I
ON1:    STA S      ;uaktualniamy sumę
        INC I      ;zwiększamy i o 1
        JMP #LP3   ;i kontynuujemy pętlę
Na początek:  podrozdziału   strony 

Projekty

Projekt nr 1

Napisz program dla PMC, który wypisze na środku wyświetlacza znakowego słowo KONIEC, a następnie będzie je przesuwał w prawo i w lewo odbijając od krawędzi.

Projekt nr 2

Napisz program dla PMC, który będzie w kółko wypisywał na wyświetlaczu znakowym słówko KONIEC w ten sposób, iż będzie się ono wysuwało ze strony lewej i nikło po prawej stronie. Po całkowitym zniknięciu tego słówka ma się ono od nowa wysuwać literka po literce ze strony lewej i przemieszczać na prawo, aż do zniknięcia.

Projekt nr 3

Napisz program dla PMC, który będzie odczytywał teksty wprowadzane przez użytkownika i wyświetlał je na wyświetlaczu znakowym zmieniając wszystkie literki "a" na "o", a wszystkie literki "o" na "a". Duże znaki mają pozostać bez zmian.

Projekt nr 4

Napisz program dla PMC, który będzie wczytywał teksty wprowadzane przez użytkownika obliczając na bieżąco liczbę wpisanych przez niego samogłosek.

Projekt nr 5

Napisz program dla PMC, który będzie odczytywał teksty wprowadzane przez użytkownika i wyświetlał je na wyświetlaczu znakowym pomijając jednak wszystkie samogłoski i spacje.

Projekt nr 6

Napisz program dla PMC, który będzie odczytywał liczby dziesiętne wprowadzone przez użytkownika i na bieżąco obliczał ich sumę. Działanie programu ma być kończone w przypadku wpisania liczby 0.

Projekt nr 7

Napisz program dla PMC, który będzie odczytywał liczby dziesiętne wprowadzane przez użytkownika i na bieżąco liczył ilość liczb o wartości większej niż 10. Działanie programu ma być przerywane w przypadku podania przez użytkownika liczby o wartości 0.

Projekt nr 8

Napisz program dla PMC, który będzie odczytywał liczby dziesiętne wprowadzane przez użytkownika i na bieżąco wyszukiwał największą liczbę z dotychczas wprowadzonych. Działanie programu ma być przerywane w przypadku podania przez użytkownika liczby o wartości 0.

Projekt nr 9

Napisz program dla PMC, który wczyta liczbę podaną przez użytkownika, a następnie wyświetli na wyświetlaczu znakowym tyle literek "A", ile wynosi wartość wprowadzonej liczby.

Projekt nr 10

Napisz program dla PMC, który odczyta liczbę podaną przez użytkownika, a następnie policzy sumę kolejnych liczb naturalnych od 1 do podanej przez użytkownika liczby włącznie.

Projekt nr 11

Napisz program licznika, który na wyświetlaczu 7-mio segmentowym LED będzie wyświetlał kolejne liczby od 0 do 59. Po osiągnięciu wartości 59 licznik ten ma się zerować i zliczać od początku. Działanie programu ma być przerywane kliknięciem przycisku 0 na panelu IOP.

Projekt nr 12

Napisz program, który wyświetli na wyświetlaczu 7-mio segmentowym LED liczbę 12345, a następnie będzie po kolei zwiększał jej cyfry o 1. Gdy dana cyfra osiągnie wartość 9, to powinna zmieniać się na 0. Działanie programu ma być przerywane kliknięciem przycisku nr 0 na panelu IOP.

Projekt nr 13

Zaprojektuj na panelu wyświetlaczy 7-mio segmentowych 4-ro cyfrowy licznik w kodzie szesnastkowym zliczający wstecz od wartości FFFF. Program ma się kończyć po osiągnięciu przez ten licznik stanu 0000.

Projekt nr 14

Zaprojektuj program, który odczyta z portu INP liczbę dziesiętną, przeliczy ją na liczbę szesnastkową i wynik wyświetli na wyświetlaczu 7-mio segmentowym LED.

Projekt nr 15

Zaprojektuj program, który będzie monitorował stan przycisków IOP wyświetlając go jako liczbę w kodzie szesnastkowym na wyświetlaczu 7-mio segmentowym LED.

Na początek:  podrozdziału   strony 

Projekty dla ambitnych

Projekt nr 1

Napisz program dla PMC, który odczyta tekst wprowadzony przez użytkownika, umieści go w zarezerwowanym do tego celu obszarze pamięci PMC, a następnie zacznie wyświetlać go w kółko przesuwając na wyświetlaczu znakowym w lewą stronę. Dobierz odpowiednią pętlę opóźniającą, aby tekst był dobrze czytelny w trakcie przewijania.

Projekt nr 2

Napisz program dla PMC, który odczyta 10 liczb dziesiętnych ze znakiem wprowadzonych przez użytkownika, umieści je w odpowiednio zarezerwowanej do tego celu tablicy, a następnie wyszuka wśród tych liczb liczbę największą i najmniejszą, policzy ich różnicę i wynik wypisze na wyświetlaczu znakowym lub na wskaźnikach 7-mio segmentowych LED.

Projekt nr 3

Napisz program dla PMC, który odczyta liczbę w systemie rzymskim, obliczy jej wartość w systemie dziesiętnym i wyświetli ją na wyświetlaczu znakowym lub na wskaźnikach 7-mio segmentowych LED.

Projekt nr 4

Napisz program dla PMC, który odczyta liczbę, a następnie przeliczy ją na liczbę w systemie rzymskim i wynik wyświetli na wyświetlaczu znakowym.

Projekt nr 5

Napisz program szyfrujący teksty wprowadzane przez użytkownika. Szyfrowanie powinno być tak zaprojektowane, iż wprowadzenie zaszyfrowanego tekstu spowoduje jego deszyfrację. Wynik działania programu powinien być widoczny na wyświetlaczu znakowym.

Projekt nr 6

Napisz program obliczający w odpowiednio zarezerwowanej do tego celu tablicy zadaną ilość liczb pierwszych.

Projekt nr 7

Napisz program, który odczyta 10 dowolnych liczb dziesiętnych do zarezerwowanej tablicy, a następnie uporządkuje je rosnąco.

Projekt nr 8 (trudne!!!)

Napisz program gry w zgadywankę. Pierwszy gracz wprowadza liczbę, którą program zapamiętuje. Następnie drugi gracz stara się ją odgadnąć. Wpisuje on swoją liczbę. Jeśli jest mniejsza od liczby gracza pierwszego, to program wypisuje tekst "ZA MAŁO". Jeśli jest większa, to program wypisuje "ZA DUŻO". Jeśli jest równa, to program wypisuje "ODGADŁEŚ, BRAWO". Przed wypisaniem nowego tekstu na wyświetlaczu znakowym poprzedni napis powinien być w całości usuwany. Na wskaźnikach 7-mio segmentowych LED program powinien wypisywać numer tury. Jeśli gracz drugi nie odgadnie wprowadzonej liczby w 7-mej kolejce, program wypisuje napis "PRZEGRAŁEŚ", a na wskaźnikach LED powinna pojawić się wartość liczby gracza nr 1.

Projekt nr 9

Napisz program, który wyrysuje obrazek logo na ekraniku graficznym.

Projekt nr 10 (trudne !!!)

Napisz program, który utworzy na wskaźnikach LED 10 cyfrowy licznik w kodzie piątkowym liczący w sposób ciągły. Program zaprojektuj tak, aby łatwo można było zmieniać bazę systemu, w którym pracuje licznik.

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2021 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.