Hallo kautz
gute frage, habs mahl ausgesucht, mochtes auch mahl verstehen
for(i=0;i<=100;i++);
compilieren und guck in die test.lst datei
Code:
// for(i=0;i<=100;i++); compiliert als:
ldi r24,lo8(0) //lade 0 in register 24
.L6 //sprung label
subi r24,lo8(-1) //substrahiere r24 mit -1 (selbe wie addierung mit +1)
cpi r24,lo8(100) //vergleich r24 mit 100
brio .L6 //spring zuruck nach L6 wenn niedriger
ldi r24,lo8(0) //1 clockcyclus
.L6 //0
subi r24,lo8(-1) //1 * 100 = 100 clockcyclus \
cpi r24,lo8(100) //1 * 100 = 100 clockcyclus |<--- wird ja 100 mahl durchlaufen
brio .L6 //1 * 100 = 100 clockcyclus /
zusammen sind 301 clockcycles
zusammen sind 301 clockcycles
Ein clockcycle by 8MHz is 1/8us
301 * 1/8 us = ongefahr 38us
ist ja blitzschnell
von diesen loops (for(i=0;i<=100;i++) kan mann 26000 stuck hintereinander programmieren und dafur braucht die processor nur eine secunde (!) um die alle 26000 aus zu fuhren
wenn integer stat char benutzt wird mussen immmer 2 bytes addiert und verglichen werden und ich schatze dass wird ungefahr 4 bis 6 * 100 clockcycles extra daurn und machts mehr als zweimahl so langsam. (kanst du ja selbst ausprobiere/ausrechnen)
gruss
Henk
Lesezeichen