欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > 宏汇编以及浮点程序设计实验

宏汇编以及浮点程序设计实验

2025/9/18 3:18:56 来源:https://blog.csdn.net/m0_72760405/article/details/148073501  浏览:    关键词:宏汇编以及浮点程序设计实验

实验要求

  1. 利用重复宏定义实现1、2、3¼9数据的定义;
  2. 编写程序,上机验证结果的正确性

 实验分析

(1)使用重复宏伪指令对数据1、2、3、4、5、6、7、8、9进行定义。

(2)先求出L×C的结果,使用FSQRT算术运算指令对其开平方根,乘2后使用FLDPI置π指令实现π的存储,然后其与前面的结果相乘。使用FLD ONE将堆栈寄存器ST(0)置1完成数字1的存储,最后使用FDIVR实现实数反除指令完成第二部分的计算。

3)最后就是将第一部分的和值和第二部分相乘。

 程序设计

  1. 编写重复宏程序,定义了9个初值分别为1,2,3,4...9的字节单元,Table为这些字节单元的首地址,程序如下:

.data

Table EQU  THIS BYTE;宏定义 定义了9个初值分别为1,2,3,4...9的字节单元,Table为这些字节单元的首地址

COUNT = 1

REPT 9

DB COUNT

COUNT = COUNT + 1

ENDM

  1. 数据部分:

RESULT     REAL4 ?

ADDSUM  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

  1. 代码段:

.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

calculation:

    FSTP ADDSUM

    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)

    FMUL

    FSTP RESULT ; RESULT <-ST

    invoke ExitProcess,NULL

end start

查看浮点计数器进行调试。

通过循环1+2+3+…+9求和,求和后的结果保存在自定义变量ADDSUM中。

图1 1+2+……+9保存在ADDSUM中

图2 L1入栈

……

最终,运算结果保存在自定义变量RESULT中,即RESULT = ST0,然后ST0弹栈。

图11 结果

如果对你有帮助的话,请给我点个赞吧❤

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词