Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- STDIN = 0 # standardowe wejscie
- STDOUT = 1 # standardowe wyjscie
- SYSCALL = 0x80 # int 0x80 - wywolanie systemu op
- SYSEXIT = 1 # zakonczenie procesu
- SYSWRITE = 4 # numer funkcji write
- SYSREAD = 3
- EXIT_SUCCESS = 0 # kod powrotu
- LENGHT = 5 # Dlugosc linii
- # segment danych -------------------------------------
- .data
- napis: .string "*"
- space_len = . - napis
- spacja: .string " "
- len = . - spacja
- koniec_linii: .string "\n"
- end_len = . - koniec_linii
- msg_echo: .ascii " "
- msg_echo_len = . - msg_echo
- # Liczniki petli
- wysokosc: .long 0
- licznik_i: .long 0
- licznik_j: .long 0
- licznik_k: .long 0
- # segment tekstu (kodu) ------------------------------
- .text
- .global _start
- _start:
- #Funkcja czytajaca z klawiatury
- movl $SYSREAD, %eax # funkcja do wywołania - SYSREAD
- movl $STDIN, %ebx # 1 arg. - syst. deskryptor stdin
- movl $msg_echo, %ecx # 2 arg. - adres początkowy napisu
- movl $msg_echo_len, %edx # 3 arg. - długość łańcucha
- int $0x80
- movl msg_echo, %esi
- sbbl $48, %esi
- decl %esi
- movl %esi, wysokosc
- main_loop: # Poczatek glownej petli
- incl licznik_i
- movl $0, licznik_j
- print_space_loop: #Wypisywanie pustych pol
- incl licznik_j
- # Wywolanie funkcji pisz " " na stdout
- movl $SYSWRITE, %eax # kod funkcji SYSWRITE
- movl $STDOUT, %ebx # 1 arg. - syst. deskryptor stdout
- movl $spacja, %ecx # 2 arg. - adres początkowy napisu
- movl $space_len, %edx # 3 arg. - długość łańcucha
- int $SYSCALL # wywołanie przerwania programowego
- # wywolanie systemu op
- #-------------------------#
- movl wysokosc, %esi
- subl licznik_i, %esi
- incl %esi
- cmpl %esi, licznik_j
- jle print_space_loop
- movl $0, licznik_k
- print_symbol_loop: #Wypisywanie symboli
- incl licznik_k
- # Wywolanie funkcji pisz "*" na stdout
- movl $SYSWRITE, %eax # kod funkcji SYSWRITE
- movl $STDOUT, %ebx # 1 arg. - syst. deskryptor stdout
- movl $napis, %ecx # 2 arg. - adres początkowy napisu
- movl $len, %edx # 3 arg. - długość łańcucha
- int $SYSCALL # wywołanie przerwania programowego
- # wywolanie systemu op
- #-------------------------#
- movl licznik_i, %esi
- decl %esi
- imull $2, %esi
- cmpl %esi, licznik_k
- jle print_symbol_loop
- # Wywolanie funkcji pisz "\n" na stdout
- movl $SYSWRITE, %eax # kod funkcji SYSWRITE
- movl $STDOUT, %ebx # 1 arg. - syst. deskryptor stdout
- movl $koniec_linii, %ecx # 2 arg. - adres początkowy napisu
- movl $end_len, %edx # 3 arg. - długość łańcucha
- int $SYSCALL # wywołanie przerwania programowego
- # wywolanie systemu op
- #-------------------------#
- movl wysokosc, %esi
- cmpl %esi, licznik_i
- jle main_loop
- # Wywolanie funkcji exit (zakoncz proces)
- movl $SYSEXIT, %eax # kod funkcji SYSEXIT
- movl $EXIT_SUCCESS, %ebx # 1 arg. -- kod powrotu z programu
- int $SYSCALL # wywołanie przerwania programowego
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement