extern printf SECTION .data flag: db "%d",10,0 ; "%d\n\0" SECTION .text global main main: push rbp ; set up stack mov rbp, rsp xor rax, rax ; start at multiple (i = 0) mov r11, 0 ; sum = 0 mov r12, 1000 ; max = 1000 .loop xor rdx, rdx ; clear rdx (remainder) push rax ; save rax mov rcx, 5 ; divisible by 5 div rcx ; divide rdx:rax/rcx cmp rdx, 0 ; compare only remainder jz .sum ; if r = 0 , add to sum xor rdx,rdx ; clear rdx mov rax, QWORD [rsp] ; reload rax mov rcx, 3 ; divisible by 3 div rcx ; divide rdx:rax/rcx cmp rdx, 0 ; compare only remainder jnz .next ; if r = 0 , add to sum .sum add r11, QWORD [rsp] ; add to sum register .next pop rax ; return rax value from stack to be inc inc rax ; i++ cmp rax, r12 ; while rax < r12 (1000) jl .loop ; repeat mov rdi, flag ; arg 1 (format) mov rsi, r11 ; arg 2 (value) mov rax, 0 ; no xmm registers call printf wrt ..plt pop rbp mov rax, 0 ret