Bin gerade dabeio eine kleine ASM Routine zu schreiben(Mega16), um den Inhalt eines Registers auf dem LCD anzeigen zu lassen. Dabei habe ich ein Problem, dessen Ursache ich nicht verstehe... ldi r16,227 subi temp,100 brmi weiter ergebnis = 127 negative und singned flag gelöscht ldi r16,229 subi temp,100 brmi weiter ergebnis = 129 negative und singned flag gesetzt wenn ich das richtig verstanden habe, wird doch das singned + negative flag nur gesetzt, wenn die 0 durchlaufen wird, oder? Wie es hier aussieht, wird es anscheinend schon gesetzt, wenn das ergebnis einer subtraktion zwischen 128 und 255 liegt. Gruß, Tubie
ist zwar nicht die feine Art, allerdings geht es jetzt... ldi r16,227 ldi r17,0 subi r16,100 sbc r17,r17 brmi weiter habe aus der 8-Bit subtraktion eine 16-Bit subtraktion gemacht. Gruß, Tubie
SUBI setzt Z,C,N,V,H und BRMI führt sich dann aus: if (N = 1) then PC ← PC + k + 1 N: R7 Set if MSB of the result is set; cleared otherwise. Wie wäre es vielleicht mit BRCC und BRCS (BRSH und BRLO). ldi r16, 99 subi r16, 100 brlo test ; = brcs Der wird hier sicher springen.
Manchmal sieht man den Wald vor lauter Bäumen nicht. Habe mich ziemlich auf BRMI versteift. Vielen Dank Gruß, Tubie
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.