Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: Assembler ::  Wie verknüpfe ich in x86 Assembler nach einer Multiplikation die zwei Werte in DX:AX bzw. EDX:EAX?     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Adrox
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.11.2016
Beiträge: 11
Beitrag Adrox Mitglied 15:24:18 06.12.2016   Titel:   Wie verknüpfe ich in x86 Assembler nach einer Multiplikation die zwei Werte in DX:AX bzw. EDX:EAX?            Zitieren

Hallo,

ch bin gerade dabei x86 Assembler mit NASM zu lernen und ich habe das Problem, dass sich nach einer Multiplikation 2er Words, sich das Ergebnis in zwei verschiedenen Registern befinden also DX:AX bzw. EDX:EAX. Wie verknüpfe ich diese miteinander?

Mit freundlichen Grüßen
Adrox


Zuletzt bearbeitet von Adrox am 15:25:03 06.12.2016, insgesamt 1-mal bearbeitet
icarus2
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.09.2009
Beiträge: 1743
Beitrag icarus2 Mitglied 15:42:46 06.12.2016   Titel:              Zitieren

Angenommen du hast DX:AX und moechtest diese ins Register EDX speichern, dann kannst du das mit einem Links-Shift und einer Add Instruktion machen (Ungetestet, Intel Syntax):
Assembler:
shl edx, 16
add edx, ax


Wenn du ein anderes Register als EDX moechtest, dann kannst du zuerst ein mov verwenden.


Zuletzt bearbeitet von icarus2 am 15:44:33 06.12.2016, insgesamt 2-mal bearbeitet
Adrox
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.11.2016
Beiträge: 11
Beitrag Adrox Mitglied 16:21:46 06.12.2016   Titel:              Zitieren

Danke es funktioniert :)
Die Frage ist jetzt nur noch warum? :D
icarus2
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.09.2009
Beiträge: 1743
Beitrag icarus2 Mitglied 17:00:12 06.12.2016   Titel:              Zitieren

Angenommen wir haben
DX = 0xAAAA
AX = 0xBBBB
Beide Register enthalten 16 Bits (deshalb 4 Mal eine Hex-Ziffer).

EDX ist 32 Bit gross und, da DX die least significant bits von EDX sind, gilt (ich nehme hier einfach mal an dass die oberen Bits alle 0 sind)
EDX = 0x0000AAAA

Mit shl edx, 16 werden die Bits um 16 Bits nach links geschoben (shl steht fuer shift left), d.h. wir haben dann
EDX = 0xAAAA0000

Wenn du dann AX zu EDX addierst bekommst du
EDX = 0xAAAABBBB.
Adrox
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.11.2016
Beiträge: 11
Beitrag Adrox Mitglied 17:14:18 06.12.2016   Titel:              Zitieren

Danke für diese Erklärung ich verstehe es jetzt. Ich muss mich noch daran gewöhnen in Hexadezimal zu denken :D
Lernenwoller
Unregistrierter




Beitrag Lernenwoller Unregistrierter 22:52:39 06.12.2016   Titel:              Zitieren

@Adrox, welches Tutorial nutzt du dazu? Bist du damit zufrieden? Ich habe natürlich per Suchmaschine auch welche gefunden, aber vielleichht hast du ja eins, das ich noch nicht kenne :)
Adrox
Mitglied

Benutzerprofil
Anmeldungsdatum: 20.11.2016
Beiträge: 11
Beitrag Adrox Mitglied 23:23:38 06.12.2016   Titel:              Zitieren

Ich arbeite mit mehreren Tutorials. Zunächst mal primär mit dem: https://www.tutorialspoin ....... bly_programming/index.htm

Dann noch mit dem (kann man als PDF-Version downloaden):
https://de.wikibooks.org/wiki/Datei:Assembler.pdf

Und dann noch allgemein mit verschiedenen Themen mit Google.

Mit beiden oben genannten bin ich zufrieden. Ich finde das sich beide sogar ergänzen


Zuletzt bearbeitet von Adrox am 23:24:05 06.12.2016, insgesamt 1-mal bearbeitet
Lernenwoller
Unregistrierter




Beitrag Lernenwoller Unregistrierter 00:30:09 07.12.2016   Titel:              Zitieren

Vielen herzlichen Dank!
C++ Forum :: Assembler ::  Wie verknüpfe ich in x86 Assembler nach einer Multiplikation die zwei Werte in DX:AX bzw. EDX:EAX?   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.