Hallo Richard,
zum Zeitbedarf deiner Beispiele:
mov ax, [speicheradresse1] ; das braucht richtig lange (Speicherzugriff)
shr ax, 5 ; nur wenige Taktzyklen
and ax, 1 ; dito
mov [speicheradresse2], ax ; und noch ein Zeitfresser
Die wegen der Speicherzugriffe wirklich zeitintensiven Befehle hast du bei deiner Variante b) auch, die spart daher nicht wirklich viel ein. Ich schätze das Einsparpotential auf weniger als 5% pro Schleifenumlauf.
Ideal wäre eine Selbstzuweisung:
Diese (könnte) der Kompiler optimieren zu:
and wordptr ds:[speicheradresse], 32
Richtig, das sind aber immer noch zwei zeitintensive Speicherzugriffe, einmal lesen und einmal schreiben. Also auch hier nur wenig Einsparung.
Okay, der Unterschied ist messbar und vielleicht auch fühlbar, aber bei weitem nicht so groß, wie du ihn darstellst.
Ciao,
Martin
Ja, ja... E.T. wusste schon, warum er wieder nach Hause wollte.