2016-12-15 11 views
-1

Ich habe dieses geistesabwesende Projekt, das mit mir durcheinandergebracht hat. Ich muss ein Programm schreiben, um 2 Zahlen von der Eingabe zu bekommen, addiere sie zusammen oder multipliziere sie. Dieses Programm sollte auch doppelte Wörter enthalten können.Wie man doppelte Wörter in der Assemblersprache hinzufügt und multipliziert

Ich weiß, wie man Zahlen von der Eingabe erhält, wie man sie addiert oder multipliziert, wenn ihre Größe bei maximal einem Wort ist, aber ich kann diese doppelte Wortsache nicht lösen.

Hat jemand den Code?

Dank im Voraus .....

+0

Darf man 32-Bit-Register wie EAX verwenden? Darf man 64-Bit-Register wie RAX verwenden? –

+2

Hinzufügen mit Übertrag. Google es. Schließen Sie die Zielarchitektur in Ihre Suche ein, damit Sie Ergebnisse für jede Maschine erhalten, an der Sie interessiert sind. –

Antwort

2

Ich gehe davon aus, dass die Zuordnung Ziel für Sie mit Zahlen zu arbeiten, ist doppelt so groß wie das Registers, wie 32-Bit-Zahlen in 16-Bit-Modus oder 64-Bit-Nummern im 32-Bit-Modus. Multiplikationen können ähnlich wie bei der langen Handmultiplikation durchgeführt werden. Ich nehme an, Sie können eine Multiplikationsanweisung verwenden, bei der das Produkt doppelt so groß ist wie der Multiplikand oder Multiplikator. Dieses Beispiel zeigt ein Leerzeichen zwischen den "Wörtern" von Zahlen:

  aaaa bbbb  ;multiplicand 
x   cccc dddd  ;multiplier 
--------------------- 
      eeee eeee  ;bbbb x dddd 
     ffff ffff    ;aaaa x dddd 
     gggg gggg    ;bbbb x cccc 
+ hhhh hhhh     ;aaaa x cccc 
--------------------- 
    pppp pppp pppp pppp  ;product 
0

In x86:

MOV EBX,OP1 
MOV EAX,OP2 
IMUL EBX 

Das Ergebnis ist in EDX: EAX (32-Bit-Register) höherwertigen 32 Bits in der EDX gespeicherten Register und niederwertige 32-Bit werden im EAX-Register gespeichert.

soll Dieser Link helfen, wenn Sie mehr Erklärung benötigen: https://www.tutorialspoint.com/assembly_programming/assembly_arithmetic_instructions.htm

+0

Erweiterungsmultiplikatoren sind der Baustein, mit dem Sie eine 64-Bit * 64-Bit-Multiplikation auf 32-Bit x86 erstellen, aber Sie benötigen 3 von ihnen, um das 64-Bit-Ergebnis zu erhalten. (Und 4 von ihnen, um das volle 128b Ergebnis zu erhalten). Ich denke, das OP fragt nach dem Arbeiten mit Operanden, die doppelt so groß wie ein Register sind, und nicht nur, wie man ein DWORD in x86 multipliziert. –

Verwandte Themen