1

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

    12.3 ---> 4144 CCCDh
    (AX,BX) = (4144h, CCCDh)

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

    (AX,BX) = (AX,BX) + 10h

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

     (AX,BX) + 10h == 4144 CCECh

但 23,3 不等于 4144 CCECh

你能帮助我吗?我如何添加这两个数字?

4

2 回答 2

0

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

  0x4144cccd      12.3
+ 0x41200000    + 10.0
  ----------      ----
  0x41B26666      22.3
于 2013-01-08T13:20:56.257 回答
0

尚未验证这一点(尤其是 bp 中的偏移量),但它应该给出一些观点。它使用古老的8087 浮点指令集

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

 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
于 2013-01-08T13:43:10.680 回答