begin process at 2012 05 24 02:45:09
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

dlls

 > DLL - FONCTIONS PRODUIT SCALAIRE ET PRODUIT VECTORIEL [MASM]

DLL - FONCTIONS PRODUIT SCALAIRE ET PRODUIT VECTORIEL [MASM]


 Information sur la source

Note :
Aucune note
Catégorie :dlls Niveau :Débutant Date de création :29/01/2004 Date de mise à jour :30/01/2004 18:38:58 Vu / téléchargé :7 133 / 148

Auteur : flecheverte

Ecrire un message privé
Site perso
Commentaire sur cette source (0)
Ajouter un commentaire et/ou une note

 Description

Ceci est un exemple de DLL permetant d'effectuer un produit scalaire ou un produit vectoriel en assembleur. Elle renvoi meme le resulat sous forme d'objet vecteur pour le produit vectoriel. Simple, efficace, rapide, elle peut etre utilisée simplement avec n'importe quelle autre application. Ci-joint dans le zip un exemple d'utilisation avec Visual Basic.

A oui, cependant, elle ne gere que les entiers LONG (4octets), donc pas de nombre a virgule pour le moment.

Source

  • .386
  • .model flat,stdcall
  • .code
  • ;#############################################
  • DLLMain proc p1,p2,p3
  • mov eax,1
  • ret
  • DLLMain endp
  • ;#############################################
  • CreerVecteur proc export Vecteur:ptr,X,Y,Z
  • ;Rentre trois composantes dans un vecteur
  • ;On met les entiers LONG (4octets) aux emplacements memoire
  • ;du type 'Vecteur' (défini sous VB)
  • push esi
  • mov esi,Vecteur
  • mov eax,X
  • mov [esi],eax
  • mov eax,Y
  • mov [esi+4],eax
  • mov eax,Z
  • mov [esi+8],eax
  • pop esi
  • ret
  • CreerVecteur endp
  • ;#############################################
  • ProdScalaire proc export Vecteur1,Vecteur2
  • ;Calcule le produit scalaire de deux vecteurs
  • ;Vecteur est une variable de 12 octets, ou chacune des
  • ;coordonnés x, puis y, puis z, occupe 4 octets
  • push esi
  • ;-------------------
  • mov esi,Vecteur1
  • mov eax,[esi] ; eax <-- Vecteur1.x
  • mov esi,Vecteur2
  • mov ebx,[esi] ; ebx <-- Vecteur2.x
  • imul ebx ; eax <-- eax * ebx
  • mov ecx,eax
  • ;-------------------
  • mov esi,Vecteur1
  • mov eax,[esi+4] ; eax <-- Vecteur1.y
  • mov esi,Vecteur2
  • mov ebx,[esi+4] ; eax <-- Vecteur2.y
  • imul ebx
  • add ecx,eax
  • ;-------------------
  • mov esi,Vecteur1
  • mov eax,[esi+8] ; eax <-- Vecteur1.z
  • mov esi,Vecteur2
  • mov ebx,[esi+8] ; ebx <-- Vecteur2.z
  • imul ebx
  • add eax,ecx
  • ;-------------------
  • pop esi
  • ret
  • ProdScalaire endp
  • ;#############################################
  • ProdVectoriel proc export Vecteur1,Vecteur2,VecteurFin:ptr
  • ;Calcule le produit vectoriel de deux vecteurs
  • ;Vecteur est une variable de 12 octets, ou chacune des
  • ;coordonnés x, puis y, puis z, occupe 4 octets
  • push esi
  • ;-------------------
  • mov esi,Vecteur1
  • mov eax,[esi+4] ; eax <-- Vecteur1.y
  • mov esi,Vecteur2
  • mov ebx,[esi+8] ; ebx <-- Vecteur2.z
  • imul ebx ; eax <-- eax * ebx
  • mov ecx,eax
  • mov esi,Vecteur1
  • mov eax,[esi+8] ; eax <-- Vecteur1.z
  • mov esi,Vecteur2
  • mov ebx,[esi+4] ; ebx <-- Vecteur2.y
  • imul ebx ; eax <-- eax * ebx
  • sub ecx,eax ; ecx <-- ecx - eax
  • mov esi,VecteurFin
  • mov [esi],ecx ; VecteurFin.x <-- ecx
  • ;-------------------
  • mov esi,Vecteur1
  • mov eax,[esi+8] ; eax <-- Vecteur1.z
  • mov esi,Vecteur2
  • mov ebx,[esi] ; ebx <-- Vecteur2.x
  • imul ebx ; eax <-- eax * ebx
  • mov ecx,eax
  • mov esi,Vecteur1
  • mov eax,[esi] ; eax <-- Vecteur1.x
  • mov esi,Vecteur2
  • mov ebx,[esi+8] ; ebx <-- Vecteur2.z
  • imul ebx ; eax <-- eax * ebx
  • sub ecx,eax ; ecx <-- ecx - eax
  • mov esi,VecteurFin
  • mov [esi+4],ecx ; VecteurFin.y <-- ecx
  • ;-------------------
  • mov esi,Vecteur1
  • mov eax,[esi] ; eax <-- Vecteur1.x
  • mov esi,Vecteur2
  • mov ebx,[esi+4] ; ebx <-- Vecteur2.y
  • imul ebx ; eax <-- eax * ebx
  • mov ecx,eax
  • mov esi,Vecteur1
  • mov eax,[esi+4] ; eax <-- Vecteur1.y
  • mov esi,Vecteur2
  • mov ebx,[esi] ; ebx <-- Vecteur2.x
  • imul ebx ; eax <-- eax * ebx
  • sub ecx,eax ; ecx <-- ecx - eax
  • mov esi,VecteurFin
  • mov [esi+8],ecx ; VecteurFin.z <-- ecx
  • ;-------------------
  • pop esi
  • ret
  • ProdVectoriel endp
  • ;#############################################
  • .data
  • end DLLMain
