global _main
extern _printf
extern _scanf
SECTION .data
formater: db "%d",0 ;%c
formater2: db "%d",0 ;%c
formaterek: db "%d",0 ;%c
message2: db "r",0
message3: db "k",0
mess4: db "even!",0
mess5: db "odd!",0
myslnik: db "-",0
newline: db "",0xa,0
spaced: db "F",0
zmienna: dd 0
zmienna2: dd 0
zmienna3: dd 0
zmienna4: dd 0
SECTION .text
_main:
push ebp
mov ebp, esp
mov ebx,1 ;constant
mov edx,2 ;constant
mov esi,15 ; esi to jest dlugosc tego "k" np. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
mov edi, 4 ; od 51 i w dół piramida sie zmniejsza, a od 52 i w gore sie zwieksza, max wartosc edi to wartosc esi
;innymi slowy sterowanie od 2 do 50 :)
test esi,1
jp wyskocz_stad0 ; probably can be still jz instead jp (probably).
druga:
mov ecx,0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
iteruj:
inc ecx ;ecx=1
mov [zmienna],ecx ;zmienna=1
push ecx
push spaced ;"F"
call _printf
add esp,8
mov ecx,[zmienna] ;ecx=1
cmp ecx,ebx ;ecx==ebx , mean 1==0
jne iteruj
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
jakas_nazwa:
; dec esi ; esi = 14,13,12,11,10,9,8,7,6,5,4,3,2,1
; dec esi
inc edx ;edx=3 || 4 || 5 || 6 || 7 || 8
mov [zmienna3],edx ;zmienna=3
push edx
push message3 ; "K"
call _printf
add esp,8
mov edx,[zmienna3] ;edx=3
cmp esi,1 ; 14==1 | esi ==1
je wyskocz_stad
cmp edx,esi ;edx==esi , mean 3 ==14
jne jakas_nazwa
dec esi
dec esi
inc ebx
mov [zmienna2],ebx
push ebx
push newline
call _printf
add esp,8
mov ebx,[zmienna2]
cmp ebx,edi
jne druga
wyskocz_stad:
leave
ret
wyskocz_stad0:
push eax
push mess4
call _printf
add esp,8
leave
ret
Jeśli w komentarzach do kodu napisałem błędne wartości (błędny komentarz), czy coś to sorry. Zamiast w "spaced", która ma wartość "F", możesz dać spację " " oraz zamiast "k", która jest w message3, jak chcesz to napisz "-".
Sposób działania:
mov esi, 15 - szerokość piramidy
mov edi, 4 - wysokość piramidy
Szerokość piramidy, bodajże od 1 do ilu tam chcesz
Wysokość piramidy od 2 do połowy esi. Czyli jak esi ma 101, to max. wartość w rejestrze edi, żeby zobaczyć efekty wysokości piramidy może wynosić połowę wartości z rejestru esi, czyli w tym przypadku 51.
Dla takich danych:
mov esi, 9
mov edi, 6
rysuje taką piramidę:
Fkkkkkkkkk
FFkkkkkkk
FFFkkkkk
FFFFkkk
FFFFFk
a dla takich:
mov esi, 9
mov edi, 3
taką
Fkkkkkkkkk
FFkkkkkkk
Szczególne podziękowania za pomoc w napisaniu kodu dla:
Jester01, zid
z kanału IRC:
https://kiwiirc.com/client/irc.freenode.net/##asm