%include "asm_io.inc" segment .data print_limit db 'Enter limit: ', 0 segment .bss limit resd 1 guess resd 1 segment .text global _asm_main _asm_main: enter 0,0 pusha mov eax, print_limit call print_string call read_int mov [limit], eax mov dword [guess], 5 while: mov eax, [guess] cmp eax, [limit] ja endwhile mov ebx, 3 while_factor: mov eax, ebx mul eax ; edx:eax = eax * eax jo end_factor cmp eax, [guess] jae end_factor ; while (f*f < guess) mov eax, [guess] mov edx, 0 div ebx ; guess / factor, remainded in edx (edx:eax) cmp edx, 0 je end_if ; && % != 0 add ebx, 2 ; factor += 2 jmp while_factor end_factor: mov eax, [guess] call print_int call print_nl end_if: add dword [guess], 2 jmp while endwhile: popa mov eax, 0 leave ret