Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > General Coding
You last visited: Today at 13:18

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Assembler Code *YaY*

Discussion on Assembler Code *YaY* within the General Coding forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Apr 2013
Posts: 54
Received Thanks: 8
Assembler Code *YaY*

Hallo, ich habe seit Neustem im Studium (Wirtschaftsinformatik) den Kurs Informatik I. Im Zuge der ersten Übungen sollen wir, bevor es mit Java los/weiter geht mit Assembler Code bzw. auch in Maschinensprache programmieren.

Eine unserer ersten Aufgaben lautet, die Formel x = (x-5) * (x+3) in Assembler Code zu übersetzen. Dafür haben wir eine kleine Tabelle mit Befehlen in der Assembler Sprache bekommen:
  1. Define x y
  2. 27 Load x
  3. 18 Store x
  4. 03 Add c
  5. 07 AddMem x
  6. 05 Mult c
  7. 09 MultMem x

Die Zahlen vor den Befehlen sind für spätere Übersetzungen des Assembler Codes in Maschinensprache wobei Dezimalzahlen, also diese (27, 18, 03..) verwendet werden sollen.

Meine Frage an die, die Erfahrung mit Assemblercode haben wäre, ob folgende Lösung richtig ist. Ich bin hierbei den Term so angegangen, erst die Klammern zu "lösen" und anschließend die Berechneten x Werte zu multiplizieren.

Code:
Define x 61		// Speicherzelle 61 wird x genannt
Load 61			// x wird geladen
Add -5			// -5 wird addiert
Store 61		// x wird mit dem Wert -5 gespeichert
Load 61			// x wird mit dem Wert -5 geladen
Add 5			// es wird 5 addiert um x wieder "zurückzusetzen"
Add 3			// 3 wird zu x addiert
MultiMem 61		// x wird mit dem Inhalt der Speicherzelle 61 multipliziert, dieser ist noch der alte Wert des letzten Speicherns (-5)
Store 61			// x wird gespeichert

Wenn die Infos nicht ausreichen, um die Frage zu beantworten bzw. noch andere Fragen aufkommen einfach Fragen, danke im Voraus
Hülfe is offline  
Old 10/22/2013, 18:54   #2
 
​Tension's Avatar
 
elite*gold: 110
Join Date: Jun 2013
Posts: 599
Received Thanks: 510
Was ist das für ein Assembler?
Also ich würds so schreiben ( in normalen Assembler ):
Code:
//Angenommen X wäre der Wert im Register EDX
mov eax, edx
sub eax, 5 //(x-5)
mov ecx, edx
add ecx, 3 //(x+3)
imul eax, ecx //(x-5)*(x+3)
mov edx, eax //x=(x-5)*(x+3)
Zu deinem: Wieso definierst du X und benutzt es nicht?
Code:
Define x 61  // Adresse 61 => X
Define y 65  // Adresse 65 => Y
Load x       // X Laden
Add -5       // 5 abziehen
Store x      // In X speichern
Load y       // Y Laden
Add 3        // 3 addieren
Store y      // In Y speichern
Load x       // X laden
MultiMem y   // Mit Y mutliplizieren
Store x      // In X Speichern
hab leider keine Ahnung was das für ein Assembler ist und einfach ausprobiert, hoffe das es hilft.
​Tension is offline  
Old 10/22/2013, 19:02   #3
 
elite*gold: 0
Join Date: Apr 2013
Posts: 54
Received Thanks: 8
Was genau das für ein Assembler ist weiß ich leider auch nicht, steht hier nicht bei. Wir haben halt nur die Tabelle mit diesen 7 Operatoren bekommen und sollten damit mal diese Zuweisung implementieren.

Das mit x definieren ist denke ich echt mal nicht so richtig. Es sollte ja ein Wert mit x verbunden sein, denke, der Operator Definde x y war nur in der Tabelle um das Lösen mit einer Hilfsvariablen zu ermöglichen, dafür habe ich auch noch etwas geschrieben, editiere es hier gleich mal rein. Meinst du denn, dass es so wie ich es geschrieben habe auch möglich wäre?

Code:
Define h 62		// Hilfsvariable h  wird definiert
Load 62			// h wird geladen
AddMem 61		// Variable x wird zu h addiert (x hat pos. 61)
Store 62		// h wird gespeichert
Load 61			// x wird geladen
Add -5			// 5 wird von x abgezogen
Store 61		// x wird gespeichert
Load 62			// h wird geladen
Add 3			// 3 wird z u h addiert
Store 62		// h wird gespeichert
Load 61			// x wird geladen
MultiMe 62		// x wird mit h multipliziert
Store 61		// x wird gespeichert
Hülfe is offline  
Old 10/22/2013, 19:07   #4
 
​Tension's Avatar
 
elite*gold: 110
Join Date: Jun 2013
Posts: 599
Received Thanks: 510
Hat er euch kein Beispiel dazu gegeben?
also für mich ist das kein Assembler.
Ich weiß jetzt nicht wie der dann auch funktioniert, aber ja theoretisch müsste dein Code auch funktionieren. Habt ihr nicht einmal einen Compiler bekommen?
​Tension is offline  
Old 10/22/2013, 20:44   #5
 
