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'而沒有它的參數。 –
對不起,您正在計算球體的表面積,而不是圓的面積。沒有看到。 –