Intel汇编-基本浮点运算

# An example of basic FPU math
#
# 基本浮点运算
#
# FADD        浮点加法
# FDIV        浮点除法
# FDIVR        反向浮点除法
# FMUL        浮点乘法
# FSUB        浮点减法
# FSUBR        反向浮点减法
#
# 每一个都具有单独的指令和格式,可以生成6个可能的功能,取决于执行的确切操作是什么。
#
# FADD source        # 内存中的32位或者64位值和ST0相加
# FADD %st(x), %st(0)    # st(x) 和 st(0) 相加,结果存储到st(0)中
# FADDP %st(0), %st(x)    # st(0) 和 st(x) 相加,结果存储到st(x)中,并且弹出st(0)
#
# 操作完成后如何处理寄存器(要么保留,要么弹出堆栈)。跟踪FPU寄存器值的状态很重要。
# 有时候复杂的数学操作会执行多个操作,这些操作把各种值存储到不同的寄存器中,这时跟踪状态是困难的。
#
#
# ((43.65  / 22) + (76.34 * 3.1)) / ((12.43 * 6) - (140.2 / 94.21))
#
#

    .section .data
value1:
    .float 43.65
value2:
    .int 22
value3:
    .float 76.34
value4:
    .float 3.1
value5:
    .float 12.43
value6:
    .int 6
value7:
    .float 140.2
value8:
    .float 94.21
output:
    .asciz "The result is %f\n"

    .section .text
    .globl main
main:
    nop
    finit
    flds value1
    fidiv value2
    flds value3
    flds value4
    fmul %st(1), %st(0)
    fadd %st(2), %st(0)
    flds value5
    fimul value6
    flds value7
    flds value8
    fdivrp
    fsubr %st(1), %st(0)
    fdivr %st(2), %st(0)
    subl $8, %esp
    fstpl (%esp)
    push $output
    call printf
    add $12, %esp
    push $0
    call exit

# gcc -g -o 04 04-fpmath.s -m32
#
# The result is 3.264907
#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值