; 2520 is the smallest number that can be divided by each of the numbers ; from 1 to 10 without any remainder. ; What is the smallest positive number that is evenly divisible by all ; of the numbers from 1 to 20? extern printf SECTION .data flag: db "%d",10,0 ; "%d\n\0" SECTION .text global main global is_divisible main: push rbp ; set up stack mov rbp, rsp mov rax, 2520 ; value to start at (given) mov rcx, 20 ; divisor (counting down) .loop add rax, rcx push rcx .isdiv xor rdx, rdx ; clear rdx for div push rax ; save rax before dividing div rcx ; rdx:rax/rcx = rax remainder rdx pop rax ; reload rax to be divided again cmp rdx, 0 ; the number was divisible, keep going loopz .isdiv ; loop exits if rdx is non zero OR rcx is 0 cmp rcx, 0 ; if rcx = 0, it means it looped 20 to 1 w/o jz .print ; any remainders, that's our number! ; if you get here, number couldn't be evenly divided by all numbers pop rcx jmp .loop .print: mov rdi, flag ; arg 1 (format) mov rsi, rax ; arg 2 (value) mov rax, 0 ; no xmm registers call printf wrt ..plt pop rbp mov rax, 0 ret