gpt4 book ai didi

division - ZX81 BASIC 中的快速除法检查

转载 作者:行者123 更新时间:2023-12-04 07:41:45 26 4
gpt4 key购买 nike

由于许多 Project Euler 问题需要您多次进行可分性检查,因此我一直试图在 ZX81 中找出执行此任务的最快方法。基本的。

到目前为止,我已经比较过 (N/D)INT(N/D)检查,是否N可被 D 整除或不。
一直想在Z80 machine code做测试,我还没想好如何在机器码中使用BASIC中的变量。

如何实现?

最佳答案

您可以通过重复减法在机器代码中非常快速地完成此操作。基本上你有一个程序,如:

set accumulator to N
subtract D
if carry flag is set then it is not divisible
if zero flag is set then it is divisible
otherwise repeat subtraction until one of the above occurs

8 位版本将类似于:
DIVISIBLE_TEST:
LD B,10
LD A,100

DIVISIBLE_TEST_LOOP:
SUB B
JR C, $END_DIVISIBLE_TEST
JR Z, $END_DIVISIBLE_TEST
JR $DIVISIBLE_TEST_LOOP

END_DIVISIBLE_TEST:
LD B,A
LD C,0
RET

现在,您可以使用 USR 从基本调用。 USR 返回的是 BC 寄存器对中的任何内容,因此您可能想要执行以下操作:
REM poke the memory addresses with the operands to load the registers
POKE X+1, D
POKE X+3, N
LET r = USR X
IF r = 0 THEN GOTO isdivisible
IF r <> 0 THEN GOTO isnotdivisible

This is an introduction I wrote to Z80 which should help you figure this out.如果您不熟悉这些标志,这将解释它们。
尽管它关注的是 Spectrum 而不是 ZX81,但从主站点加载了更多指向优质 Z80 内容的链接。

16 位版本非常相似,但使用寄存器对操作。如果您需要超过 16 位,它会变得更加复杂。

您如何加载它取决于您 - 但传统方法是使用 DATA 语句和 POKE。不过,您可能更喜欢让汇编程序为您找出机器代码!

关于division - ZX81 BASIC 中的快速除法检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/647721/

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