소프트웨어 이식성 및 최적화
소개
오늘은 6502 Emulator 작업에 대한 첫 번째 경험에 대해 이야기하겠습니다.
6502은 16비트 주소 버스가 있는 8비트 프로세서입니다. 따라서 64킬로바이트(216바이트)에 액세스할 수 있습니다. 각 16비트 주소는 두 개의 8비트 바이트로 구성되므로 메모리는 각각 256바이트의 256페이지로 볼 수 있습니다.
두 가지 작업이 있습니다.
Calculate how long it takes for the code to execute, assuming a 1 MHz clock speed?
Calculate the execution time of the fastest version of this program that you can create?
1MHz 클럭 속도를 가정하여 코드를 실행하는 데 걸리는 시간을 계산해 보십시오.
우선 아래에서 작업하려는 코드를 볼 수 있고 실행하는 데 걸리는 시간을 계산할 수 있습니다.
lda #$00 ; set a pointer at $40 to point to $0200
sta $40
lda #$02
sta $41
lda #$07 ; colour number
ldy #$00 ; set index to 0
loop: sta ($40),y ; set pixel at the address (pointer)+Y
iny ; increment index
bne loop ; continue until done the page
inc $41 ; increment the page
ldx $41 ; get the current page number
cpx #$06 ; compare with 6
bne loop ; continue until done all pages
이 코드를 계산하려면 각 명령 실행 시간이 포함된 문서special가 필요합니다.
더 많은 정보를 제공하는 것 같아서 Excel 사진을 통해 계산을 공유하기로 결정했습니다.
이 프로그램의 가장 빠른 버전의 실행 시간을 계산 하시겠습니까?
나는 코드를 최적화하려고 노력했고 우리 교수님이 수업에서 같은 작업을 얼마나 다른지 보기로 결정했습니다. 아래 코드.
LDA #$00
STA $10
LDY #$02
STA $11
LDA #$07
LDY #$00
LOOP: STA ($10),Y
INY
BNE LOOP
INC $11
LDX #$06
CPX $11
BNE LOOP
첫 번째 코드를 더 빠르게 만들기 위해 무엇을 변경할 수 있는지 찾지 못했지만 약간의 계산을 수행한 후 이 코드를 더 적은 주기로 실행할 수 있다고 생각합니다.
결론
이 실험을 진행하는 동안 Assembly Compiler의 사소한 버그를 해결했습니다. 풀 요청에 대한 Link을 참조하십시오.
⚠️ Open Source For Developers Blog Post:
연결
🖇 git https://github.com/aserputov
p.s 이 글은 SPO 수업 Lab 2 과제로 작성되었습니다.
Reference
이 문제에 관하여(소프트웨어 이식성 및 최적화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/serputov/software-portability-and-optimization-2cja텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)