+
+ WORD p_digits,'DIGITS',dovariable
+ db '0123456789abcdef'
+
+ WORD p_dot,'.',fasm
+ ;; ( v -- )
+ ;; Print TOP value as unsigned BASE integer
+ pushr rsi
+ mov rax,qword [rsp]
+ cmp rax,0
+ jge p_dot_positive
+ cmp qword [p_base_DFA],10
+ jne p_dot_positive
+ push '-'
+ DOFORTH p_emit
+ mov rax,qword [rsp]
+ neg rax
+p_dot_positive:
+ xor rdx,rdx
+ div qword [p_base_DFA] ; rdx:rax / BASE => q=rax, r=rdx
+ mov qword [rsp],rdx
+ cmp rax,0
+ je p_dot_remainder
+ push rax
+ DOFORTH p_dot
+p_dot_remainder:
+ pop rdx
+ xor rax,rax
+ mov al,[p_digits_DFA+rdx]
+ push rax
+ DOFORTH p_emit
+ popr rsi
+ next