HEX_OUT: db "0x0000", ASCII_END

; SR to convert hex values into ASCII strings
; This SR is going to mess up some registers
; since it fills the register with the desired 
; pointer toward the string.

hex_to_ascii:
	mov cx, 0 ; incrementor

	hexloop:
		cmp cx, 4 ; check if we reached the end 
		je hexreturn ; if so just return our new ASCII string
		
		mov ax, dx

		; mask the hex value in ax so that we get the last "char"
		and ax, 0x000f
	
		; convert ax into ASCII (numeric)
		add al, ASCII_OFFSET_NUM ; add 0x30

		cmp al, 0x39 ; if al (char) > "9"
		jle hexloop2

		add al, 7 ; 7 distance from "A"

	hexloop2:
		; Write the char into the HEX_OUT string
		mov bx, HEX_OUT + 5
		sub bx, cx

		mov [bx], al ; write the char into the string
		ror dx, 4 ; "rotate" the string

		inc cx ; increment and go onto next char
		jmp hexloop

	hexreturn:
		mov bx, HEX_OUT
		ret
