首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >汇编8086:两个浮点Point[32bit]加法、减法等

汇编8086:两个浮点Point[32bit]加法、减法等
EN

Stack Overflow用户
提问于 2013-01-08 13:15:45
回答 2查看 3.2K关注 0票数 1

我需要在8086中加两个浮点数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    12.3 ---> 4144 CCCDh
    (AX,BX) = (4144h, CCCDh)

我需要添加任何数字,这个浮点数看起来像:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    (AX,BX) = (AX,BX) + 10h

如果我这样做,答案是错误的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     (AX,BX) + 10h == 4144 CCECh

但是23,3不等于4144 CCECh

你能帮帮我吗?如何将这两个数字相加?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-08 13:43:11

我还没有验证这一点(特别是bp中的偏移量),但它应该提供一些观点。它使用古老的8087 floating point instruction set

所有操作都发生在协处理器堆栈和/或内存之间。整数可以使用指令FILD mem从2的补码表示形式转换,在某些情况下,有一个内置的加法指令将整数(从内存)添加到FP寄存器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 push bp
 mov bp, sp
 push bx
 push ax
 push word ptr 10   ;  // decimal, not hex
 fld dword ptr [bp] ;   load float (just pushed from bx,ax)
 fiadd word ptr [bp-4] ;   add the integer in stack
 fst dword ptr [bp] ;   store result
 pop ax             
 pop ax             ; restore the high word of result
 pop bx             ; restore low word
 pop bp             ; restore frame pointer
票数 0
EN

Stack Overflow用户

发布于 2013-01-08 13:20:56

不能像这样将整数(10)与IEEE-754浮点值(12.3f = 0x4144cccd)相加。您需要以IEEE-754格式表示10 (10.0f = 0x41200000),然后使用浮点加法指令。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  0x4144cccd      12.3
+ 0x41200000    + 10.0
  ----------      ----
  0x41B26666      22.3
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14215795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文