2 64-byte block move without dual data pointer, Byte block move with dual data pointer – Maxim Integrated High-Speed Microcontroller User Manual
Page 83

High-Speed Microcontroller User’s Guide
Rev: 062210
83 of 176
6.5.2 64-Byte Block Move Without Dual Data Pointer
; SH and SL are high and low byte source address.
; DH and DL are high and low byte of destination address.
# CYCLES
MOV
R5, #64d
; NUMBER OF BYTES TO MOVE
2
MOV
DPTR, #SHSL
; LOAD SOURCE ADDRESS
3
MOV
R1, #SL
; SAVE LOW BYTE OF SOURCE
2
MOV
R2, #SH
; SAVE HIGH BYTE OF SOURCE
2
MOV
R3, #DL
; SAVE LOW BYTE OF DESTINATION
2
MOV
R4, #DH
; SAVE HIGH BYTE OF DESTINATION
2
MOVE:
; THIS LOOP IS PERFORMED R5 TIMES, IN THIS EXAMPLE 64
MOVX
A, @DPTR
; READ SOURCE DATA BYTE
2
MOV
R1, DPL
; SAVE NEW SOURCE POINTER
2
MOV
R2,
DPH
;
2
MOV
DPL, R3
; LOAD NEW DESTINATION
2
MOV
DPH,
R4
;
2
MOVX
@DPTR, A
; WRITE DATA TO DESTINATION
2
INC
DPTR
; NEXT DESTINATION ADDRESS
3
MOV
R3, DPL
; SAVE NEW DESTINATION POINTER
2
MOV
R4,
DPH
;
2
MOV
DPL, R1
; GET NEW SOURCE POINTER
2
MOV
DPH,
R2
;
2
INC
DPTR
; NEXT SOURCE ADDRESS
3
DJNZ
R5, MOVE
; FINISHED WITH TABLE?
3