.686 extrn __read :near extrn __write :near extrn _ExitProcess@4 :near public _main public _podprogram public _wys _DATA SEGMENT dword public 'DATA' use32 x dd 5 y dd 5 z dd 5 cyfry db 10 DUP (0) _DATA ENDS _TEXT SEGMENT dword public 'CODE' use32 ASSUME cs:_TEXT, ds:_DATA _main: push dword PTR x push dword PTR y push dword PTR z call _podprogram call _wys mov ecx, 10 push ecx ; liczba znaków wyświetlanego tekstu push dword PTR OFFSET cyfry ; położenie obszaru push dword PTR 1 ; uchwyt urządzenia wyjściowego call __write ; wyświetlenie znaków add esp, 12 ; usunięcie parametrów ze stosu push dword PTR 0 ; kod powrotu programu call _ExitProcess@4 _podprogram PROC ;push ebp ;mov ebp,esp enter 1,0 mov eax,[ebp]+16 ;x mov ebx,[ebp]+12 ;y mov ecx,[ebp]+8 ;z mov dword PTR [esp-4],10 ;zmienna lokalna ponizej sladu mov edi,dword PTR [esp-4] mul ebx mul ecx mul edi ;mov esp,ebp ;pop ebp leave ret _podprogram ENDP _wys PROC ;kopiowanie liczb 8bajtowych z rejestru EAX do pamieci, ;co umozliwia wyswietlanie tych jebanych liczb push ebx push ebp push esi push edi mov ecx, 10 ;licznik obiegu mov ebx, 9 ;indeks poczatkowy mov edi, 10 petla: mov edx, 0 div edi ; dzielenie przez 10 add dl, 30h ; zamiana na ascii mov cyfry[ebx],dl ; odeslanie kolejnej cyfry dec ebx ; dekrementacja modyfikatora loop petla pop ebx pop ebp pop esi pop edi ret _wys ENDP _TEXT ENDS END