装配8086:两个浮点[32bit]添加,Sub等

时间:2013-01-08 13:15:45

标签: assembly floating-point 32-bit x86-16

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

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

我需要添加这个浮点的任何数字:

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

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

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

但23,3不等于4144 CCECh

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

2 个答案:

答案 0 :(得分:0)

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

  0x4144cccd      12.3
+ 0x41200000    + 10.0
  ----------      ----
  0x41B26666      22.3

答案 1 :(得分:0)

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

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