《汇编语言 基于x86处理器》第十二章浮点数部分的代码
▶ 书中第十二章的程序,主要讲了 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处理器》第十二章浮点数部分的代码的更多相关文章
- 《汇编语言 基于x86处理器》第六章条件处理部分的代码
▶ 书中第六章的程序,使用了条件判断和跳转来实现一些功能 ● 代码,查找数组首个非零值 INCLUDE Irvine32.inc .data intArray SWORD , , , , , , , ...
- 《汇编语言 基于x86处理器》第十三章高级语言接口部分的代码 part 2
▶ 书中第十三章的程序,主要讲了汇编语言和 C/++ 相互调用的方法 ● 代码,汇编中调用 C++ 函数 ; subr.asm INCLUDE Irvine32.inc askForInteger P ...
- 《汇编语言 基于x86处理器》第十一章 MS-DOS 编程部分的代码 part 2
▶ 书中第十一章的程序,主要讲了 Windows 接口,在小黑框中进行程序交互 ● 在屏幕指定位置输出带自定义属性的文字 INCLUDE Irvine32.inc .data outHandle HA ...
- 《汇编语言 基于x86处理器》第七章整数运算部分的代码
▶ 书中第七章的程序,使用各种位移运算,加深了对内存.寄存器中整数类型变量存储的认识 ● 代码,双字数组右移 4 位 INCLUDE Irvine32.inc COUNT = ; 右移位数 .data ...
- 《汇编语言 基于x86处理器》前五章的小程序
▶ 书中前五章的几个小程序,基本的运算操作,使用了作者的库 Irvine32 和 Irvine64(一开始以为作者网站过期了,各网站上找到的文件大小都不一样,最后发现是要搭梯子 Orz,顺利下载).注 ...
- 《汇编语言 基于x86处理器》第八章高级过程部分的代码 - 两种规范计算数组元素的和
▶ 输入 Count 个 32 位有符号整数,计算他们的和 ● 代码,使用堆栈传参 ;// Sum_main.asm,主过程 INCLUDE Irvine32.inc EXTERN PromptFor ...
- 《汇编语言 基于x86处理器》第九章字符串与数组部分的代码
▶ 书中第九章的程序,主要讲了字符串相关的输入.输出,以及冒泡排序.二分搜索 ● 代码,Irvine32 中的字符串库函数代码范例 INCLUDE Irvine32.inc .data str1 BY ...
- 《汇编语言 基于x86处理器》第十章 - 运行一个 16位实地址汇编程序
▶ 书上第 10 章,主要讲了宏,引用了一个 16 位实地址的程序,从代码开始到运行 ● 代码 ; main.asm INCLUDE Macros.inc IF IsDefined( RealMode ...
- 《汇编语言 基于x86处理器》第十章结构和宏部分的代码
▶ 书中第十章的程序,主要讲了结构与宏的使用 ● 代码,使用结构,对比是否对齐的性能差距 INCLUDE Irvine32.inc INCLUDE macros.inc structN STRUCT ...
随机推荐
- C#中winform使用相对路径读取文件的方法
http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f73b6cd0d3027fa3cf1fd579080101 ...
- windows2008系统缓存修改
Windwos Server 2008 中经常有物理内存占用较高,但任务管理器中各进程的内存看起来占用并不多情况. 这可能是由于OS为保证服务器性能不限制系统缓存,服务器系统长时间执行I/O,系统文件 ...
- xp sql2000 安装SP4失败解决方案
环境:xp sp3 SQL: sql2000sql2000 SP4下载链接: http://www.microsoft.com/downloads/details.aspx?familyid=8E2D ...
- Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用
ylbtech-Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用 1.返回顶部 1. Java 实例 - enum 和 switch 语句 ...
- RPM安装MYSQL5.7
RPM安装MYSQL5.7 1:YUM安装依赖库 yum install perl libaio numactl 2:下载安装需要的RPM包 https://dev.mysql.com/get/Dow ...
- 开启BBR加速
在linux里用 wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh chmod +x b ...
- MySQL学习----索引的使用
一.什么是索引?为什么要建立索引? 索引用于快速找出在某个列中有一特定值的行,不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大,查询数据所花费的时间就越多,如果表中查询的 ...
- 0000 - Spring Cloud 概述
1.概述 Spring Cloud是一系列框架的有序集合,它利用Spring Boot的开发便利性简化了分布式系统的开发,比如服务发现.服务网关.服务路由.链路追踪等.Spring Cloud并不重复 ...
- 0000 - Spring 中常用注解原理剖析
1.概述 Spring 框架核心组件之一是 IOC,IOC 则管理 Bean 的创建和 Bean 之间的依赖注入,对于 Bean 的创建可以通过在 XML 里面使用 <bean/> 标签来 ...
- 成功设置open live writer
mark一下,哈哈哈 https://www.cnblogs.com/chrisrockdl/