ich ziemlich neu bin in Versammlung, und ich habe einen hardtime mit negativer Zahl zu tunMultiplikation in der Montage mit einem negativen Zahl und führen
#include <stdio.h>
void main() {
short int mat1[] = {-1,-2, 4,5, 4,-2}; // first array
short int mat2[] = {2,0,0,0, 0,2,0,0}; // second array
int mat3[1024]; // result array
__asm {
MOV AX, mat1[0] ; mat1[0]:= -1
MOV BX, mat2[0] ; mat2[0]:= 2
; my problem is how i can do this
; mat3[0] = mat1[0] * mat2[0] ;
; (operation result -> mat3[0] = -2)
}
}
P. S. Dies ist für meine Hausaufgaben Dank im Voraus
Neue Frage:
Nach einigem Montagevorgang versuchen:
MOV AX, mat1[ECX] ; eax is 0 and mat1[ecx] is -1
aber nach dieser Operation wie AX kommen wird auf 65.535 und nicht bis 1? Wie kann ich richtige Multiplikation dann tun, wenn AX-Register nicht korrekt ist? Ich bin ganz durcheinander bringen, wie Komplement 2.
ich eine andere Frage kam zu behandeln. derzeit habe ich diesen Code, wo ich IMUL Ergebnis zu Array verschieben.
MOV WORD PTR mat3[ECX*4]+0, AX
MOV WORD PTR mat3[ECX*4]+2, DX
Meine Frage ist, wie kann ich das IMUL-Ergebnis zum aktuellen Array [idx] -Wert hinzufügen?
mit diesem wo mat3 [aktueller Index] = 0, ist die Operation korrekt. aber wenn zum Beispiel mat3 [aktueller Index] = -2, habe ich eine andere Zahl als das, was ich erwarte.
ADD WORD PTR mat3[ECX*4]+0, AX
ADD WORD PTR mat3[ECX*4]+2, DX
Ich danke Ihnen im Voraus für Ihre Hilfe
Keine Notwendigkeit zu beantworten. Ich habe es schon herausgefunden. – whebz
Siehe auch [meine Antwort hier zum Multiplizieren von 16-Bit-Zahlen und Erzeugen eines 32-Bit- ("int") Ergebnisses (http://stackoverflow.com/questions/39581293/invalid-instruction-operands-on-mov-ah) -word-Variable-und-Using-imul-on-16-bi/39582213 # 39582213). –