global readf section .text readf: push rbp mov rbp,rsp push rbx push rcx push rdx push rsi push rdi mov rbx,[rbp+32] ; filename mov rax,5 ; sys_open mov rcx,0 ; O_RDONLY int 0x80 cmp rax, -4096 ja ferror mov rsi,rax ; fd mov rax,19 ; sys_lseek mov rbx,rsi ; fd mov cx,[rbp+40] ; offset mov rdx,1 ; SEEK_CUR int 0x80 mov rax,3 ; sys_read mov rbx,rsi ; fd mov rcx,[rbp+16] ; buffer mov rdx, 4 ; buffer_size int 0x80 mov rax,6 ; sys_close mov rbx,rsi ; fd xor bl,bl xor ax,ax xor rcx,rcx xor rdx,rdx mov cx,4 mov rdi,[rbp+16] hextoi: mov al, byte [rdi+rcx-1] cmp al, 0xa je loend cmp al, 'A' jl digit cmp al, 'F' jg ferror sub al, 'A'-10 jmp addd digit: cmp al, '0' jl ferror cmp al, '9' jg ferror sub al, '0' addd: mov si, cx mov cl, bl shl ax, cl mov cx, si add bl, 4 add dx, ax loend: loop hextoi mov rax,[rbp+24] mov [rax],dx mov rax,0 jmp fend ferror: mov rax,1 fend: pop rdi pop rsi pop rdx pop rcx pop rbx pop rbp ret 32