Autor Beitrag
Newbie_2013_
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Fr 04.10.13 13:43 
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:
ausblenden 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 user profile iconTh69: Code-Tags hinzugefügt
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 429
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: So 06.10.13 00:18 
user profile iconNewbie_2013_ hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.