Ist es möglich, durch multiplizieren einer unmittelbaren mit mul in x86 Assembler?
Ich Lerne Montage für x86 mit DosBox-emulator. Ich bin versucht, führen Sie eine Multiplikation. Ich weiß nicht, wie es funktioniert. Wenn ich den folgenden code schreiben:
mov al, 3
mul 2
Bekomme ich eine Fehlermeldung. Obwohl, in den die Referenz die ich benutze, heißt es bei der Multiplikation, es wird davon ausgegangen AX ist immer der Platzhalter, also, wenn ich Schreibe:
mul, 2
Multipliziert es al
Wert von 2. Aber es funktioniert bei mir nicht.
Wenn ich versuche die folgende:
mov al, 3
mul al,2
int 3
Ich bekomme 9 in ax. Siehe dieses Bild zur Verdeutlichung:
Andere Frage: Kann ich multiplizieren mit memory-Lage direkt? Beispiel:
mov si,100
mul [si],5
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine form der
MUL
akzeptiert, dass ein unmittelbarer operand.Entweder:
oder:
oder:
oder:
imul ax, 2
das Produkt in AX (nicht in DX:AX).imul
-sofort ist eine 3-Operanden der Instruktion. So können Sie es verwenden, nicht-destruktiv, wieimul cx, si, 1234
. Die meisten Assemblern Sie schreibenimul cx, 1234
als kurzer hand fürimul cx, cx, 1234
, ähnlich wie beim schreibenvaddps ymm0, ymm1
stattvaddps ymm0, ymm0, ymm1
: d.h., wenn dst = src1.Intel manuelle
Den Die Intel 64-und IA-32 Architectures Software Developer ' s Manual - Volume-2-Befehlssatz-Referenz - 325383-056US September 2015
Abschnitt "MUL - Unsigned Multiply" - Spalte
Instruction
enthält nur:r/mXX
bedeutet-register oder-Speicher: so immediates (immXX
) wiemul 2
sind nicht erlaubt in einer der Formen: der Prozessor einfach nicht unterstützen, dass die operation.Dies beantwortet auch die zweite Frage: ist es möglich, durch multiplizieren Speicher:
Und zeigt auch, warum Dinge wie
mul al,2
wird nicht funktionieren: es gibt keine form, die zwei Argumente nimmt.Wie erwähnt von Michael jedoch
imul
nicht haben unmittelbare Formen wieIMUL r32, r/m32, imm32
und viele andere, diemul
nicht.