zoukankan      html  css  js  c++  java
  • 读书笔记——Windows环境下32位汇编语言程序设计(3)求复数模的子程序

    3.6.1.1中的例子

    _Calc	proc 	_dwX,_dwY
    	local	@dwResult
    
    	finit
    	fild	_dwX
    	fld	st(0)
    	fmul			;i*i
    	fild	_dwY
    	fld	st(0)
    	fmul			;j*j
    	fadd			;i*i+j*j
    	fsqrt			;sqrt(i*i+j*j)
    	fistp	@dwResult	;put result
    	mov	eax,@dwResult
    	ret
    
    _Calc	endp

    以下指令解释来自百度百科

    FINIT指令(0xdb,0xe3)用来清除浮点数据寄存器栈和异常,初始化FPU。为程序提供一个“干净”的初始状态。否则,遗留在浮点寄存器栈中的数据可能会产生堆栈溢出。该指令清除浮点数据寄存器栈和异常。一般用于驱动程序中的入口点,防止驱动蓝屏。同样,该指令也用于浮点传送程序。(FPU:(Float Point Unit,浮点运算单元)FPU是专用于浮点运算的处理器,以前的FPU是一种单独芯片,在486之后,英特尔把FPU集成在CPU之内。)

    FILD 是将整数转化为长双精FP80压栈(压到st0)。

    FLD是Intel的指令集协处理器的汇编指令,FLD 指令用于把浮点数字传送入和传送出FPU寄存器.

    -----------------------------------------------------------------------------

    为什么我在intel的手册上看到的FMUL指令是有操作数的?




  • 相关阅读:
    0/1背包问题
    假如爱有天意(中文版)
    tomcat集群
    分布式锁
    centos7安装Harbor(转载)
    isEmpty和isBlank的区别
    单体应用架构和分布式架构的比较
    微服务鉴权
    mysql的时区设置
    RSA非对称加密算法
  • 原文地址:https://www.cnblogs.com/wlsandwho/p/4202149.html
Copyright © 2011-2022 走看看