Code : Tout sélectionner
; memcpy --
; Copy a block of memory from one location to another.
;
; Entry parameters
; SRC - Address of source data block
; DST - Address of target data block
; CNT - Number of bytes to copy
0040 ORG $0040 ;Parameters at $0040
0040 00 00 SRC DW $0000
0042 00 00 DST DW $0000
0044 00 00 CNT DW $0000
0600 ORG $0600 ;Code at $0600
0600 A4 44 MEMCPY LDY CNT+0 ;Set Y = CNT.L
0602 D0 05 BNE LOOP ;If CNT.L > 0, then loop
0604 A5 45 LDA CNT+1 ;If CNT.H > 0,
0606 D0 01 BNE LOOP ; then loop
0608 60 RTS ;Return
0609 B1 40 LOOP LDA (SRC),Y ;Load A from ((SRC)+Y)
060B 91 42 STA (DST),Y ;Store A to ((DST)+Y)
060D 88 DEY ;Decr CNT.L
060E D0 F9 BNE LOOP ;if CNT.L > 0, then loop
0610 E6 41 INC SRC+1 ;Incr SRC += $0100
0612 E6 43 INC DST+1 ;Incr DST += $0100
0614 88 DEY ;Decr CNT.L
0615 C6 45 DEC CNT+1 ;Decr CNT.H
0617 D0 F0 BNE LOOP ;If CNT.H > 0, then loop
0619 60 RTS ;Return
061A END
Est-ce que je me trompe ou pas dans l'analyse du programme ? Qu'en pensent les spécialistes 6502 ?