Forum: Mikrocontroller und Digitale Elektronik Geht das kürzer/schneller? Assembler, PIC16F1512


von Michael B. (auchduliebergott)


Lesenswert?

PIC16F1512, Assembler, MPLAB
Kann man das folgende Programmstück kürzer/schneller machen?
Das Ziel ist: w = gnn + 32 - nnn, ohne nnn zu ändern.

        movfw   gnn
        addlw  d'32'      ; w= gnn+32
        movwf  hilfe      ; hilfe = gnn+d'32'
        movfw  nnn        ; w = nnn
        subwf  hilfe,w    ; w = hilfe - w: Ergebnis w = gnn+32-nnn

Für Ideen wäre ich dankbar!

: Bearbeitet durch User
von Thomas R. (r3tr0)


Lesenswert?

Könntest das Ganze über direkte Adressierung machen:
1
 
2
movlw   gnn         ; W = Adresse von gnn
3
addlw   d'32'       ; W = Adresse von gnn + 32
4
movwf   fsr0h       ; FSR0H = oberes Byte der Adresse
5
movf    nnn,f       ; W = Inhalt von nnn
6
subwf   indf0,w     ; W = Inhalt von (gnn + 32) - Inhalt von nnn

von Michael B. (auchduliebergott)


Lesenswert?

Vielen Dank für Deine Idee.
Sehe ich das richtig, dass im Endeffekt ebenfalls 5 Befehle notwendig 
sind und somit nichts erspart/schneller wird?

von Michael B. (auchduliebergott)


Lesenswert?

Sorry! Doch, es wird etwas erspart, nämlich das Register "hilfe"!

von Peter D. (peda)


Lesenswert?

1
        movfw  nnn
2
        subwf  gnn,w
3
        addlw  d'32'

von Michael B. (auchduliebergott)


Lesenswert?

Hallo peda,

die Lösung ist ganz wunderbar und lehrt, dass man das Kommutativgesetz 
der Mathematik immer berücksichtigen sollte!

Perfekt!!!!

"nnn" sowie "gnn" bleiben hierbei unverändert und das Register "hilfe" 
ist auch noch eingespart!!

Herzlichen Dank für Deine Mühe!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.