.386
.model		flat,stdcall

.code
;#############################################
DLLMain	proc	p1,p2,p3
		mov	      eax,1
		ret
DLLMain	endp
;#############################################
CreerVecteur     proc export Vecteur:ptr,X,Y,Z
;Rentre trois composantes dans un vecteur
;On met les entiers LONG (4octets) aux emplacements memoire
;du type 'Vecteur' (défini sous VB)
            push	esi
            mov	esi,Vecteur	
            mov	eax,X           
            mov	[esi],eax   
            mov	eax,Y
            mov	[esi+4],eax
            mov	eax,Z
            mov	[esi+8],eax
            pop     	esi
            ret
CreerVecteur	endp
;#############################################
ProdScalaire	proc	export Vecteur1,Vecteur2
;Calcule le produit scalaire de deux vecteurs
;Vecteur est une variable de 12 octets, ou chacune des
;coordonnés x, puis y, puis z, occupe 4 octets
            push esi
            ;-------------------
            mov     esi,Vecteur1
            mov     eax,[esi]         ; eax <-- Vecteur1.x
            mov     esi,Vecteur2
            mov     ebx,[esi]         ; ebx <-- Vecteur2.x
            imul     ebx                ; eax <-- eax * ebx
            mov     ecx,eax
            ;-------------------
            mov     esi,Vecteur1
            mov     eax,[esi+4]     ; eax <-- Vecteur1.y
            mov     esi,Vecteur2
            mov     ebx,[esi+4]     ; eax <-- Vecteur2.y
            imul     ebx
            add      ecx,eax
            ;-------------------
            mov     esi,Vecteur1
            mov     eax,[esi+8]     ; eax <-- Vecteur1.z
            mov     esi,Vecteur2
            mov     ebx,[esi+8]     ; ebx <-- Vecteur2.z
            imul     ebx
            add      eax,ecx
            ;-------------------
            pop esi
            ret
