gpt4 book ai didi

hex - 在 z80 汇编器中将 8 位数字转换为十六进制

转载 作者:行者123 更新时间:2023-12-04 20:59:02 25 4
gpt4 key购买 nike

我正在使用 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

任何人都可以建议反向工作的解决方案或提供更好的解决方案吗?

最佳答案

此代码将 DE 具有 ASCII 中的十六进制数并将其转换为 A 中的二进制数。它假定 DE 是有效的十六进制数并使用大写的“A”到“F”。如果使用小写字母或 '0' .. '9' 和 'A' .. 'F' 之外的任何 ASCII 字符,它将失败。

HexToNum ld   a,d
call Hex1
add a,a
add a,a
add a,a
add a,a
ld d,a
ld a,e
call Hex1
or d
ret

Hex1 sub a,'0'
cp 10
ret c
sub a,'A'-'0'-10
ret

更新:现在已经测试了代码并修复了在 Hex1 中处理 'A' .. 'F' 案例的错误。

更新:使用比“sla a”更快的“add a,a”。请注意,如果速度是一个问题,那么使用查找表可以更快地完成两种转换。

关于hex - 在 z80 汇编器中将 8 位数字转换为十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22838444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com