Strona główna » Algorytmy » Assembler Zadania
 

Assembler Zadania

Zajęcia 10

Zadanie 1 (zajęcia)

Napisz program, który będzie szyfrował szyfrem Cezara. Napisany program powinien posiadać menu z którego użytkownik będzie mógł wpisać tekst jawny/szyfrogram (sugestia: wykorzystanie ah=10), dokonać przesunięcia liczby (liczba może być dodatnia lub ujemna) oraz wypisać wynik (metoda dowolna). Szyfrowane powinny być jedynie małe znaki alfabetu łacińskiego. Każdy znak inny niż litera powinien zostać pominięty (np. spacje, cyfry), a każda duża litera powinna być szyfrowana jak mała.

Krótki opis rozwiązania

Zajęcia 9

Zadanie 1 (zajęcia)

Napisz kalkulator do obliczeń ONP (Odwrotnej Notacji Polskiej). Program powinien wczytać dane do bufora przy pomocy ah=10, a następnie obliczyć wczytane wyrażenie. Jeśli podczas obliczeń wystąpi błąd program powinien wypisać odpowiedni komunikat. Program powinien obsługiwać podstawowe operacje: dodawanie, odejmowanie, mnożenie oraz dzielenie. Wersja rozszerzona powinna uwzględniać dodatkowo obliczanie silni, potęgowanie oraz wczytywanie i operowanie na liczbach ujemnych. Pamiętaj o obsłudze błędów.

Krótki opis rozwiązania

Program rozwiązuje równania zapisane w ONP. Wszystkie dane powinny zostać rozdzielone przy pomocy znaku spacji. Przykładowo:
3 5 +
4 10 -
5 3 + 8 * 4 /

Kalkulator wczytuje od użytkownika równanie zapisane w ONP. Program potrafi rozpoznać liczby dodatnie oraz ujemne (ujemna liczba musi mieć przed nią bezpośrednio znak minus np. -123). Pomiędzy danymi powinien stać znak przerwy (spacja). Znaki nie będące operatorami oraz cyframi są ignorowane jak zbędne znaki przerwy przed, w i po równaniu.

Rozpoznawane są operatory: '+' dodawania, '-' odejmowania, '*' mnożenia, '/' dzielenia (można jeszcze użyć znaku ':' ), '^' potęgowania oraz '!' silni. Błędy są wypisywane dla niepoprawnego zapisu ONP (niewykorzystana liczba lub operator nie ma odpowiedniej ilości argumentów). Ponadto każda operacja może wypisać błędy związane z przepełnieniem (wyjście poza zakres) lub nieprawidłowymi danymi (np. dzielenie przez 0 lub silnia liczby ujemnej).

Zajęcia 8

Zadanie 1 (zajęcia)

Napisz kalkulator, który nie będzie korzystał z gotowych funkcji do mnożenia oraz dzielenia. Obydwie operacje napisz samodzielnie przy wykorzystaniu przesunięć. Ze względu na problemy implementacji dzielenia dla nie potęg liczby 2 to zrób dzielenie przez 2 tak długo jak to możliwe, a potem sprawdź ile dzielnik mieści się w dzielnej i na tej podstawie zwróć wynik mnożenia. Pamiętaj o obsłudze błędów.

Krótki opis rozwiązania

W programie zostały zmienione procedury mnożenia oraz dzielenia tak, aby korzystały z operatorów przesunięć bitowych. Dodatkowo zostało dodane wsparcie dla liczb ujemnych.

Kalkulator najpierw wczytuje od użytkownika dwie liczby. Wpisywaną liczbę można zamienić na przeciwną poprzez wciśnięcie znaku minus, skasować ostatnią cyfrę używając Backspace i zatwierdzić wpisaną wartość Enterem. Ze względu na to, że jeden bit oznacza znak to zakres zmniejszył się do [-32767, 32767]. Program nie pozwoli wpisać liczby spoza tego zakresu. Rozpoznawane są operatory: '+' dodawania, '-' odejmowania, '*' mnożenia, '/' dzielenia (można jeszcze użyć znaku ':' ). W przypadku niepoprawnych danych dla operacji lub wyniku, który nie mieści się na 16 bitach wypisywany jest odpowiedni błąd.

