global hextostr section .text hextostr: 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,16 xor rsi,rsi ; for counter xor rdx,rdx ; for div lstart: div bx cmp dx, 0xA jl digit jmp letter digit: add dx, '0' jmp putc letter: add dx, 'A'-10 putc: mov [rcx+rsi], dx xor dx,dx inc rsi cmp rsi,4 jg error 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 error: mov rax,1 lend: pop rdi pop rsi pop rdx pop rcx pop rbx ret