2016-08-01 54 views
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; 
+1

我不知道hla(而且我永遠不會有意識地修改x86程序集),但是:1)彈出返回地址並稍後推送它以獲取參數非常難看。 2)除非'fmul()'解析爲'fmulp',看起來你正在計算'4 * pi * pi'並在x87堆棧上留下東西3)圓的面積是'pi * r^2'。 4)看起來你正在調用'computeSurfaceArea'而沒有它的參數。 –

+0

對不起,您正在計算球體的表面積,而不是圓的面積。沒有看到。 –

回答

1

看吧: stdout.putr32(區,4,10) ;

不幸的是,您沒有提供足夠的字段寬度輸出文本(前導數字的空間和小數)要正確打印的值。

stdout.putr32(r:real32; width:uns32; decpts:uns32); 這些過程的第一個參數是您希望打印的浮點值。該參數的大小必須與過程名稱相匹配。第二個參數指定輸出文本的字段寬度。與處理整數值時的寬度一樣,此寬度是過程顯示時所需的字符位置數。請記住包含數字符號和小數點的位置。第三個參數指定要在小數點後放置的打印位置的數量。 作爲示例, stdout.putr32(pi,10,4); 顯示值 _ _ _ _ 3.1416 下劃線用於表示前導空格。

我希望這有助於!