Ja vs. asembler pod Linuksem – 1:0

Dostałem do wykonania projekt z architektury komputerów, polegający na napisaniu pewnego programu w asemblerze i w związku z tym, że windows nie jest moim ulubionym systemem i staram się w tym semestrze go unikać, postanowiłem pisać pod Linuksem  i na ten system właśnie (NASM).

Oto treść zadania:

Napisz program, który pobiera ciąg znaków z wejścia i wypisuje na wyjściu znaki z tego ciągu – jeden znak w linii. Program powinien zakończyć pracę po naciśnięciu przez użytkownika klawisza BACKSPACE + modyfikacje.

Modyfikacje:

  • Każdy znak w nowej linii będzie poprzedzony ilością spacji równą numerowi wiersza.
  • Inny klawisz, oprócz backspace
  • Poniżej statystyka – wypisywanie i zliczanie liter dużych, małych, cyfr i znaków specjalnych

Z materiałami do nauki nie było łatwo, bo większość kursów jest o programowaniu w dosie, a kursy linuksowe najczęściej opisują niewiele więcej niż ‚Hello world’. Zadanie samo w sobie było raczej dla piszących pod dosa, bo musiałem na przykład zaprogramować bezbuforowe wejście klawiatury, które pod dosem jest banalnie łatwe do zrobienia (gotowa funkcja), a pod Linuksem sprawia trochę problemów (sam go nie napisałem, wkleiłem po prostu ~80 linijek tekstu znalezionego w sieci i przy oddawaniu projektu mówiłem, że jest to odpowiednik trzech linijek, które pisali inni z mojej grupy).

Aby ułatwić zadanie ludziom, którzy mają, lub będą mieli kiedyś podobny program do napisania na jakieś zajęcia, umieszczam źródła programu wraz z makefile’em do pobrania, oraz źródło do przeglądania online. Mam nadzieję, że komuś, kiedyś się przyda 😉