;TODO fix null problem, allow passing value insted of pointer bios_print: pusha mov ah, 0x0e .print_loop: mov al, [bx] cmp al, 0 je .fini test cx, cx ; if cx is zero, ascii, otherwise hex string jne .print_hex int 0x10 .print_hex_ret: inc bx jmp .print_loop .fini: mov al, 0xd int 0x10 mov al, 0xa int 0x10 popa ret .print_hex: mov al, '0' int 0x10 mov al, 'x' int 0x10 mov al, [bx] shr al, 4 call .bios_print_nibble mov al, [bx] and al, 0x0f call .bios_print_nibble mov al, ' ' int 0x10 jmp .print_hex_ret .bios_print_nibble: cmp al, 9 ja .print_hex_letter add al, 0x30 int 0x10 ret .print_hex_letter: add al, 0x57 int 0x10 ret