Je suis assez nouveau à l'Assemblée, et j'ai un hardtime traiter nombre négatifdans l'assemblage avec multiplication nombre négatif et le résultat
#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)
}
}
de P.S. Ceci est pour mes devoirs merci à l'avance
Nouvelle Question:
Après tente une opération de montage:
MOV AX, mat1[ECX] ; eax is 0 and mat1[ecx] is -1
mais après cette opération comment se AX est réglé sur 65535 et non à -1? Comment puis-je effectuer une multiplication correcte si le registre AX n'est pas correct? Je confonds tout à fait la façon de traiter complément de 2.
Je suis une autre question. actuellement j'ai ce code où je me déplace IMUL résultat à tableau.
MOV WORD PTR mat3[ECX*4]+0, AX
MOV WORD PTR mat3[ECX*4]+2, DX
Ma question est comment puis-je ajouter le résultat IMUL à la valeur Array [idx] actuelle?
avec ceci où mat3 [indice actuel] = 0, l'opération est correcte. mais quand par exemple mat3 [index actuel] = -2, j'ai un nombre différent de ce que je m'attends à obtenir.
ADD WORD PTR mat3[ECX*4]+0, AX
ADD WORD PTR mat3[ECX*4]+2, DX
Je vous remercie d'avance pour votre aide
Pas besoin de répondre. J'ai déjà compris. – whebz
Voir aussi [ma réponse ici sur la multiplication des nombres 16 bits et la production d'un résultat 32 bits ('int') (http://stackoverflow.com/questions/39581293/invalid-instruction-operands-on-mov-ah -word-variable-et-using-imul-on-16-bi/39582213 # 39582213). –