Saisie et affichage de valeur en assembleur

Fermé
don1design Messages postés 72 Date d'inscription vendredi 4 juin 2010 Statut Membre Dernière intervention 4 septembre 2015 - 19 juil. 2011 à 02:07
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 - 19 juil. 2011 à 18:40
Bonjour,
je suis un debutant en assembleur
je veux realiser un programme qui arrive a realiser cette equation
Y = 5Xcarre - 2X + 6

pour commencer
jaimerais savoir cmt faire la saise de la valeur X puis la stocker dans AL
puis je compte faire les action suivantes


mov BX, AL    ; stocker la valeur de X dans BX
mul BX        ; multiplier BX par BX
mul BX, 5     ; multiplier BX par 6
mov CX, AL    ; stocker la valeur de X dans CX
mul CX, 2     ; multiplier la valeur de X par 2 et la stocker dans CX
sub BX, CX    ; soustraire BX par CX
add BX, 6     ; additioner BX par 6
mov AX, BX    ; placer BX dans AX



apres cela jaimerais aussi savoir comment afficer la valeur se trouvant dans le registre AX

merci pour laide que vous maporteriez

5 réponses

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 19/07/2011 à 13:06
Hé bien tout dépend de ton logiciel d'assemblage et de l'environnement sous lequel tu l'exécutes...
Sachant qu'en asm tu ne peux même pas appeler les fonctions bases type Cin, ReadLn des languages évolués, tu peux au pire te servir des fonctions du bios via les interruptions. Mais si ton but c'est d'écrire en asm de manière plus exploitable, je te conseille plutôt d'utiliser un language évolué en soutiens de l'assembleur genre delphi 6.0, que tu peux trouver gratuitement dans google, ou en C mais là je ne sais pas ce qui existe...
De plus ça te permettras de faire de l'asm 32 bits, bcp plus souple et puissant...
Ceci étant dit, quelques remarques :
- Le type octet semble un peu court pour faire du calcul au carré...        
Tu peux organiser ton code en fonction standard type, avec retour word AX:        
Fonction Operation(Valeur : Byte): Word;        
- Tu ne peux pas transférer un registre octet vers un mot - Mov BX,AL - Il faut mettre AH à 0 puis Mov BX,AX.        
- Mul ne multplie qu'avec AX, donc 'mul BX' égale 'Mul AX,BX'.      
Avec une petite réorganisation ça donne :        
Fonction Operation(Valeur : Byte): Word; // La valeur passe par AL en standard        
  asm        
    Xor    AH,AH;        
    mov    BX,AX               
    mul    AX        // On multiplie AX par lui-même en conservant BX        
    Imul   AX,05   // Mul ne permet pas de multiplier avec une constante              
    Add    BX,BX  // En asm on additionne ou on décale d'1 bit (Shl BX,01) plutôt qu'une multiplication         
    Sub    AX,BX;        
    Add    AX,06;        
 end;                  // Le retour de fonction via AX est standard        

En asm 32 bits, en préférant ECX à EBX :        
Fonction Operation(Valeur : Byte): DWord;      
  asm        
    Movzx EAX,AL;        
    Lea   ECX,[EAX*2] // Lea permet de faire des opérations simples        
    Imul  EAX,EAX,5    // On multiplie EAX par lui-même et par 5        
    Sub   EAX,ECX;        
    Add   EAX,06;        
 end;                  // Le retour de fonction via EAX est standard        

2
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 19/07/2011 à 18:52
Je pense que emu8086 sera compatible avec win xp, mais ton code ne fonctionnera toujours pas car la moitié des expressions seront illégales pour le compilateur, ce serait bien que tu lises ce que j'ai ecris plus haut...

Le chêne aussi était un gland, avant d'être un chêne
1
don1design Messages postés 72 Date d'inscription vendredi 4 juin 2010 Statut Membre Dernière intervention 4 septembre 2015
19 juil. 2011 à 07:42
j'utilise
emu8086 4.08
sur windows 7 ultimate 64bits
0
nicocorico Messages postés 799 Date d'inscription dimanche 19 juin 2011 Statut Membre Dernière intervention 3 juillet 2018 138
19 juil. 2011 à 12:22
Hé bien tu dois pouvoir utiliser l'interruption 10h pour lire et écrire, mais tout dépend de ce que tu veux faire car si tu veux faire de l'asm dans de bonnes conditions, mieux vaut passer au 32 bits, et comme je te le disais tu peux obtenir delphi 6.0 gratuitement, et il te permet de faire du mode console et de programmer en asm uniquement, ou bien de programmer en mode graphique et d'utiliser toutes les facilitées du language évolué, le tout sans émulateur...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
don1design Messages postés 72 Date d'inscription vendredi 4 juin 2010 Statut Membre Dernière intervention 4 septembre 2015
19 juil. 2011 à 14:00
bon je vais devoir
utiliser l'IBM ThinkPad de mon petit frere windows xp 32bits
je peux tjr utiliser eme8086 sur l'IBM ou je dois telecharger ASM?

cette sequence de code
[CODE]mov BX, AL ; stocker la valeur de X dans BX
mul BX ; multiplier BX par BX
mul BX, 5 ; multiplier BX par 6
mov CX, AL ; stocker la valeur de X dans CX
mul CX, 2 ; multiplier la valeur de X par 2 et la stocker dans CX
sub BX, CX ; soustraire BX par CX
add BX, 6 ; additioner BX par 6
mov AX, BX ; placer BX dans AX
[/CODE]
sera telle tjr valabe sur ASM?

quelle est la commande qui me permettera de faire la saisie de la valeur 'X' ?
et celle qui me permettra d'afficher 'Y' ?
0