Master674b's Avatar
 
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
Quote:
Originally Posted by Ten$ion View Post
Hat er euch kein Beispiel dazu gegeben?
also für mich ist das kein Assembler.
Ich weiß jetzt nicht wie der dann auch funktioniert, aber ja theoretisch müsste dein Code auch funktionieren. Habt ihr nicht einmal einen Compiler bekommen?
Oh Gott, das ist doch völlig unerheblich was das für ein Maschinencode ist. Er hat hier einfach einen vorgegebenen Befehlssatz und daraus soll er das Ergebnis der Formel oben berechnen...

Code:
Define x 10
Define y 11
Load x
Add -5
Store y
Load x
Add 3
MultMem y
Store x
Master674b is offline  
Thanks
1 User
Old 10/23/2013, 14:18   #6
 
elite*gold: 0
Join Date: Apr 2013
Posts: 54
Received Thanks: 8
Also Master674b, bei deinem Code gäbe es soweit ich weiß ein paar Probleme.
Wenn man mit einer Hilfsvariablen arbeitet möchte man deren Wert erstmal auf den von X setzen.
Code:
Define x 10		// Doch kein Define von x da x einen Wert haben kann den man ja benutzen möchte, mit Define x wird es = 0
Define y 11		// 
Load x			//
Add -5			//
Store y                 // Store x - Tippfehler denke ich :P
Load x			// Load y -     " 
Add 3			// Hier noch add x machen um das gleich zu setzen.
MultMem y		// Jetzt halt store y und load x noch
Store x			//
Hülfe is offline  
Old 10/23/2013, 16:18   #7
 
Master674b's Avatar
 
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
Quote:
Originally Posted by Hülfe View Post
Also Master674b, bei deinem Code gäbe es soweit ich weiß ein paar Probleme.
Wenn man mit einer Hilfsvariablen arbeitet möchte man deren Wert erstmal auf den von X setzen.
Code:
Define x 10		// Doch kein Define von x da x einen Wert haben kann den man ja benutzen möchte, mit Define x wird es = 0
Define y 11		// 
Load x			//
Add -5			//
Store y                 // Store x - Tippfehler denke ich :P
Load x			// Load y -     " 
Add 3			// Hier noch add x machen um das gleich zu setzen.
MultMem y		// Jetzt halt store y und load x noch
Store x			//
Wieso? x steht in Speicherzelle 10, die definier ich im Programm erst mal damit ich nicht immer 10 schreiben muss. Wieso sollte ich die Hilfsvariable auf x setzen? Ich möchte sie auf x - 5 setzen.
Nein Store y, das ist kein Tippfehler.
Auch beim nächsten, das soll schon ein Load x sein!
Nein, Add 3
Nein, das Ergebnis von x + 3 ist noch im Arbeitsregister, also einfach MultMem y (da haben wir x - 5 abgelegt).
In x storen.
Master674b is offline  
Old 10/23/2013, 17:28   #8
 
elite*gold: 0
Join Date: Apr 2013
Posts: 54
Received Thanks: 8
Aber dann würdest du doch wenn du Add -5 ausführst das auch für X machen und nicht nur für Y, das würde doch die ganze Rechnung falsch machen oder?
Hülfe is offline  
Old 10/23/2013, 22:34   #9
 
Master674b's Avatar
 
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
Quote:
Originally Posted by Hülfe View Post
Aber dann würdest du doch wenn du Add -5 ausführst das auch für X machen und nicht nur für Y, das würde doch die ganze Rechnung falsch machen oder?
Nö, ich speichere x-5 ja in y und hol mir dann über Load x wieder den Ausgangswert von x, der liegt dann im Arbeitsregister. Dann mach ich Add 3 und anschließend multipliziere ich es mit dem Zwischenergebnis, das ich in y gestored hab und schreib den aktuellen Wert aus dem Arbeitsregister in x.
Master674b is offline  
Old 10/23/2013, 22:52   #10
 
​Tension's Avatar
 
elite*gold: 110
Join Date: Jun 2013
Posts: 599
Received Thanks: 510
Deine Funktion funktioniert zwar, jedoch hat dann y den Wert welchen x haben sollte.

Quote:
<===Executing Code!===>
Defined x with the Address 10 //Define x 10
Defined y with the Address 11 //Define y 11
Akkumulator set to 0 // Load x
Added -5 to the akkumulator, its now: -5 // Add -5
Stored -5 in the cell y // Store y
Akkumulator set to 0 // Load x
Added 3 to the akkumulator, its now: 3 // Add 3
Multiplied y with the akkumulator 3 its now: -15 //MultMem y
<=== Done ===>

<=== Cells ===>
x(10)=0
y(11)=-15
Akkumulator=3
<=== ===>

dieser code funktioniert:
Code:
Define x 61
Define y 62
Load x
Add -5
Store x
Load y
Add 3
Store y
MultMem x
Output:
Quote:
<===Executing Code!===>
Defined x with the Address 61
Defined y with the Address 62
Akkumulator set to 0
Added -5 to the akkumulator, its now: -5
Stored -5 in the cell x
Akkumulator set to 0
Added 3 to the akkumulator, its now: 3
Stored 3 in the cell y
Multiplied x with the akkumulator 3 its now: -15
<=== Done ===>

