=== DEBUT SOURCE ===
WBStartup
WbToScreen 3
Use Screen 3
LoadFont 2,"topaz.font",8
Use IntuiFont 2
;On déclare nos variables...
;...codées sur un octet (byte ; 8 bits)
chiffre_un.b=0
chiffre_deux.b=0
;...codées sur 32 bits (long)
resultat.l=0
;Voici venir la GadgetList numéro 0
;On prépare les boutons +, -, * et /
GTButton 0,1,10,0,40,15,"+",$10
GTButton 0,2,10,20,40,15,"-",$10
GTButton 0,3,10,40,40,15,"*",$10
GTButton 0,4,10,60,40,15,"/",$10
;On prépare les deux zones de saisie
GTString 0,5,80,20,40,15,"",$10,1
GTString 0,6,80,40,40,15,"",$10,1
;On ouvre le fenêtre numéro 0 et on en fait la sortie par défaut
Window 0,0,14,320,120,$140e,"Un peu d'ASM 68k avec le Blitz",-1,-1
DefaultOutput
;On attache la GadgetList numéro 0 à la fenêtre numéro 0
AttachGTList 0,0
Use Window 0
;Boucle principale du programme
While ev.l<>$200
;On recupere les evenements qui se produisent dans la fenetre du logiciel
ev.l=Event
WindowOutput 0
;Si on clique sur un bouton
;et qu'on a bien saisi deux chiffres
If (GTGetString(0,5)<>"") AND (GTGetString(0,6)<>"")
AND (Len(GTGetString(0,5))<2) AND (Len(GTGetString(0,6))<2)
If ev.l=64
;Si on clique sur le bouton +
If GadgetHit=1
;Nos zones de saisies contenant de la chaîne de caractères
;on doit les transformer en chiffres avec la fonction VAL()
chiffre_un.b=Val(GTGetString(0,5))
chiffre_deux.b=Val(GTGetString(0,6))
;On met tout le registre processeur D0 à 0
CLR.l d0
;Même traitement pour D1, il ne faut pas qu'il reste de cochonneries dedans
CLR.l d1
;On met le contenu de la variable entière codée sur un octet nommée CHIFFRE_UN
GetReg d0,chiffre_un.b
;Je vous laisse deviner :-)
GetReg d1,chiffre_deux.b
;On ajoute les 8 bits de poids faible de la valeur contenue dans le registre
;D0 à celle contenue dans D1 et on stocke le résultat dans D1
ADD.b d0,d1
;On transfére le contenu de D1 dans la variable entière codée sur 32 bits
;nommée RESULTAT
PutReg d1,resultat.l
;On positionne le curseur de texte dans la fenêtre
WLocate 10,100
Print Str$(chiffre_un.b)+" + "+Str$(chiffre_deux.b)+" = "+Str$(resultat.l)+" "
EndIf
;Si on clique sur le bouton -
If GadgetHit=2
chiffre_un.b=Val(GTGetString(0,5))
chiffre_deux.b=Val(GTGetString(0,6))
CLR.l d0
CLR.l d1
GetReg d0,chiffre_un.b
GetReg d1,chiffre_deux.b
;La gestion des résultats négatifs avec la soustraction est un peu spéciale, on
;va se contenter de gérer du positif pour l'instant
SUB.b d1,d0
PutReg d0,resultat.l
WLocate 10,100
Print Str$(chiffre_un.b)+" - "+Str$(chiffre_deux.b)+" = "+Str$(resultat.l)+" "
EndIf
;Si on clique sur le bouton *
If GadgetHit=3
chiffre_un.b=Val(GTGetString(0,5))
chiffre_deux.b=Val(GTGetString(0,6))
CLR.l d0
CLR.l d1
GetReg d0,chiffre_un.b
GetReg d1,chiffre_deux.b
;L'instruction MULU MULtiplie deux valeurs Unsigned (non signées), en d'autres
;termes, des nombres entiers.
MULU.b d0,d1
PutReg d1,resultat.l
WLocate 10,100
Print Str$(chiffre_un.b)+" * "+Str$(chiffre_deux.b)+" = "+Str$(resultat.l)+" "
EndIf
;Si on clique sur le bouton /
If GadgetHit=4
chiffre_un.b=Val(GTGetString(0,5))
chiffre_deux.b=Val(GTGetString(0,6))
CLR.l d0
CLR.l d1
GetReg d0,chiffre_un.b
GetReg d1,chiffre_deux.b
DIVU.l d1,d0
PutReg d0,resultat.l
WLocate 10,100
Print Str$(chiffre_un.b)+" / "+Str$(chiffre_deux.b)+" = "+Str$(resultat.l)+" "
EndIf
EndIf
EndIf
Wend
DetachGTList 0
Free Window 0
End
=== FIN SOURCE ===
|