これを機械コードで繰り返し行うことで、非常に高速に実行できます。ようなものになるだろう
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から呼び出すことができます。
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.あなたがそれらに慣れていない場合、これはフラグを説明します:あなたは、おそらくのような何かをしたいと思うので、BCレジスタ・ペアに何でも何USRリターンです。 ZX81に焦点を当てるのではなく、Spectrumであるにもかかわらず、メインのサイトからZ80の良いものへのリンクが増えています。
16ビットバージョンは、レジスタペア操作を使用してもかなり似ています。 16ビットを超える必要がある場合は、少し複雑になるでしょう。
どのようにロードするかはあなた次第ですが、従来の方法ではDATAステートメントとPOKEを使用していました。あなたはアセンブラがあなたのためにマシンコードを理解することを好むかもしれません!
ZX81 BASICを使用しているのはなぜですか? –
(エミュレートされた)Sinclair ZX81を使ってProject Eulerの問題を解決するための狂った小さなペットプロジェクト – vipirtti
私は地下に2つの実際のZX-81(大容量の16KBメモリモジュールを備えています)それらを取り除く心がなかった! –