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

这篇博客详细介绍了使用x86汇编语言实现从1到9的整数累加,并将结果由整数转换为浮点数的过程。通过`TableEQUTHISBYTE`宏定义存储初始值,最后利用`FSTP`, `FLDL1`, `FMULC1`等指令完成计算和转换。
摘要由CSDN通过智能技术生成

具体实现函数,注释已经给出。

.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

调试结果:

在这里插入图片描述

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值