;clears (sum)
mov r4, #0x00
mov r5, #0x00
-
;i (sum)
mov r0, #0x00
mov r1, #0x00
-
;save away len
mov _sum_len_1_1, dpl
mov (_sum_len_1_1 +1), dph
-
;load datapointer with adress of array
mov dpl, _sum_PARM_2
mov dph, (_sum_PARM_2+1)
subb A,B
;jump to exit
jnc 0002$
-
;fetch the array element and add
movx A, @DPTR
inc DPTR
addc A, r5
mov r5, A
inc DPTR
-
;increment loop counter and jump
inc r0
cjne r0, #0x00, 0001$
; prepare return values
mov dpl, r4
mov dph, r5
-
ret
\item Die Adresse ist 16-Bit lang
\item Es werden die Calling Conventions von SDCC verwendet
\end{itemize}
-
+Wenn man von 8-Bit Daten ausgehen w\"urde, h\"atte eine Schleifeniteration f\"unf Instruktionen, eine Ausf\"uhrungszeit von 8$\mu$s und eine Codesize von 6 Bytes. Es ist also sehr sch\"on zu sehen das Operationen mit 16-Bit Daten sehr teuer sind im Vergleich zu 8-Bit Daten.
\lstinputlisting[caption=MCS-51 Code]{8051.s}
Das Timing wurde f\"ur die Original MCS-51 Architektur ermittelt.
Es werden pro Schleifeniteration 21 Instruktionen ausgef\"uhrt. Dadurch ergibt sich eine Ausf\"uhrungszeit von 30$\mu$s (bei einer Clock von 12MHz) was 30 Maschinenzyklen beziehungsweise 360 Clocktakte entspricht. Die Codesize der Schleife ist 32 Bytes.
-Wenn man von 8-Bit Daten ausgehen w\"urde, h\"atte eine Schleifeniteration f\"unf Instruktionen, eine Ausf\"uhrungszeit von 8$\mu$s und eine Codesize von 6 Bytes. Es ist also sehr sch\"on zu sehen das Operationen mit 16-Bit Daten sehr teuer sind im Vergleich zu 8-Bit Daten.