<=== Cells ===>
x(61)=-15
y(62)=3
Akkumulator=3
<=== ===>
​Tension is offline  
Old 10/23/2013, 23:02   #11
 
Master674b's Avatar
 
elite*gold: 0
Join Date: Dec 2012
Posts: 255
Received Thanks: 110
Quote:
Originally Posted by Ten$ion View Post
Deine Funktion funktioniert zwar, jedoch hat dann y den Wert welchen x haben sollte.




dieser code funktioniert:
Code:
Define x 61
Define y 62
Load x
Add -5
Store x
Load y
Add 3
Store y
MultMem x
Output:
Code:
Load y
Add 3
Store y
y ist doch eine bis dato uninitialisierte Hilfsvariable. Wie soll das bitte Funktionieren?

Quote:
Deine Funktion funktioniert zwar, jedoch hat dann y den Wert welchen x haben sollte.
Nein, hats nicht. Ich store das Ergebnis doch in x. y hat nur den Wert x - 5, auch nachdem das Programm abgearbeitet wurde.
Master674b is offline  
Old 10/23/2013, 23:19   #12
 
​Tension's Avatar
 
elite*gold: 110
Join Date: Jun 2013
Posts: 599
Received Thanks: 510
Quote:
Originally Posted by Master674b View Post
Code:
Load y
Add 3
Store y
y ist doch eine bis dato uninitialisierte Hilfsvariable. Wie soll das bitte Funktionieren?
Nö. Define y 61
danach hat y den Wert 0. Dann:
Load y => Lade den Wert von y in den akkumulator
Add 3 => Addiere 3 zu den Akkumulator
Store y => Speicher den Akkumulator in y.

Quote:
Originally Posted by Master674b View Post
Nein, hats nicht. Ich store das Ergebnis doch in x. y hat nur den Wert x - 5, auch nachdem das Programm abgearbeitet wurde.
Nein. Guck dir meinen Output-Code an.
Du definierst x und y. Dann lädst du x und addierst -5 und speicherst es in y.
Danach lädst du x und addierst 3 und multiplizierst es mit dem Wert aus y. Danach packst du den Akkumulator in x welcher aber immer noch den Wert 3 hat. ( Mein Output hat irgendwie die letzte Zeile von dir ( Store x ) nicht mitgenommen trotzdem ist das so. )
Nun hat y den Wert -15, was eigentlich in x sollte.
Du könntest deinen Code im Grunde einfach umdrehen:
Code:
Define x 10
Define y 11
Load y
Add -5
Store x
Load y
Add 3
MultMem x
Store y
Wobei das Store y unnötig wäre.
​Tension is offline  
Old 10/23/2013, 23:42   #13
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Wo steht dass y nach dem definieren den Wert 0 hat? Falls das nicht irgendwo exizit so festgehalten ist, kannst du davon nicht ausgehen.
Schlüsselbein is offline  
Thanks
1 User
Old 10/24/2013, 16:00   #14


 
MrSm!th's Avatar
 
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
Es gibt keinen Set Befehl o.Ä. für Konstante Operationen, also wäre eine Initialisierung mit 0 bei Define die einzige Möglichkeit, einen determinierten Wert zu erhalten. Die Sprache ist unvollständig, wenn der Speicher nicht mit 0 initialisiert wird.
MrSm!th is offline  
Old 10/24/2013, 16:12   #15
 
Schlüsselbein's Avatar
 
elite*gold: 0
Join Date: Feb 2013
Posts: 1,137
Received Thanks: 869
Oder mit 1337 oder 666 oder... Die Aufgabenstellung bzw die Beschreibung des Befehlssatzes ist m.E. nicht komplett.
Schlüsselbein is offline  
Reply


Similar Threads Similar Threads
[AutoIt & Assembler] Assembler lernen und in AutoIt benutzen
01/12/2021 - Coding Tutorials - 18 Replies
1. Vorwort 1.1. Vorraussetzungen für das Programmieren mit Assembler 1.2. Ein paar Fakten zu Assembler/Computern 1.3. Warum Assembler benutzen 2. Assembler Allgemein 2.1. Arbeitsweise von Assembler 2.2. Syntax und Semantik 2.3. Register 3. Erste Assembler Schritte 3.1. Mov
Assembler code
12/05/2011 - Off Topic - 2 Replies
Hello im studing some basic with assembler and I have got a task to make a code(on assembler) which would make my initials. I still dont know the right task,just that i have to make assembler to show me my initials(like a picture, teacher said somethign about pixels).So I decided to ask you guys for some help, maybe someone already did a similar task. I wish to see how that code looks, doenst matter what initials used. (would be nice M and P, this are my ones :D )
Assembler.au3
11/24/2011 - Nostale - 2 Replies
hay weiß wer wo ich Assembler.au3 finde google spuckt nix aus



All times are GMT +1. The time now is 13:19.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.