Schreiben Sie ein HLA-Assemblerprogramm, das die Fläche basierend auf einem Radius berechnet. Ein Beispielprogrammdialog ist unten gezeigt. Wie auch immer Sie sich entscheiden, Ihr Hauptprogramm sollte das Aufrufen einer Prozedur oder Funktion (mindestens eines ...) beinhalten, um dieses Problem zu lösen.HLA-Oberflächenprogrammfehler in der Ausgabe
Ich habe meinen Code geschrieben, aber bekommen "####" als die Ausgabe der Oberfläche heren meinen Code:
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;
Ich weiß nicht, hla (und ich werde nie den Punkt des Mangels x86 Assembly absichtlich) aber: 1) Popping die Absenderadresse und drücken Sie es später nur um einen Parameter zu bekommen ist sehr hässlich. 2) wenn 'fmul()' sich in 'fmulp' auflöst, scheint es, dass Sie' 4 * pi * pi' berechnen und Sachen auf dem x87 Stapel hinterlassen. 3) Die Fläche eines Kreises ist 'pi * r^2'. 4) Es scheint, dass Sie 'computeSurfaceArea' ohne seinen Parameter aufrufen. –
Entschuldigung, Sie berechnen die Fläche einer Kugel, nicht die Fläche eines Kreises. Hab das nicht gesehen. –