找到irvine组件中球体的体积

时间:2015-09-18 20:04:09

标签: assembly masm irvine32

我已经在我的程序集类中给出了一个赋值,用于创建一个简单的程序来查找给定用户输入的球体的体积,我必须显示一条消息,然后显示一个小数量的体积...我来了使用以下代码但不幸的是我被遗留的地方所困扰,以及如何调用它们。任何人都知道我搞砸了哪些以及如何解决它?

Grade2z = as.data.frame(scale(Grade2[ ,9:14]))#create new dataframe that ONLY has the scaled CBM and aR scores
colnames(Grade2z) = c("Fallz", "Winterz", "Springz", "aRFallz", "aRWinterz", "aRSpringz")
Grade2 = merge(Grade2, Grade2z)

2 个答案:

答案 0 :(得分:3)

来自Irvine32.asm:

;-----------------------------------------------------
WriteDec PROC
;
; Writes an unsigned 32-bit decimal number to
; the console window. Input parameters: EAX = the
; number to write.

所以而不是:

mov edx, OFFSET volumeNumber
call WriteDec

你应该使用:

mov eax, volumeNumber
call WriteDec

同样适用于volumeFraction

答案 1 :(得分:1)

由于代码粗糙,您的程序只能处理小于16的半径。

mov radius, al
mul radius
mul radius

第一次乘法结果是在AX中,但第二次乘法只使用AL!由于AL寄存器的16 * 16已经很大,因此最终可用的数字范围非常有限。

问题继续第三次乘法。这里因为 piMul 被定义为dword mul使用EAX,但只有AX具有来自前一代码的定义值。

mul piMul

您可以定义 radius dword并写入

mov  radius, eax
imul eax, radius
imul eax, radius
mul  piMul
div  piDiv

此外,迈克尔说 WriteDec 期望数字本身而不是数字的地址。因此,请删除 OFFSET 标记。