▶ 书中第十二章的程序,主要讲了 FPU 的指令和浮点数计算的过程

● 代码,简单的 32 为浮点数测试

 INCLUDE Irvine32.inc
INCLUDE macros.inc .data
first REAL8 .
second REAL8 .
third REAL8 ? .code
main PROC
finit ; 初始化 FPU fld first
fld second
call ShowFPUStack ; 展示栈中的浮点数 mWrite "Please enter a real number: " ; 输入两个浮点数相乘
call ReadFloat
mWrite "Please enter a real number: "
call ReadFloat fmul ST(),ST() ; 乘法 mWrite "Product: "
call WriteFloat
call Crlf
call waitmsg
exit
main ENDP END main

● FPU 表达式计算 (6.0 * 2.0) + (4.5 * 3.2)

 INCLUDE Irvine32.inc

 .data
array REAL4 ., ., ., .
dotProduct REAL4 ? .code
main PROC
finit ; 初始化 fld array ; push 6.0
fmul array + ; ST(0) = 6.0 * 2.0
call ShowFPUStack fld array + ; push 4.5
fmul array + ; ST(0) = 4.5 * 3.2
call ShowFPUStack fadd ; ST(0) = ST(0) + ST(1)
call ShowFPUStack
fstp dotProduct ; 栈中数据转入内存
call waitmsg
exit
main ENDP END main

● FPU 比较和分支

 INCLUDE Irvine32.inc

 .data
x real8 .
y real8 .
XLessThanY BYTE "x < y",
XGreaterThanY BYTE "x >= y", .code
main PROC ; 第一种方法
finit ; 初始化
fld x ; 分别压入 x 和 y
fcomp y
fnstsw ax ; 状态字放入 ax
sahf ; AH 复制到 EFLAGS
jnb L1 ; x >= y 则跳到 L1
mov edx, OFFSET XLessThanY
call writeString
jmp L2
L1:
mov edx, OFFSET XGreaterThanY
call writeString L2:
call crlf
call waitmsg
exit
main ENDP main2 PROC ; 第二种方法,使用指令 fcomi
finit
fld y ; 先压入 y 再压入 x
fld x
fcomi ST(), ST() ; 在栈中比较
jnb L1 ; 直接使用EFLAG 作分支,不再搬运两次
mov edx, OFFSET XLessThanY
call writeString
jmp L2
L1:
mov edx, OFFSET
call writeString L2:
call crlf
call waitmsg
exit
main2 ENDP END main

《汇编语言 基于x86处理器》第十二章浮点数部分的代码的更多相关文章

  1. 《汇编语言 基于x86处理器》第六章条件处理部分的代码

    ▶ 书中第六章的程序,使用了条件判断和跳转来实现一些功能 ● 代码,查找数组首个非零值 INCLUDE Irvine32.inc .data intArray SWORD , , , , , , , ...

  2. 《汇编语言 基于x86处理器》第十三章高级语言接口部分的代码 part 2

    ▶ 书中第十三章的程序,主要讲了汇编语言和 C/++ 相互调用的方法 ● 代码,汇编中调用 C++ 函数 ; subr.asm INCLUDE Irvine32.inc askForInteger P ...

  3. 《汇编语言 基于x86处理器》第十一章 MS-DOS 编程部分的代码 part 2

    ▶ 书中第十一章的程序,主要讲了 Windows 接口,在小黑框中进行程序交互 ● 在屏幕指定位置输出带自定义属性的文字 INCLUDE Irvine32.inc .data outHandle HA ...

  4. 《汇编语言 基于x86处理器》第七章整数运算部分的代码

    ▶ 书中第七章的程序,使用各种位移运算,加深了对内存.寄存器中整数类型变量存储的认识 ● 代码,双字数组右移 4 位 INCLUDE Irvine32.inc COUNT = ; 右移位数 .data ...

  5. 《汇编语言 基于x86处理器》前五章的小程序

    ▶ 书中前五章的几个小程序,基本的运算操作,使用了作者的库 Irvine32 和 Irvine64(一开始以为作者网站过期了,各网站上找到的文件大小都不一样,最后发现是要搭梯子 Orz,顺利下载).注 ...

  6. 《汇编语言 基于x86处理器》第八章高级过程部分的代码 - 两种规范计算数组元素的和

    ▶ 输入 Count 个 32 位有符号整数,计算他们的和 ● 代码,使用堆栈传参 ;// Sum_main.asm,主过程 INCLUDE Irvine32.inc EXTERN PromptFor ...

  7. 《汇编语言 基于x86处理器》第九章字符串与数组部分的代码

    ▶ 书中第九章的程序,主要讲了字符串相关的输入.输出,以及冒泡排序.二分搜索 ● 代码,Irvine32 中的字符串库函数代码范例 INCLUDE Irvine32.inc .data str1 BY ...

  8. 《汇编语言 基于x86处理器》第十章 - 运行一个 16位实地址汇编程序

    ▶ 书上第 10 章,主要讲了宏,引用了一个 16 位实地址的程序,从代码开始到运行 ● 代码 ; main.asm INCLUDE Macros.inc IF IsDefined( RealMode ...

  9. 《汇编语言 基于x86处理器》第十章结构和宏部分的代码

    ▶ 书中第十章的程序,主要讲了结构与宏的使用 ● 代码,使用结构,对比是否对齐的性能差距 INCLUDE Irvine32.inc INCLUDE macros.inc structN STRUCT ...

随机推荐

  1. XBOX360更新游戏封皮(FSD自制系统)

    第一步,请记下上图左下角的IP地址第二步,打开电脑IE浏览器,输入“第二步”你记下的IP地址“回车”然后,就如下图所示了. 输入账号:f3http 密码:f3http 进入,然后你就进到你的360 F ...

  2. 让WebBrowser在非兼容模式下运行

    32 bit: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_BROWSER_ ...

  3. 关于namespace的使用

    #include <string> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> int main ...

  4. 关于dubbo通信协议之对比

    对dubbo的协议的学习,可以知道目前主流RPC通信大概是什么情况, dubbo共支持如下几种通信协议: dubbo:// rmi:// hessian:// http:// webservice:/ ...

  5. Flex组件参考 代码参考汇总

    1:tourdeflex快速熟悉各种组件用法的参考http://www.adobe.com/devnet/flex/tourdeflex.html在线:http://www.adobe.com/dev ...

  6. Windump教程-参数介绍

    1 应用 Windump是tcpdump的Windows版本,主要的参数如下: -D 列出所有的接口 -i interface 指定用于抓包的接口 -c packetcount 指定抓包的个数 -w ...

  7. firefox驱动的下载地址

    https://www.seleniumhq.org/download/

  8. Java NIO系列教程(五)Buffer

    Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的.交互图如下: 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被 ...

  9. Scrapy学习篇(八)之settings

    Scrapy设定(settings)提供了定制Scrapy组件的方法.你可以控制包括核心(core),插件(extension),pipeline及spider组件.设定为代码提供了提取以key-va ...

  10. Abp.AutoMapper扩展(1) --static class AutoMapExtensions

    // 摘要:        //     Converts an object to another using AutoMapper library. Creates a new object    ...