【发布时间】:2014-04-19 18:33:11
【问题描述】:
在 vs2010 下使用 inline asm 的 div 存在轻微的注册问题。
testScore 和gradeScale 是整数。
_asm
{
mov eax, testScore //student's score - let's test 36
mov ebx, 40 //max possible score of 40
xor edx,edx //prevented an integer overflow error.
div ebx //divide and multiple by 100 to get letter grade.
//SHOULD BE 36/40 = .9 but 36 is in EDX instead.
imul edx, 100 //should now be 90 in EDX, but it's at 3600.
mov gradeScale, edx //move result to gradeScale
}
36/40 应该在 EAX 中放置 0,在 EDX 中放置 0.9。然后将其乘以 100 并将其存储到gradescale。
应该很简单,但我在这里遗漏了一些东西......
感谢收看。
【问题讨论】:
-
请问
xor edx,edx是干什么用的? -
我收到一个整数溢出错误,我读到的another post 建议这是因为 EDX 没有初始化。我对 ASM 真的很陌生,所以我决定尝试一下,它奏效了。
-
您应该查阅指令集参考以了解 div 的工作原理。