6502 실행 시간 계산 - 3부

이것은 MOS 6502용으로 작성된 어셈블리 언어 프로그램의 실행 시간 결정에 대한 시리즈의 세 번째이자 마지막 부분입니다. 파트 1은 찾을 수 있고 파트 2는 찾을 수 있습니다.

이 게시물에서는 이전 게시물의 코드를 최적화하여 실행 시간을 줄이려고 합니다. 이전에 어셈블리 프로그램을 최적화하려고 시도하지 않고 프로그램을 보면 내 직감이 $0400에 대한 포인터에 액세스하고 1024번 반복하는 데 전념하는 6개의 사이클이 시작하기에 좋은 장소가 될 수 있다고 말합니다.



간접 주소를 제거하고 각 페이지를 개별적으로 매우 명시적으로 채우도록 프로그램을 재구성하면 실행 시간이 1,081마이크로초 단축됩니다. 실행 시간을 개선하기 위해 추가로 개선할 수 있는 사항이 있다고 확신하지만 현재로서는 극히 제한된 어셈블리 지식만 가지고 있습니다. 내가 사용한 코드는 다음과 같다.

    LDA #$07        
    LDY #$00        
LOOP:   STA $0200,Y     
    INY 
    BNE LOOP

    LDA #$07 
LOOP2:  STA $0300,Y
    INY
    BNE LOOP2

    LDA #$07 
LOOP3:  STA $0400,Y
    INY
    BNE LOOP3

    LDA #$07 
LOOP4:  STA $0500,Y
    INY
    BNE LOOP4


이번 주 랩의 다른 실험에는 디스플레이를 하늘색으로 채우는 것이 포함됩니다.



이것은 단순히 누산기에 로드된 색상 코드를 $e 에서 $07 로 변경하는 것과 관련되었습니다.

또 다른 실험은 각 페이지의 색상을 4개의 개별 섹션으로 변경하는 것이었습니다.



다시 말하지만, 이것은 각 루프에 대해 누산기에 로드된 색상 코드를 변경하는 것과 관련되었습니다. $e, $a, $f$b .

마무리로, 조립에 대한 나의 첫 경험에 대한 몇 가지 생각과 느낌. 확실히 무장 해제 언어입니다. 저는 이제 마지막 학기에 있으며 프로그래밍에 대해 상당한 양을 알고 있는 것처럼 느껴지지만 어셈블리는 실제로 그것을 제거하고 주변의 모든 가정과 선입견 없이 조작되는 기계적인 데이터를 보게 만듭니다. 이 작업을 완료하는 데 있어 가장 어려운 학습 곡선 중 하나는 16진수로 돌아가 오버플로 및 이진수 제한에 대한 세부 정보를 기억하려고 노력하는 것이지만 저를 위한 검토이지만 첫 번째 학기 이후 의미 있는 방식으로 이러한 개념을 다루지 않았습니다. 거의 5년 전의 일이다. 그것들을 다시 이해하면 어셈블리 프로그램이 작동하는 방식의 논리를 따르는 데 많은 도움이 될 것입니다. 그 속으로 더 깊이 빠져들게 되어 흥분된다!

좋은 웹페이지 즐겨찾기