rendered paste bodysegment .data
textas db "kvadratas yra: ",0
segment .bss ; bss segmentas neapibrezhtiems duomenims
input resd 1 ; rezervuojam vieta vienam doublewordui (4 baitai)
segment .text ; texto segmentas kur prasideda programos operacijos
global _start ; defaultine funkcija kuria ELF linkeris ishkviecia
_kernel: ; mes naudosim procedura interaptams nes jos metu bus sukuriamas naujas stekas
int 80h
ret
_start:
; read()
push dword 15 ; buferio dydis
push dword input ; buferis
push dword 0 ; STDIN_FILENO numeris
mov eax,3 ; read() numeris
call _kernel ; kvieciam funkcija
add esp, byte 12 ; ishvalom steka kad galima butu panaudot kitas f-jas
; ---------- ATLIEKAM SHIEK TIEK ARITMETINIU VEIKSMU --------;
mov eax,[input]
imul eax ; edx:eax = eax*eax
mov ebx,eax
; write() -- writinam inputa
push dword 10; buferio dydis
push dword input ; zhinutes adresas
push dword 1 ; pushinam STDOUT_FILENO kuris lygus 1
mov eax,4h ; write() syscallas == 4
call _kernel ; kvieciam funkcija
add esp, byte 12 ; ishvalom steka
; write() -- writinam "kvadratas yra: "
push dword 14; buferio dydis
push dword textas ; zhinutes adresas
push dword 1 ; pushinam STDOUT_FILENO kuris lygus 1
mov eax,4h ; write() syscallas == 4
call _kernel ; kvieciam funkcija
add esp, byte 12 ; ishvalom steka
; write() -- writinam kvadrata
push dword 10; buferio dydis
push dword ebx ; zhinutes adresas
push dword 1 ; pushinam STDOUT_FILENO kuris lygus 1
mov eax,4h ; write() syscallas == 4
call _kernel ; kvieciam funkcija
add esp, byte 12 ; ishvalom steka
; exit(0)
push dword 0 ; pirmas ir paskutinis argumentas yr 0
mov eax,1h ; exit() syscallas == 1
call _kernel ; interaptas i kerneli ,kuris vel kviecia exit()