【问题标题】:Assembly 8086; Floating Point Numbers, Add, Subtract组装 8086;浮点数,加,减
【发布时间】:2011-11-27 22:55:30
【问题描述】:

我需要一些资源来了解更多关于浮点数的信息,我需要在emu8086 环境中为此类数字编写加减运算代码 ....

非常感谢任何帮助

【问题讨论】:

  • 原来的8086没有浮点数。该功能由(可选)8087“协处理器”提供。但是,如果 8087 不存在,则 8087 指令操作码被操纵为“陷阱”,以便可以使用 8086 中的子程序模拟浮点。
  • 目前还不清楚——您是在模拟器上使用 8086 汇编器编写代码,还是编写 8086 模拟器?
  • 英特尔 8086 处理器不包含浮点单元。也许您的意思是 8087 协处理器或通用 x86 指令集?
  • Wikipedia 始终是一个很好的信息来源,尽管它没有给出实际的指令集或浮点布局。 (虽然事实证明这些说明列出了here
  • 我知道你们的意思,但我的问题不是我需要一个像'add'或'mov'这样的命令来做到这一点,我需要一个算法来编写代码,一个程序来做我想做的事,我没有要求代码,因为我是一名大学生,我想进行研究,然后在自己身上编写代码......顺便说一句,这是我正在使用的程序:emu8086.com

标签: assembly x86-16 emu8086 x87


【解决方案1】:

据我所知,emu8086 模拟具有 8087 FPU 的机器。

您所做的任何浮点都必须是纯软件,而不是使用 fld / fadd / fstp 或任何常见的传统1x87 instructions

如果您想在实模式下使用 FP 指令,最好的选择是模拟 DOSBox 或 BOCHS 之类的模拟器,它们模拟更新的 x86 + x87,而不是 emu8086。这还有一个好处是让您可以使用更方便的指令,例如imul ax, 1234,而不必使用单操作数mul

如果你被emu8086(或真正的8086微控制器)卡住,大多数问题都可以用fixed-point来解决,而不是真正的浮点:将固定数量的位视为小数部分。这在带有整数指令的软件中更容易做到。但它仍然可以让你表示像1.25 这样的数字。


脚注 1:在现代 x86 中,x87 FPU 已过时;我们现在将 SSE 和 SSE2 用于标量和 SIMD FP 数学,除非实际需要 80 位精度。 emu8086 当然也没有这个。现代 x86 CPU 当然仍然支持 x87​​ 指令;与现有二进制文件向后兼容是 x86 仍然存在的主要原因。

【讨论】:

    【解决方案2】:

    如果将每个数字存储在大小为 2 的数组中,则可以实现浮点数的加法和减法。

    数组的第一个块可以是基数,第二个是十进制数(当然实现为常规整数)。

    这可能不是最有效的方法,但肯定是可能的。您的算法必须考虑数字的存储方式,然后执行 ADD 和 SUB 指令。

    您说您不需要代码,所以我不会发布示例,但希望这能让您了解如何在没有浮点单元的处理器上执行此操作。

    【讨论】:

    • 是的,这是一种方法。
    【解决方案3】:

    8086 处理器没有浮点单元。有一个名为 8087 的浮点协处理器,它是用来与 8086 一起使用的。

    您可以在此处查看原始 8087 的指令集:http://en.wikipedia.org/wiki/X86_instruction_listings#x87_floating-point_instructions

    【讨论】:

    • 我知道你的意思是多项式,但我的问题不是我需要像'add'或'mov'这样的命令来做到这一点,我需要一个算法来编写代码,一个程序来做我在找什么,我没有要代码,因为我是一名大学生,我想进行研究,然后在自己身上编写代码,所以......
    • 你的问题很模糊。您在寻找 IDE 吗?编译器?参考书?
    • 对不起,我让你感到困惑,为了清楚起见:我需要一个代码来对浮点数执行加法和减法等操作,而且我希望代码能够在模拟器上编译,比如 emu8086 :emu8086.com........
    猜你喜欢
    • 2012-12-22
    • 1970-01-01
    • 2019-11-02
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多