Wie verknüpfe ich in x86 Assembler nach einer Multiplikation die zwei Werte in DX:AX bzw. EDX:EAX?
-
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
-
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):
shl edx, 16 add edx, ax
Wenn du ein anderes Register als EDX moechtest, dann kannst du zuerst ein mov verwenden.
-
Danke es funktioniert
Die Frage ist jetzt nur noch warum?
-
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 = 0x0000AAAAMit shl edx, 16 werden die Bits um 16 Bits nach links geschoben (shl steht fuer shift left), d.h. wir haben dann
EDX = 0xAAAA0000Wenn du dann AX zu EDX addierst bekommst du
EDX = 0xAAAABBBB.
-
Danke für diese Erklärung ich verstehe es jetzt. Ich muss mich noch daran gewöhnen in Hexadezimal zu denken
-
@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
-
Ich arbeite mit mehreren Tutorials. Zunächst mal primär mit dem: https://www.tutorialspoint.com/assembly_programming/index.htm
Dann noch mit dem (kann man als PDF-Version downloaden):
https://de.wikibooks.org/wiki/Datei:Assembler.pdfUnd dann noch allgemein mit verschiedenen Themen mit Google.
Mit beiden oben genannten bin ich zufrieden. Ich finde das sich beide sogar ergänzen
-
Vielen herzlichen Dank!