我必须在汇编中编写一个程序,为学生分配一个字母等级并将其传递给C ++程序。
在C ++中,我正在传递
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 :(得分:1)
看到我避免做作业,我会指出你需要去的方向: A good x86 FPU tutorial(具体而言,comparison instructions)。
FCOM
与FPU堆栈的顶部ST(0)
进行比较,因此在将它们与源值进行比较之前需要FLD
检查的值,反之亦然,FLD
来源,与你拥有的'括号'进行比较。那么您需要提取状态字(使用FSTSW
)并使用逻辑AND
检查值,然后相应地跳转。