diff --git a/lab2-v4/Makefile b/lab2-v4/Makefile new file mode 100644 index 0000000..71a5457 --- /dev/null +++ b/lab2-v4/Makefile @@ -0,0 +1,10 @@ +all: echo + +echo: echo.o + ld -melf_i386 echo.o -o echo + +echo.o: echo.s + as --32 echo.s -o echo.o + +clean: + rm echo echo.o diff --git a/lab2-v4/echo.s b/lab2-v4/echo.s new file mode 100644 index 0000000..73150b9 --- /dev/null +++ b/lab2-v4/echo.s @@ -0,0 +1,43 @@ +# Jan Potocki 2022 + +# Definicje numerow funkcji systemowych i ich argumentow +SYSEXIT = 1 +SYSREAD = 3 +SYSWRITE = 4 +STDIN = 0 +STDOUT = 1 +SYSCALL32 = 0x80 + +# Stale +buff_len = 1 +end_char = 'Q' + +.global _start + +.bss +# Bufor na czytany znak +buff: .space buff_len + +.text +_start: +mov $SYSREAD, %eax # Wczytanie znaku ze standardowego wejscia +mov $STDIN, %ebx # ...funkcja systemowa read +mov $buff, %ecx +mov $buff_len, %edx +int $SYSCALL32 + +mov $end_char, %eax # Sprawdzenie, czy wczytano znak konczacy +cmp %eax, buff +je koniec # ...jezeli tak, skok na koniec + +mov $SYSWRITE, %eax # Wypisanie znaku na standardowe wyjscie +mov $STDOUT, %ebx # ...funkcja systemowa write +mov $buff, %ecx +mov $buff_len, %edx +int $SYSCALL32 +jmp _start # Skok na poczatek (petla) + +koniec: +mov $SYSEXIT, %eax # Funkcja systemowa exit... +mov $0, %ebx # ...kod zakonczenia 0 +int $SYSCALL32