Eksperymentalnie zostało dodane wsparcie dla innych systemów liczbowych (od binarnego do dziesiętnego włącznie) poprzez zmianę wartość zmiennej podst.

Zajęcia 7

Zadanie 1 (zajęcia)

Napisz kalkulator, który będzie wywoływał procedury, a dane przetrzymywał na stosie. Nie korzystaja z ah=9, aby wypisać łańcuchy tekstów. Przygotuj program do obsługi wyjątków w programie.

Krótki opis rozwiązania

Wszystkie dane są przechowywane na stosie dzięki odpowiedniemu przesuwaniu wierzchołka stosu, a wszystkie łańcuchy znaków są wypisywane przy użyciu własnej procedury. Na koniec wypisane zostaje wypisane obliczone równanie razem z wynikiem. Kalkulator najpierw wczytuje od użytkownika dwie liczby. Podczas wpisywania można zatwierdzić dane Enterem, kasować wprowadzone cyfry przyciskiem Backspace. Program rozpoznaje kolejne znaki i akceptuje jedynie cyfry jako części liczby.

Rozpoznawane są operatory: '+' dodawania, '-' odejmowania, '*' mnożenia, '/' dzielenia (można jeszcze użyć znaku ':' ). Program rozpoznaje następujące błędy: podczas dodawania / mnożenia dwóch liczb przekroczenie zakresu 16 bitów, podczas odejmowania błąd w przypadku uzyskania błędu ujemnego, podczas dzielenia wykrycie dzielenie przez 0. Wszystkie błędy powodują przerwanie wykonywania wybranej operacji, a odpowiedni komunikat zostaje wypisany.

Zajęcia 6

Zadanie 1 (zajęcia)

Napisz program, który zadeklaruje tablicę dynamiczną. Jego działanie powinno zarezerwować na stosie 11 słów i wszystkie wartości ustawić na 187. Następnie pierwsze sześć znaków ustaw na 250, a pozostałem pięć na wartość 255. Wypisz pierwszą część przy pomocy rejestru [DI], a drugą przy pomocy [zmienna + DI]. Zastosuj procedury i zwolnij na koniec pamięć.

Zajęcia 5

Zadanie 1

Napisz program, który wczyta od użytkownika znak, a następnie wypisze na ekran kod ASCII wczytanego znaku na ekran.

Zadanie 2

Napisz program, który wczyta od użytkownika liczbę zapisaną w postaci dziesiętnej (np. "123"), a następnie wypisze na ekran wczytaną liczbę. Przed wypisaniem program powinien przechowywać wczytaną liczbę w postaci liczbowej.

Zadanie 3 (z zajęć)

Napisz program, który wczyta dwie liczby i wykona na nich wybraną przez użytkownika operację arytmetyczną (+, -, *, /). Liczby wczytywane oraz wypisywane powinny być wypisane jako liczby dziesiętne np. w postaci "123".

Zajęcia 4

Zadanie 1 (zajęcia, grupa A)

Napisz program, który wczyta od użytkownika dwie wartości liczbowe (cyfry) a i b, a potem wypisze na konsolę wynik potęgowania ab. Wypisywane wartości mogą być wypisywane jako znaki ASCII.

Zadanie 2 (zajęcia, grupa B)

Napisz program, który będzie wypisywał kolejne wartości n!, gdzie n zostanie wczytane od użytkownika. Wypisywane liczby mogą być wypisane jako znaki ASCII.

Zajęcia 3

Zadanie 1 (zajęcia)

Napisz program, który wypisze ciąg znaków zapisany w pewnej zmiennej tekst znak po znaku, aż do napotkania znaku "$".

Zajęcia 2

Zadanie 1 (zajęcia)

Napisz program, który wypisze ciąg znaków zapisany w pewnej zmiennej tekst znak po znaku, aż do napotkania znaku "$".

Zajęcia 1

Zadanie 1 (zajęcia)

Skompiluj i uruchom program zapisany w pliku BAZA.ASM.

Zadanie 2 (zajęcia)

Napisz program, który wypisze tekst "Pierwszy program w asemblerze.", a następnie w nowej linii wypisze następny znak po 'C'. Wypisywany znak nie może zostać od razu ustawiony na 'D'.