From: Martin Perner Date: Thu, 21 Oct 2010 09:25:57 +0000 (+0200) Subject: isa_cmp: 8051 reorder of code X-Git-Tag: bootrom_v1~275 X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=calu.git;a=commitdiff_plain;h=b94c558d985360634fabedb5f7c81b95a69b0f79 isa_cmp: 8051 reorder of code --- diff --git a/1_isacmp/8051.s b/1_isacmp/8051.s index 3b45d0e..b41e4f4 100644 --- a/1_isacmp/8051.s +++ b/1_isacmp/8051.s @@ -1,15 +1,12 @@ ;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) @@ -26,7 +23,6 @@ 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 @@ -36,7 +32,6 @@ mov dph, (_sum_PARM_2+1) addc A, r5 mov r5, A inc DPTR - ;increment loop counter and jump inc r0 cjne r0, #0x00, 0001$ @@ -47,5 +42,4 @@ mov dph, (_sum_PARM_2+1) ; prepare return values mov dpl, r4 mov dph, r5 - ret diff --git a/1_isacmp/8051.tex b/1_isacmp/8051.tex index 66173f4..30d999b 100644 --- a/1_isacmp/8051.tex +++ b/1_isacmp/8051.tex @@ -42,10 +42,9 @@ Das Ergebnis der \"Ubersetzung h\"angt von Vorbedingungen ab die nicht angegeben \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.