【问题标题】:HLA Surface area program error in output输出中的 HLA 表面积程序错误
【发布时间】: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
  • 抱歉,您计算的是球体的表面积,而不是圆的面积。没看到。

标签: assembly hla


【解决方案1】:

看这里: stdout.putr32(area, 4, 10);

很遗憾,您没有为输出文本提供足够的字段宽度(前导数字或小数的空格)以正确打印值。

stdout.putr32(r:real32; width:uns32; decpts:uns32); 这些过程的第一个参数是您希望打印的浮点值。此参数的大小必须与过程名称匹配。第二个参数指定输出文本的字段宽度。与处理整数值时的宽度一样,此宽度是该数字在程序显示时所需的字符位置数。记住要包括数字符号和小数点的位置。第三个参数指定要放置在小数点后的打印位置数。 举个例子, 标准输出.putr32(pi, 10, 4); 显示值 _ _ _ _ 3.1416 其中下划线用于表示前导空格。

我希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2015-02-27
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 1970-01-01
    相关资源
    最近更新 更多