Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Assembler-Problem (Befehlsliste C500 Familie)
Newbie_2013_ - Fr 04.10.13 13:43
Titel: Assembler-Problem (Befehlsliste C500 Familie)
Hallo Ihr,
habe eine Verständnisfrage. Es geht um eine Addition zweier 8-Bit-Zahlen. Das Ergebnis, also high Byte und low Byte sollen auf die Adressen 1902h (high Byte) und 1903h (low Byte) verteilt werden, wenn das Ergebnis größer 255 ist. Meine Frage lautet nun wieso nach abspeichern des High Bytes auf Adresse 1902h, der Akku mit 01 geladen wird? Ist das der Übertrag, da das Ergebnis größer 255, der in die niedrigste Stele des Low Bytes gerechnet werden muss? Hier noch der Quellcode:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| ORG 20h start: mov dptr,#speicher1 ;dptr mit sp.adr.1 = 1900h laden movx a,@dptr ;<<dptr>> => <a> mov b,a ;<a> => <b> inc dptr ;dptr um 1 erhöhen = 1901h movx a,@dptr ;<<dptr>> => <a> add a,b ;<a> = <a> + <b> jc a2byte ;wenn c=1, Sprung auf "a2byte" inc dptr ;dptr um 1 erhöhen = 1902h inc dptr ;dptr um 1 erhöhen = 1903h inc dptr ;dptr um 1 erhöhen = 1904h movx @dptr,a ;<a> => <<dptr>> sjmp stop ;Programm beenden a2byte: inc dptr ;dptr um 1 erhöhen = 1902h movx @dptr,a ;<a> => <<dptr>> mov a,#01h ;akku mit 01 laden inc dptr ;dptr um 1 erhöhen = 1903h movx @dptr,a ;<a> => <<dptr>> stop: sjmp start ;Neubeginn der Rechenschleife END |
Zahl 1 lesen
Zahl 2 lesen
Ergebnis = Zahl 1 + Zahl 2
Ergebnis > 255
ja
nein
Ergebnis nach Adresse 1
Ergebnis nach Adresse 2
Moderiert von
Th69: Code-Tags hinzugefügt
mandras - Fr 04.10.13 16:57
Es widerspricht sich.
Das Lo-Byte des Ergebnisses landet auf Adr.$1902, $1903 ist da Hi-Byte. Falls das Ergebnis >255 ist.
Falls nein landet das Lo-Byte des Ergebnisses auf $1904.
Anhand des Textes unter dem Code ("Zahl 1 lesen
Zahl 2 lesen
Ergebnis = Zahl 1 + Zahl 2
Ergebnis > 255
ja
nein
Ergebnis nach Adresse 1
Ergebnis nach Adresse 2")
vermute ich, daß das sogar so beabsichtigt ist
OlafSt - So 06.10.13 00:18
Newbie_2013_ hat folgendes geschrieben : |
Meine Frage lautet nun wieso nach abspeichern des High Bytes auf Adresse 1902h, der Akku mit 01 geladen wird? Ist das der Übertrag, da das Ergebnis größer 255, der in die niedrigste Stele des Low Bytes gerechnet werden muss? |
Nein, eigentlich nicht. Das ganze ist nur eine Optimierung, denn: Das größte Ergebnis, nämlich 255+255 (maximale Bytewerte addiert) kann nur 510 sein. Das im Binärformat ist: 0000 0001 (Hi-Byte) 1111 1110 (LowByte). Du siehst also, das das Hi-Byte nur 0 oder 1 enthalten kann. Ist das Carry gesetzt,
muß also logischerweise zwingend das Hi-Byte 1 sein. Ergbnisse, in denen das Hi-Byte >1 wird, gibt es bei diesen Berechnungen nicht. Also kann ich direkt ne 1 in die Adresse schreiben.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!