- Beiträge
- 15.427
- Reaktionspunkte
- 4.047
Mir wurde am anfang dword gesagt -> beides möglich??
Ist hier kopieren von werten aus DB in temp-var gemeint?
L 32;
L #Schleifenzaehler;
-I ;
+AR1 ;
Was fehlt denn noch alles bei der schleife von onkel dagobert?
XOR-verknüpfung von s1,s1 und altem übertrag und...?
Er kann auch Taschnrechner spielen.
0 + 0 ergibt 0,
0 + 1 ergibt 1,
1 + 0 ergibt 1,
1 + 1 ergibt 0 mit Übertrag von 1 auf die nächsthöherwertige Stelle.
Er Wetet den letzten Bit der beiden Binärzahlen aus und hat ein Merkberit für die nächsthöherwertge Stelle, das Ergebniss in eine neue Binärzahl.
Je nachdem ob er Word oder Doppelword oder String nimmt muss halt der Loop lang sein.
Ist normal ne Übungsaufgabe aus Assembler.
Oder eine Subtraktion mit der ( 2.Zahl * -1)Ja, aber er soll doch nicht addieren, jedenfalls nicht mit "+" und Add, also bleibt nur die logische Auswertung per U, O, X, UN ...
Ja, aber er soll doch nicht addieren, jedenfalls nicht mit "+" und Add, also bleibt nur die logische Auswertung per U, O, X, UN ...
..Was fehlt denn noch alles bei der schleife von onkel dagobert?..
[COLOR=blue]... AR1 sichern (TAR1)[/COLOR]
[COLOR=blue]... Summanden in Lokaldaten kopieren[/COLOR]
[COLOR=blue]... Adressen der Summanden in AR1 und AR2 laden (LAR1, LAR2)[/COLOR]
[COLOR=#0000ff]... Übertrag initialisieren (auf "0" setzen)[/COLOR]
L 32
L001: T #TEMP_INT
//*** Binärergebnis unter Berücksichtigung des Übertrag
X [AR1,P#0.0]
X [AR2,P#0.0]
X #UEBERTRAG
= #EINS // Ergebnisbit
//*** Übertrag
[COLOR=blue]... Ein neuer Übertrag erfolgt, wenn [/COLOR]
[COLOR=blue]... beide bits in den Zahlen "1" sind, ODER [/COLOR]
[COLOR=blue]... ein bit "1" ist UND ein aktueller Übertrag ansteht.[/COLOR]
= #UEBERTRAG
U #EINS
= [AR2,P#0.0] // am Ende steht die Summe in AR2
+AR1 P#0.1
+AR2 P#0.1
L #TEMP_INT
LOOP L001
[COLOR=blue]... Summe, welche über AR2 in eine der Variablen[/COLOR]
[COLOR=blue]..."Summand" abgelegt wurde, in die Variabe "Summe" kopieren[/COLOR]
[COLOR=blue]... AR1 wieder herstellen (LAR1)[/COLOR]
[COLOR=blue].[/COLOR]
Was ist mit T #ZaehlvarHTML:L 32 L #Schleifenzaehler -I T #Zaehlvar
Ist doch der bitweise durchlauf der zahl (wie die andere möglichkeit von onkel)?HTML:L 32; L #Schleifenzaehler; -I ; +AR1 ;
1. Was ist mit T #Zaehlvar
passiert bzw. wie/wozu wird die verarbeitet?
2. Ist doch der bitweise durchlauf der zahl (wie die andere möglichkeit von onkel)?
L #Summand_1
T #Summand1_t
L #Summand_2
T #Summand2_t
L P##Summand1_t
LAR1
L P##Summand2_t
LAR2
U #Uebertrag
R #Uebertrag
L 32
L001: T #Schleifenzaehler
// Binärergebnis unter Berücksichtigung des Übertrag
X [AR1,P#0.0]
X [AR2,P#0.0]
X #Uebertrag
= #Ergebnis_t // Ergebnisbit
// Übertrag
U [AR1,P#0.0]
O [AR2,P#0.0]
U #Uebertrag //alter Übertrag
O(
U [AR1,P#0.0]
U [AR2,P#0.0]
)
O(
U [AR1,P#0.0]
U [AR2,P#0.0]
U #Uebertrag //alter Übertrag
)
= #Uebertrag //neuer Übertrag
U #Ergebnis_t
= [AR2,P#0.0] // am Ende steht die Summe in AR2
+AR1 P#0.1
+AR2 P#0.1
L #Schleifenzaehler
LOOP L001
TAR2
T #Ergebnis
MD0
MW0 MW2
MB0 MB1 MB2 MB3
M0.7 - M0.0 M1.7 - M1.0 M2.7 - M2.0 M3.7 - M3.0
Hallo,
hier mal ein versuch von mir:
Ok oder nix kapiert?!?:-?Code:L #Summand_1 T #Summand1_t L #Summand_2 T #Summand2_t L P##Summand1_t LAR1 L P##Summand2_t LAR2 U #Uebertrag R #Uebertrag L 32 L001: T #Schleifenzaehler // Binärergebnis unter Berücksichtigung des Übertrag X [AR1,P#0.0] X [AR2,P#0.0] X #Uebertrag = #Ergebnis_t // Ergebnisbit // Übertrag U [AR1,P#0.0] O [AR2,P#0.0] U #Uebertrag //alter Übertrag O( U [AR1,P#0.0] U [AR2,P#0.0] ) O( U [AR1,P#0.0] U [AR2,P#0.0] U #Uebertrag //alter Übertrag ) = #Uebertrag //neuer Übertrag U #Ergebnis_t = [AR2,P#0.0] // am Ende steht die Summe in AR2 +AR1 P#0.1 +AR2 P#0.1 L #Schleifenzaehler LOOP L001 TAR2 T #Ergebnis
Das speichern und wiederherstellen des AR hab ich noch nicht rausgefunden bzw. ist mir die funktion noch nicht klar;
gibt es ein bsp irgendwo?
@gravieren
Die anderen Lösungen wären zunächst bestimmt auch ok, aber da ich ind.Adr. weiterhin brauchen werde, sollte ich mich gleich damit befassen.
FUNCTION FC 1 : VOID
TITLE =
VERSION : 0.1
VAR_INPUT
SUMMAND_A : DINT ;
SUMMAND_B : DINT ;
END_VAR
VAR_OUTPUT
SUMME : DINT ;
END_VAR
VAR_TEMP
SAVE_AR1 : DWORD ;
SA : DINT ;
SB : DINT ;
TEMP_INT : INT ;
UEBERTRAG : BOOL ;
EINS : BOOL ;
TEMP : BOOL ;
END_VAR
BEGIN
NETWORK
TITLE =
//
// Es gelten folgende Regeln
// 0+0=0
// 1+0=1
// 0+1=1
// 1+1=0 Übertrag 1
//
TAR1 #SAVE_AR1;
SET ;
SAVE ;
L #SUMMAND_A;
TAD ;
T #SA;
L #SUMMAND_B;
TAD ;
T #SB;
L P##SA;
LAR1 ;
L P##SB;
LAR2 ;
CLR ;
= #UEBERTRAG;
L 32;
L001: T #TEMP_INT;
//*** Binärergebnis unter Berücksichtigung des Übertrag
X [AR1,P#0.0];
X [AR2,P#0.0];
X #UEBERTRAG;
= #EINS; // Ergebnisbit
//*** Übertrag
U [AR1,P#0.0]; // wenn beide bits "1"
U [AR2,P#0.0];
O ;
U #UEBERTRAG; // oder wenn Übertrag
U( ; // und genau ein bit "1"
X [AR1,P#0.0];
X [AR2,P#0.0];
) ;
= #UEBERTRAG;
U #EINS;
= [AR2,P#0.0]; // am Ende Summe in AR2
+AR1 P#0.1;
+AR2 P#0.1;
L #TEMP_INT;
LOOP L001;
L #SB; // Summe wurde in AR2 (#SB) geschrieben
TAD ;
T #SUMME;
LAR1 #SAVE_AR1;
END_FUNCTION
sind mir noch unklar?!Code:TAR1 "SAVE_AR1" SET SAVE . . . LAR1 "SAVE_AR1"
FUNCTION FC 50 : VOID
TITLE =
VERSION : 1.0
AUTHOR : Ralle
VAR_INPUT
Summand_1 : DWORD ;
Summand_2 : DWORD ;
END_VAR
VAR_OUTPUT
Ergebnis : DWORD ;
END_VAR
VAR_TEMP
Schleifenzaehler : WORD ;
Uebertrag_Temp : BOOL ;
SAVE_VKE : BOOL ;
Summand_1_Temp : DWORD ;
Summand_2_Temp : DWORD ;
Ergebnis_Temp : DWORD ;
END_VAR
BEGIN
NETWORK
TITLE =Sichere VKE im BIE
SET ;
SAVE ;
= #SAVE_VKE;
NETWORK
TITLE =
// Laden der beiden Doppelwörter
L #Summand_1;
TAD ; //Bytes tauschen
T #Summand_1_Temp;
L #Summand_2;
TAD ; //Bytes tauschen
T #Summand_2_Temp;
L 0;
T #Ergebnis_Temp;
CLR ;
= #Uebertrag_Temp;
L L#32;
loop: T #Schleifenzaehler;
L P##Summand_1_Temp;
LAR1 ;
L 32;
L #Schleifenzaehler;
-I ;
+AR1 ;
//Ergebnisbit berechnen
X [AR1,P#0.0]; //summand1
X [AR1,P#4.0]; //summand2
X #Uebertrag_Temp; //übertrag
= [AR1,P#8.0]; //ergebnis
//nächsten Übertrag berechnen
U [AR1,P#0.0]; //summand1
U [AR1,P#4.0]; //summand2
U #Uebertrag_Temp; //übertrag
O ;
U [AR1,P#0.0]; //summand1
U [AR1,P#4.0]; //summand2
UN #Uebertrag_Temp; //übertrag
O ;
U [AR1,P#0.0]; //summand1
UN [AR1,P#4.0]; //summand2
U #Uebertrag_Temp; //übertrag
O ;
UN [AR1,P#0.0]; //summand1
U [AR1,P#4.0]; //summand2
U #Uebertrag_Temp; //übertrag
= #Uebertrag_Temp; //nächster übertrag
L #Schleifenzaehler;
LOOP loop;
//Ergebnis speichern
L #Ergebnis_Temp;
TAD ; //Bytes zurück tauschen
T #Ergebnis;
NETWORK
TITLE =
U #SAVE_VKE;
SAVE ;
BE ;
END_FUNCTION
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?