We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
This is a function that i wrote using assembly:
; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;NAME: clearXdataNBytes ;FUNCTION: ; This functioin clear n bytes in the external ;space starting with the address specified ;PARAMETERS: ; B(unsigned byte)---the numbers of bytes to ;be cleared! ; DPTR(unsigned word)---the starting address ;RETURNS: None! ;PROLOGUE BY CALLING: ; PUSH DPL,PUSH ;DPH,PUSH B,MOV DPTR,#startAddr,MOV ;B,#nbytes! ;EPILOG BY CALLING:NONE! ;NOTES: The MAX number of bytes to be cleared is 255!And,we use A as temporary variables!There is no check if the external space pointed by DPTR is legal! ;EXAMPLES: ; ... ; //Prologue: ; PUSH DPL ; PUSH DPH ; PUSH B ; //Move the parameters ; MOV DPTR,#startAddr ; MOV B,#200 ; //Call this function ; LCALL clearXdataNBytes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; clearXdataNBytes: PUSH ACC CLR A clearXdataNBytes_LOOP: MOVX @DPTR,A INC DPTR DJNZ B,LOOP POP ACC POP B POP DPH POP DPL RET
well,about PUSH ACC CLR A ... POP ACC POP B POP DPH POP DPL
if i call this function in a loop,it seems that these codes are executed repeatedly,and it seems that it's an overhead in my system?Is that possible or is there some wrong thinking?How can i solve it?!
How can this code be generic, i.e. not related to any processor architecture? Do you really think any processor can handle your assembler code?
You (?) have written a function. If you call this function from a loop, the code in the function will be processed identically as if you call this function only once.
If you need to clear more memroy, then you can write another assembler function that performs a push/pop and then uses two nested loops for the clear.