2010-11-29 10 views
0

Je dois écrire une procédure dans l'assemblage pour affecter une note à un étudiant et la renvoyer au programme C++.Affectation de classes à l'assemblage

En C++ Je passe

extern "C" char LetterGrade (double); 


.data 

GradeA REAL4 89.99 

GradeB REAL4 79.99 

GradeC REAL4 69.99 

GradeD REAL4 59.99 

_LetterGrade proc 

fld REAL4 PTR [esp + 4] 

fcom GradeA 
jnbe L1 

fcom GradeB 
jnbe L2 

fcom GradeC 
jnbe L3 

fcom GradeD 
jnbe L4 

mov eax, 'F' 
ret 

L1: 
mov eax, 'A' 

ret 

L2: 
mov eax, 'B' 

ret 

L3: 
mov eax, 'C' 

ret 

L4: 
mov eax, 'D' 

ret 

_LetterGrade endp 
+0

quelle est la question? et pourquoi n'est-ce pas étiqueté comme devoir? – Necrolis

+0

Assemblée est une meilleure étiquette, ou alors je pensais. – justbrianr

+0

Je dois écrire une fonction dans l'assemblage qui attribue une note de lettre aux étudiants après la moyenne de 6 de leurs notes. Comme d'habitude 90+ est un A, 80+ mais <90 est un B et ainsi de suite. – justbrianr

Répondre

1

Voyant que j'éviter de faire des devoirs, je vais plutôt vous orienter dans la direction que vous devez aller: A good x86 FPU tutorial (en particulier, comparison instructions).

FCOM ne fait une comparaison au sommet de la pile de FPU, ST(0), vous devez FLD les valeurs vous vérifiez contre avant de les comparer à la valeur de votre source ou vice versa, FLD la source, comparer vs les « crochets » tu as. alors vous devez sortir le mot d'état (avec FSTSW) et vérifier les valeurs avec un AND logique puis sauter en conséquence.

+0

L'utilisation de 'fcom m32fp' est correcte et la valeur de comparaison a été chargée. Vous avez tout à fait raison d'avoir besoin du mot d'état FPU (le mot de contrôle est différent, 'FSTSW' est correct) et de vérifier les bits. – Zooba

+0

@zooba: oui, je viens de voir que j'ai répété des étapes qu'il avait déjà fait, eh bien, pas de mal à dire le bon: P – Necrolis