Programowanie Niskopoziomowe – MARIE

Na ostatnim wykładzie z systemów operacyjnych pojawiła się MARIE (Machine Architecture that is Really Intuitive and Easy). Bardzo przyjemnie słuchało się o tym, że programiści nie musieliby już przepinać kabli na wielkich ścianach aby dodać 2 liczby, jednak sposób programowania tej maszyny – na dzień dzisiejszy – daleko odbiega od jej nazwy. Głównym problemem jest tutaj część: „Intuitive and Easy”. Mam swoje zdanie na temat intuicyjności i prostoty programowania 😉

Tak czy inaczej. Nie udało się uniknąć starcia z Assemblerem MARIE. Po szybkim zapoznaniu się z nim od razu zauważyłem, że Assembler, którego używa się w dzisiejszych komputerach jest wręcz językiem wysokiego poziomu 😉 Programowanie MARIE nie jest strasznie trudne, ale dość męczące. Tym bardziej, że na wykładzie dostaliśmy zadanie napisania programu sumującego n pierwszych wyrazów ciągu Fibonacciego.

Oczywiście na rozgrzewkę trzeba było napisać sobie kilka programów. Przykładowo program do dodawania dwóch liczb pobranych od użytkownika wygląda tak:

	Input
	Store 	TMP
	Input
	Add	TMP
	Halt
TMP,	DEC	0

Napisanie programu sumującego n pierwszych liczb ciągu Fibonacciego zajęło mi dobre kilka godzin, ze względu na to, że ciężko było się w nim połapać. Obowiązuje tu zasada: „Jeśli napisany kod nie działa jak należy, zamiast naprawiać – napisz go od nowa.”, którą oczywiście właśnie wymyśliłem.

Ogromnym utrudnieniem programowania tej maszyny jest fakt, ze nie daje się dodawać ani odejmować stałych bezpośrednio w kodzie. Trzeba je ręcznie zapisywać w kodzie. Przykładowy kod zwiększający N o 1:

	Load	N
	Add	ONE
	Store	N
	Halt
N,	DEC	0
ONE,	DEC	1

Nie ma także instrukcji do mnożenia więc programowanie czegoś bardziej złożonego jest raczej trudne ^^ Tak czy inaczej, muszę się przyznać, że podobała mi się ta zabawa w programowanie Undergroundowe 😉

Reklamy

10 myśli nt. „Programowanie Niskopoziomowe – MARIE

  1. Jak patrzę na tego asemblerka, to muszę przyznać, że jest on prosty i intuicyjny :). Mnożenie można bardzo łatwo zorganizować, nieco trudniej z dzieleniem, ale to też kwestia czasu :).
    Marie nigdy nie programowałem, ale miałem okazję pracować na Intelu 8086 :). Fajna zabawka.

    pozdrawiam

  2. @io:
    „Jak patrzę na tego asemblerka, to muszę przyznać, że jest on prosty i intuicyjny :)”

    Zapomniałeś dodać: „jak na Assemblera”.
    Ty wiesz jak ciężko było mi wytłumaczyć to znajomemu z roku, który do tej pory miał styczność tylko z Pascalem i widział na oczy ze 2 programy w C?
    To był dramat ^^

    Proste i intuicyjne to jest:
    a += b

    a na MARIE trzeba by tak:
    Load a
    Add a
    Add b
    Store a

  3. @Tarains: mi też miło że żyję 😉 – po prostu mam sporo rzeczy na głowie w ostatnim czasie i nie mam chwili żeby włączyć kompilator nawet

    Jeśli chodzi o liczenie tej sumy w Asm MARIE – wymyslenie nie bylo trudne, bo zasada jest podobna jak wszedzie. Gorzej bylo to napisac i potem poprawic bledy 🙂

  4. Pamiętałeś o tym, że suma n pierwszych liczb Fibonacciego to jest n+2 liczba Fibonacciego – 1 🙂
    P.S. A ja tam lubię wszelkiego rodzaju assemblerki.

  5. @Zed: faktycznie! ^^ Nigdy się nie zajmowałem ciągiem Fibonacciego i nawet nie zwróciłem na to uwagi, a to może uprościć program ^^ Zaraz poprawie 🙂

  6. No to ja mam taką zagwoste z Asemblera MARIE, mam wykonac zadanie
    (a*b) + (c*d) ale niestety jestem laikiem w tych sprawach i nie wiem jak sie za to zabrac, Pewnie trzeba zrobic jakąs pentle uzywajac JNS x albo Skipcond no ale nie wiem jak sie za to zabrac… CZy jestes w stanie mi pomóc??

  7. @Bierznik:
    Nie zajmowalem się MARIE już dość długo więc kodu nie podam, ale idea jest taka, żeby na przykład załadować (Load) jakąś zmienną wynikową (powiedzmy: W) i potem pętle – póki b != 0 (nie pamiętam warunku) zmniejszamy b o 1 i większamy W o a:

    while(b != 0) {
    b–;
    W+=a;
    }

    Podobnie trzeba zrobić z drugim wyrażeniem. Dla ułatwienia można zapisywać w W2 i wtedy na koniec dodać W i W2 i będzie wynik.

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s