Programmation en Assembleur

Fermé
Louvitou - 25 juil. 2011 à 00:08
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 - 25 juil. 2011 à 06:43
Bonjour,
Pouvez vous m'aidez svp a ecrire un programme en assembleur qui resout une equation du second degre genre Y= 5x2 -2x +6 ou la valeur de X est enregistree dans AL et le resultat de l'equation (Y) est retourne dans AX


1 réponse

nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
Modifié par nicocorico le 25/07/2011 à 17:29
L'assembleur étant très orienté calcul pur, c'est presque aussi simple qu'en language de haut niveau, et voici la marche à suivre sous forme de fonction :
-> en assembleur 16 bits :                        
Function Equation(Valeur: Byte): Word;   // valeur dans AL  
 asm                               
    Xor    AH,AH;    // Met 0 dans AH car il fera partie de la multiplication                                  
    Mov    CX,AX                           
    Imul   AX,AX,05;   // On multiplie AX par lui-même et 5      
    Add    CX,CX;      // Multiplie par 2  
    Sub    AX,CX;                               
    Add    AX,06;                               
 end;                  // Retour de fonction via AX    

-> en asm 32 bits :                               
Fonction Equation(Valeur: Byte): DWord;                             
  asm                               
    Movzx EAX,AL;           // Conserve AL seulement  
    Lea   ECX,[EAX+EAX-06] // Lea permet de faire des opérations simples, en préfèrant ici EAX+EAX à EAX*2 car l'opcode est plus léger  
    Imul  EAX,EAX,5;       // On multiplie EAX par lui-même et 5   
    Sub   EAX,ECX;       // On soustrait 2x et -6 (donc +6)  
end;                  // Retour de fonction via EAX        
0