具体实现函数,注释已经给出。
.686 .387 .model flat, stdcall option casemap : none include windows.inc include kernel32.inc include user32.inc includelib kernel32.lib includelib user32.lib .data Table EQU THIS BYTE;//宏定义 定义了9个初值分别为1,2,3,4...9的字节单元,Table为这些字节单元的首地址 COUNT = 1 REPT 9 DB COUNT COUNT = COUNT + 1 ENDM F REAL4 ? T DW ? ; //临时变量Temp,用于存放1+2+3...+9的值,并从整形转换成实数类型的跳板 L1 REAL4 0.000001 C1 REAL4 0.000001 TWO REAL4 2.0 ONE REAL4 1.0 ZERO REAL4 0.0 _size DW 80 .code start: MOV CX, 9;//设置循环次数 FLD ZERO;//给栈顶置零 LEA ESI, Table;//把DS:Table的偏移地址给ESI,用于寄存器间接寻址 sum: CMP CX, 0 JE calculation;//如果CX为零则跳转到calculation段 MOV AX, 0 MOV AL, [ESI] MOV T, AX FILD T;//FILD指令将16位 32位或者64位有符号整数源操作数转换为双精度浮点数,并加载到ST(0)。源操作数符号保留。FILD支持的内存操作数类型和MOV一致 FADD ADD ESI, 1 LOOP sum;//本来这句是CX为零就不执行跳转的语句,但是不知道为什么没有实现???? calculation: FSTP ST(2) FLD L1; //将L1入栈 FMUL C1; //ST < -(C1) * (ST) FSQRT; //ST < -sqrt(ST) FMUL TWO; //ST < -(TWO) * (ST) FLDPI; //ST < -PI FMUL;//ST<-ST(1)*ST FLD ONE;//ST <- 1 FDIVR;//ST <- ST/ST(1) FLD ST(2) FMUL FSTP F;//F<-ST invoke ExitProcess,NULL end start调试结果:


![宏汇编以及浮点程序设计实验,求(1+2+3+4+5+6+7+8+9)*[1/(2*PI*Sqrt(L*C))]的和,查看内存写出其值 宏汇编以及浮点程序设计实验,求(1+2+3+4+5+6+7+8+9)*[1/(2*PI*Sqrt(L*C))]的和,查看内存写出其值](http://www.mshxw.com/aiimages/31/311723.png)
