2016-08-01 6 views
0

Напишите языковую программу HLA Assembly, которая вычисляет площадь поверхности на основе радиуса. Ниже приведен пример диалога программы. Однако вы решили это сделать, ваша основная программа должна включать вызов процедуры или функции (по крайней мере один ...) для решения этой проблемы.Ошибка программы HLA Surface area в выходном файле

Я написал мой код, но получить "####" в качестве выходного сигнала площади поверхности 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 (и я никогда не пойду с целью сборки х86 сборки), но: 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 , где символы подчеркивания используются для представления ведущих пространств.

Надеюсь, это поможет!