문제

많은 프로젝트 Euler 문제는 여러 번 나누기 점검을해야하기 때문에이 작업을 수행하는 가장 빠른 방법을 알아 내려고 노력했습니다. ZX81 기초적인.

지금까지 나는 비교했다 (N/D) 에게 INT(N/D) 확인하려면 N 분할 가능합니다 D 아니면 아니에요.
나는 시험을하는 것에 대해 생각하고있다 Z80 머신 코드, 나는 아직 기계 코드의 기본에서 변수를 사용하는 방법을 아직 찾지 못했습니다.

어떻게 달성 할 수 있습니까?

도움이 되었습니까?

해결책

무작위 화를 ZX81에서 사용할 수 있는지 모르지만 조립품에서 루틴을 호출하는 데 사용할 수 있다고 생각합니다. 인수를 전달하려면 무작위 화를 실행하기 전에 고정 메모리 위치를 설정하려면 Poke를 사용해야 할 수도 있습니다.

ZX Basic을 지원하기 위해 ROM에서 구현 된 루틴 목록을 찾아야합니다. 떠 다니는 작업을 수행 할 몇 가지가 있다고 확신합니다.

부동 소수점의 대안은 고정 점 수학을 사용하는 것입니다. 수학 공동 프로세서가없는 이러한 상황에서는 훨씬 빠릅니다.

Sinclair 사용자 문제에서 더 많은 정보를 찾을 수도 있습니다. 그들은 ZX 스펙트럼에서 프로그래밍과 관련된 몇 가지 기사를 게시했습니다.

다른 팁

반복적으로 빼서 기계 코드 에서이 작업을 매우 빠르게 수행 할 수 있습니다. 기본적으로 다음과 같은 절차가 있습니다.

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을 사용하여 BASIC에서 전화 할 수 있습니다. 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

이것은 내가 Z80에 쓴 소개입니다. 이것은 깃발에 익숙하지 않으면 깃발을 설명합니다. ZX81 초점이 아닌 스펙트럼이지만 기본 사이트에서 좋은 Z80 물건에 대한 더 많은 링크가 있습니다.

16 비트 버전은 상당히 비슷하지만 레지스터 쌍 작업을 사용합니다. 16 비트를 넘어야한다면 조금 더 복잡해질 것입니다.

당신이 이것을로드하는 방법은 당신에게 달려 있습니다. 그러나 전통적인 방법은 데이터 진술과 찌르기를 사용하는 것입니다. 그래도 어셈블러가 당신을위한 기계 코드를 알아내는 것을 선호 할 수도 있습니다!

기존 솔루션이 충분할 수 있습니다. 프로파일 링의 병목 현상이라고 생각하면 더 빠른 것으로 대체하십시오.

(물론 똑 바른 얼굴로 말했다.)

어쨌든 ZX81에서는 빠른 모드로 전환 할 수 있습니다.

먼저 미리 알려진 메모리 위치에 값을 배치해야합니다. 그런 다음 Z80 어셈블러 내에서 동일한 위치를 사용하십시오. 둘 사이에 전달되는 매개 변수는 없습니다.

이것은 내가 (여전히) ZX Spectrum 48에 대한 기억을 기반으로합니다. 행운을 빕니다. 그러나 HW 업그레이드를 고려할 수 있습니다. ;/

Z80 머신 코드의 문제점은 플로팅 포인트 OPS가 없다는 것입니다 (그리고 그 문제에 대해 정수 분할 또는 곱하기는 없음). Z80 어셈블러에서 자신의 FP 라이브러리를 구현하는 것은 사소한 일이 아닙니다. 물론 내장 된 기본 루틴을 사용할 수 있지만 기본을 고수 할 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top