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

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

  1. INCLUDE Irvine32.inc
  2. INCLUDE macros.inc
  3.  
  4. .data
  5. first REAL8 .
  6. second REAL8 .
  7. third REAL8 ?
  8.  
  9. .code
  10. main PROC
  11. finit ; 初始化 FPU
  12.  
  13. fld first
  14. fld second
  15. call ShowFPUStack ; 展示栈中的浮点数
  16.  
  17. mWrite "Please enter a real number: " ; 输入两个浮点数相乘
  18. call ReadFloat
  19. mWrite "Please enter a real number: "
  20. call ReadFloat
  21.  
  22. fmul ST(),ST() ; 乘法
  23.  
  24. mWrite "Product: "
  25. call WriteFloat
  26. call Crlf
  27. call waitmsg
  28. exit
  29. main ENDP
  30.  
  31. END main

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

  1. INCLUDE Irvine32.inc
  2.  
  3. .data
  4. array REAL4 ., ., ., .
  5. dotProduct REAL4 ?
  6.  
  7. .code
  8. main PROC
  9. finit ; 初始化
  10.  
  11. fld array ; push 6.0
  12. fmul array + ; ST(0) = 6.0 * 2.0
  13. call ShowFPUStack
  14.  
  15. fld array + ; push 4.5
  16. fmul array + ; ST(0) = 4.5 * 3.2
  17. call ShowFPUStack
  18.  
  19. fadd ; ST(0) = ST(0) + ST(1)
  20. call ShowFPUStack
  21. fstp dotProduct ; 栈中数据转入内存
  22. call waitmsg
  23. exit
  24. main ENDP
  25.  
  26. END main

● FPU 比较和分支

  1. INCLUDE Irvine32.inc
  2.  
  3. .data
  4. x real8 .
  5. y real8 .
  6. XLessThanY BYTE "x < y",
  7. XGreaterThanY BYTE "x >= y",
  8.  
  9. .code
  10. main PROC ; 第一种方法
  11. finit ; 初始化
  12. fld x ; 分别压入 x y
  13. fcomp y
  14. fnstsw ax ; 状态字放入 ax
  15. sahf ; AH 复制到 EFLAGS
  16. jnb L1 ; x >= y 则跳到 L1
  17. mov edx, OFFSET XLessThanY
  18. call writeString
  19. jmp L2
  20. L1:
  21. mov edx, OFFSET XGreaterThanY
  22. call writeString
  23.  
  24. L2:
  25. call crlf
  26. call waitmsg
  27. exit
  28. main ENDP
  29.  
  30. main2 PROC ; 第二种方法,使用指令 fcomi
  31. finit
  32. fld y ; 先压入 y 再压入 x
  33. fld x
  34. fcomi ST(), ST() ; 在栈中比较
  35. jnb L1 ; 直接使用EFLAG 作分支,不再搬运两次
  36. mov edx, OFFSET XLessThanY
  37. call writeString
  38. jmp L2
  39. L1:
  40. mov edx, OFFSET
  41. call writeString
  42.  
  43. L2:
  44. call crlf
  45. call waitmsg
  46. exit
  47. main2 ENDP
  48.  
  49. 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. CheckFail设计很垃圾

        function checkFail(node, onError, fuckIE) {         var id = node.src;//检测是否死链         node.onlo ...

  2. 黄聪:超实用的PHPExcel[导入][导出]实现方法总结

    首先需要去官网https://github.com/PHPOffice/PHPExcel/下载PHPExcel,下载后只需要Classes目录下的文件即可. 1.PHPExcel导出方法实现过程 /* ...

  3. Ubuntu16.04 LTS软件中心闪退及修改阿里源

    现象: 进入软件中心点击任意,直接退出 解决办法: 先更换软件源,我的为阿里云 1. 备份 源位置 :/etc/apt/sources.list 2. 更改 sudo vi /etc/apt/sour ...

  4. LeetCode——4. Median of Two Sorted Arrays

    一.题目链接:https://leetcode.com/problems/median-of-two-sorted-arrays 二.题目大意: 给定两个排序过的数组,求出两个数组的中位数,要求时间复 ...

  5. Hadoop错误集:Could not find the main class: org.apache.hadoop.*

    在搭建Hadoop机群的时候,之前遇见了很多次找不到类的错误,因为对Hadoop了解不深,所以就在网上漫无目的的找解决方案,所以这里总结下我用的方法. 解决办法一: 我之前遇到了找不到 org.apa ...

  6. 在linux下sh批处理文件调用java的方法

    解密 java -classpath collection-impl-0.0.1.jar com.ai.toptea.collection.message.DESEncrypt 1EFE4663895 ...

  7. shell 发送所有内容到会话

    在shell当中 工具 发送键输入到所有会话 会有新的发现

  8. ngx_lua_waf

    Web应用防护系统Web Application Firewall,简称WAF.针对HTTP/HTTPS的安全策略专门为Web应用提供保护的产品. OpenResty是一个基于 Nginx 与 Lua ...

  9. C语言强化——数组

    打印九九乘法表 #include<stdio.h> int main() { int num = 1; for (int i = 1;i <= 9;++i) { for (int j ...

  10. [UE4]蓝图的颜色

    一.蓝色:调用的函数或事件 二.绿色:纯函数 三.紫色:函数定义 四.灰色:宏 五.白色:执行线 六.事件的定义 另外还有数据类型的颜色: 执行线是白色,数据线颜色跟数据量类型一致.