gpt4 book ai didi

math - Z80 组件 : How to add signed 8-bit value to 16-bit register?

转载 作者:行者123 更新时间:2023-12-04 17:15:30 25 4
gpt4 key购买 nike

我写了一个 Z80 反汇编程序,它从我的 SBC 中的 ROM 运行。我需要做的最后一件事(除了尚未发现的错误)是转换相对地址并将它们输出为绝对地址,这样当反汇编程序遇到五个 JR 操作码变体之一时,它会显示绝对地址JR 操作码指向。

JR 操作码变体使用 8 位偏移值来告诉 Z80 跳转到内存中的哪个位置。偏移量是一个单一的有符号 (-128 <-> 127) 字节,我需要将其添加到 HL 寄存器中的当前内存位置以获得绝对地址。

我的大脑似乎正遭受严重的语法错误,甚至可能被零除,因为我一生都无法弄清楚如何将 8 位有符号(或 2 的补码)字节添加到 16 位注册获取绝对地址。已经搜索了互联网,没有答案。

任何人都可以提出解决方案或指出正确的方向吗?

最佳答案

最简单的方法是将 8 位值符号扩展为 16 位,然后使用 16 位加法。这是一些执行此操作的代码。 A是 8 位有符号值和 HL是 8 位有符号值将被添加到的 16 位基地址。结果在 HL

   LD  E,A
ADD A,A ; sign bit of A into carry
SBC A,A ; A = 0 if carry == 0, $FF otherwise
LD D,A ; now DE is sign extended A
ADD HL,DE

还要记住,对于 JR偏移量是相对于指令后面的地址,而不是 JR 的地址指令本身。

关于math - Z80 组件 : How to add signed 8-bit value to 16-bit register?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49070981/

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