我在8051中创建了自己的系统,其中必须将内存中的一串数据(连续空格中的字节)从一个内存位置复制到另一个内存位置。目前我的块是五个字节。
这些是我到目前为止所想到的代码片段。每个人都完成同样的任务:
; For each idea, SRC = memory location 30h, DEST = memory location 40h
; Idea 1: direct copy byte for byte.
; Seems to use lots of clock cycles and code space?
mov DEST,SRC
mov DEST+1,SRC+1
mov DEST+2,SRC+2
mov DEST+3,SRC+3
mov DEST+4,SRC+4
; Idea 2: Stack by pushing data
mov A,SP ;save SP
mov SP,#DEST-1
push SRC
push SRC+1
push SRC+2
push SRC+3
push SRC+4
mov SP,A ;restore SP
; Idea 3: Stack by popping data
mov A,SP ;save SP
mov SP,#SRC+4
pop DEST+4
pop DEST+3
pop DEST+2
pop DEST+1
pop DEST
mov SP,A ;restore SP
; Idea 4: Double pointers
mov R0,#SRC
mov R1,#DEST
copyagain:
mov A,@R0
inc R0
mov @R1,A
inc R1
cjne R1,#DEST+5,copyagain
在使用最少数量的时钟周期和所需的ROM空间方面,哪种传输内存块最有效的内存传输方法?如果上述代码片段都不好,那么我应该使用什么代码片段呢?
此外,传输发生在内存的前128个字节内,并在AT89C2051微控制器上完成。
我不在乎内存中的内容是否被复制或移动到新位置,只要它们出现在新位置。