ProdScalaire		endp
;#############################################
ProdVectoriel	proc	export Vecteur1,Vecteur2,VecteurFin:ptr
;Calcule le produit vectoriel de deux vecteurs
;Vecteur est une variable de 12 octets, ou chacune des
;coordonnés x, puis y, puis z, occupe 4 octets
            push esi
            ;-------------------
            mov     esi,Vecteur1
            mov     eax,[esi+4]     ; eax <-- Vecteur1.y
            mov     esi,Vecteur2
            mov     ebx,[esi+8]     ; ebx <-- Vecteur2.z
            imul     ebx                ; eax <-- eax * ebx
            mov     ecx,eax
            mov     esi,Vecteur1
            mov     eax,[esi+8]     ; eax <-- Vecteur1.z
            mov     esi,Vecteur2
            mov     ebx,[esi+4]     ; ebx <-- Vecteur2.y
            imul     ebx                ; eax <-- eax * ebx
            sub      ecx,eax           ; ecx <-- ecx - eax
            mov     esi,VecteurFin
            mov     [esi],ecx          ; VecteurFin.x <-- ecx
            ;-------------------
            mov     esi,Vecteur1
            mov     eax,[esi+8]     ; eax <-- Vecteur1.z
            mov     esi,Vecteur2
            mov     ebx,[esi]         ; ebx <-- Vecteur2.x
            imul     ebx                ; eax <-- eax * ebx
            mov     ecx,eax
            mov     esi,Vecteur1
            mov     eax,[esi]         ; eax <-- Vecteur1.x
            mov     esi,Vecteur2
            mov     ebx,[esi+8]     ; ebx <-- Vecteur2.z
            imul     ebx                ; eax <-- eax * ebx
            sub      ecx,eax           ; ecx <-- ecx - eax
            mov     esi,VecteurFin
            mov     [esi+4],ecx     ; VecteurFin.y	<-- ecx
            ;-------------------
            mov     esi,Vecteur1
            mov     eax,[esi]         ; eax <-- Vecteur1.x
            mov     esi,Vecteur2 
            mov     ebx,[esi+4]     ; ebx <-- Vecteur2.y
            imul     ebx                ; eax <-- eax * ebx
            mov     ecx,eax
            mov     esi,Vecteur1
            mov     eax,[esi+4]    ; eax <-- Vecteur1.y
            mov     esi,Vecteur2
            mov     ebx,[esi]        ; ebx <-- Vecteur2.x
            imul     ebx                ; eax <-- eax * ebx
            sub      ecx,eax          ; ecx <-- ecx - eax
            mov     esi,VecteurFin
            mov     [esi+8],ecx      ; VecteurFin.z <-- ecx
            ;-------------------
            pop esi
            ret
ProdVectoriel		endp
;#############################################
.data
    
end		DLLMain

 Conclusion

Ceci est ma premiere source en assembleur, j'espere qu'elle vous sera utile, sinon bah ... tampis lol
Je tiens à remercier l'auteur de la source : http://www.asmfr.com/code.aspx?ID=18833 sans qui j'aurais été dans l'impossibilité d'écrire la mienne ! ;-)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources de la même categorie

Source avec Zip Source avec une capture DLL ALGORYTHME DE RECHERCHE DE CHEMIN EN A STAR, A*, FASM par Devnix
Source avec Zip DLL EFFECTUANT UNE TRANSFORMÉE DE FOURIER RAPIDE par Nasman
Source avec Zip DLL MASM32 ET DARKBASIC PRO par Apinew
Source avec Zip DLL AVEC NASM ET ALINK par ibroman
Source avec Zip OBTENIR LE CPUID DE SON PROCESSEUR (DLL) par sibi12

Commentaires et avis

Aucun commentaire pour le moment.

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,076 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales