我正在使用 z80 为 ZX Spectrum 编写游戏,但遇到了一点问题。我操纵了一个例程,将“a”寄存器中保存的数字转换为“de”中保存的十六进制值。我不确定如何转换另一种方式,EG 在 de 中传入一个十六进制值并将其转换为保存在“a”中的十进制值。
注意:以下例程将输入转换为表示值 0 到 F 的 ascii 值。例如,如果 a = 255,则 d =70 和 e = 70,因为“F”是 ascii 值 70。
NumToHex ld c, a ; a = number to convert
call Num1
ld d, a
ld a, c
call Num2
ld e, a
ret ; return with hex number in de
Num1 rra
rra
rra
rra
Num2 or $F0
daa
add a, $A0
adc a, $40 ; Ascii hex at this point (0 to F)
ret
任何人都可以建议一个解决方案来反向工作或提供更好的解决方案吗?