2016-08-01 6 views
0

半径に基づいて表面積を計算するHLAアセンブリ言語プログラムを作成します。サンプルのプログラムダイアログが以下に示されています。しかし、あなたはそれを行うことに決めましたが、あなたのメインプログラムは、この問題を解決するためにプロシージャまたは関数(atleast one ...)を呼び出すことを含むべきです。表面積 の出力としてHLA出力の表面領域プログラムエラー

私は私のコードを書かなく、取得している "####" HERESに私のコード:ここ

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アセンブリをmanglingの点を得るだろうが):1)戻り値のアドレスをポップアップし、ちょうどパラメータを取得するためにそれを後押しするのは非常に醜いです。 2) 'fmul()'が 'fmulp'に解決されなければ、あなたは' 4 * pi * pi'を計算していて、x87スタックに残しているようです。3)円の面積は 'pi * r^2'です。 4)パラメータなしで 'computeSurfaceArea'を呼び出すようです。 –

+0

申し訳ありませんが、円の面積ではなく、球の表面積を計算しています。それを見ていない。 –

答えて

1

ルック: stdout.putr32(面積、4、10) ;

残念ながら、値が正しく出力されるためには、出力テキスト(先頭の数字も10進数のスペース)にも十分なフィールド幅が提供されていません。

stdout.putr32(r:real32; width:uns32; decpts:uns32); これらのプロシージャの最初のパラメータは、印刷する浮動小数点値です。このパラメータのサイズは、プロシージャ名と一致する必要があります。 2番目のパラメータは、出力テキストのフィールド幅を指定します。整数値を扱うときの幅と同様に、この幅は、プロシージャが表示するときに必要となる文字位置の数です。数字の符号と小数点の両方の位置を含めることを忘れないでください。 3番目のパラメータは、小数点の後に置く印刷位置の数を指定します。たとえば、 stdout.putr32(pi、10、4); は、 _ _ _ _ 3.1416 という値を表示します。ここで、アンダースコアは先頭のスペースを表すために使用されます。

こちらがお役に立てば幸いです。