【发布时间】:2016-08-01 06:26:16
【问题描述】:
编写一个基于半径计算表面积的 HLA 汇编语言程序。示例程序对话框如下所示。不管你决定怎么做,你的主程序应该包括调用一个过程或函数(至少一个......)来解决这个问题。
我已经编写了代码,但得到“####”作为表面积的输出 这是我的代码:
program surfaceArea;
#include( "stdlib.hhf" );
static
radius : real32;
procedure computeSurfaceArea(r : real32); @nodisplay; @noframe;
static
returnAddress : dword;
area : real32;
begin computeSurfaceArea;
pop(returnAddress);
pop(r);
push(returnAddress);
finit();
fld( r );
fld( st0 );
fmul();
fldpi();
fld(4.0);
fmul();
fmul();
fstp( area );
stdout.putr32(area, 4, 10);
ret();
end computeSurfaceArea;
begin surfaceArea;
stdout.put("Lemme calculate the surface area of a sphere!", nl);
stdout.put("Gimme r: ");
stdin.get(radius);
stdout.put("Surface area = ");
call computeSurfaceArea;
end surfaceArea;
【问题讨论】:
-
我不知道 hla (而且我永远不会故意弄乱 x86 程序集)但是:1)弹出返回地址并稍后推送它只是为了获取参数非常难看. 2) 除非
fmul()解析为fmulp,否则您似乎正在计算4*pi*pi并将东西留在x87 堆栈上3) 圆的面积是pi * r ^ 2。 4) 看来你是在没有参数的情况下调用computeSurfaceArea。 -
抱歉,您计算的是球体的表面积,而不是圆的面积。没看到。