global octdiv section .text octdiv: push rbp mov rbp,rsp push rbx push rcx push rdx push rsi push rdi mov rax,[rbp+24] ; source mov rcx,[rbp+16] ; buffer mov bx,3 xor rsi,rsi ; for counter xor rdx,rdx ; for div lstart: div bx add dx, 48 mov [rcx+rsi], dx xor dx,dx inc rsi cmp rsi,11 jg lbreak cmp ax,0 jg lstart mov rdx,rcx mov rcx,rsi shr rcx,1 revert: mov rdi,rsi sub rdi,rcx mov al,[rdx+rdi] mov bl,[rdx+rcx-1] mov [rdx+rdi],bl mov [rdx+rcx-1],al loop revert mov rax,0 jmp lend lbreak: mov rax,1 lend: pop rdi pop rsi pop rdx pop rcx pop rbx pop rbp ret 16