▶ 书中第十二章的程序,主要讲了 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. OpenEXR-2.2.0在Win7 x64系统下的安装方法

    最近在研究openexr这种文件格式,免不得安装一下OpenEXR软件,这个软件是开源的,需要编译安装,我的安装方法是这样的,分享一下. 一:去官网http://www.openexr.com/dow ...

  2. iwebshop (: Cannot use object of type stdClass as array in)

    今天在PHP输出一个二维数组的时候,出现了“Fatal error: Cannot use object of type stdClass as array in……”. 这个二维数组是这样的: Ar ...

  3. WPF Demo12 布局

    1 <Window x:Class="布局.DockPanel1" xmlns="http://schemas.microsoft.com/winfx/2006/x ...

  4. 黄聪:PHP调试显示所有错误信息

    ini_set('display_errors',1); //错误信息 ini_set('display_startup_errors',1); //php启动错误信息 error_reporting ...

  5. 【idea】之取消@param注释参数错误提示

    改为

  6. PHP在Linux下的套件LNMP

    LNMP官网:https://lnmp.org/install.html 另外不要忘了Azkaban和WhereHows

  7. 51nod1302 矩形面积交

    有2N个矩形,这些矩形被标号为0 ~ 2N-1,对于第i个矩形其长宽分别为X[i]与Y[i].现在要把这2N个矩形分为两组,每组N个,每个矩形恰好分到两组中的一组里.分成两组后,设两组分别为A组.B组 ...

  8. js多次触发事件,在一定延迟内只执行一次 (事件累加)

    js多次触发事件,在一定延迟内只执行一次的案例: <!DOCTYPE html> <html> <head> <meta charset="UTF- ...

  9. mysql锁文章

    http://www.genshuixue.com/i-cxy/p/15285416 http://blog.csdn.net/hw_libo/article/details/39080809 htt ...

  10. centos6.5最小化安装之后装图形化界面

    查看自己系统环境 # cat /etc/issue 先要安装KDE桌面环境,执行命令: # yum groupinstall "X Window System" "KDE ...