我需要在 8086 中添加两个浮点数
12.3 ---> 4144 CCCDh
(AX,BX) = (4144h, CCCDh)
我需要添加任何数字,这个浮点数看起来像:
(AX,BX) = (AX,BX) + 10h
如果我这样做,答案是错误的。
(AX,BX) + 10h == 4144 CCECh
但 23,3 不等于 4144 CCECh
你能帮助我吗?我如何添加这两个数字?
我需要在 8086 中添加两个浮点数
12.3 ---> 4144 CCCDh
(AX,BX) = (4144h, CCCDh)
我需要添加任何数字,这个浮点数看起来像:
(AX,BX) = (AX,BX) + 10h
如果我这样做,答案是错误的。
(AX,BX) + 10h == 4144 CCECh
但 23,3 不等于 4144 CCECh
你能帮助我吗?我如何添加这两个数字?
您不能像这样将整数 (10) 添加到 IEEE-754 浮点值 (12.3f = 0x4144cccd)。您需要以 IEEE-754 格式(10.0f = 0x41200000)表示 10,然后使用浮点加法指令。
0x4144cccd 12.3
+ 0x41200000 + 10.0
---------- ----
0x41B26666 22.3
尚未验证这一点(尤其是 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