0
编写基于半径计算表面积的HLA汇编语言程序。示例程序对话如下所示。然而,你决定这么做,你的主程序应该包括调用一个程序或函数(至少一个...)来解决这个问题。输出中的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'而没有它的参数。 –
对不起,您正在计算球体的表面积,而不是圆的面积。没有看到。 –