1

对于相当多的 8086 指令,操作码 1 的位 1 是方向位 d(不要与 DF 标志混淆),允许两种方式对同一指令进行编码。

由于空间限制,我正在编写的仿真器可以解码 d=0 或 d=1 但不能同时解码 'from' 和 'to'。d 的未解码值通过交换 'from' 和 'to' 来处理,使其变慢。

DOS 是否特别使用 d=0 而不是 d=1,反之亦然?

4

1 回答 1

1

只有 reg-reg 指令可以选择;那么它可能取决于汇编程序。(因此,如果您只使用模拟器分析一些可执行文件以获取计数,请注意样本偏差。)

我猜现代编译器生成的代码将更频繁地使用内存源操作数之类的add reg, [esp+12]东西,但对于 16 位手写,它真的可以采用任何一种方式。在 Stack Overflow 上看到的初学者代码显示出很大的趋势是使用疯狂的静态存储(“命名变量”)而不是寄存器。

至于 DOS本身,我真的建议您使用模拟器分析一些典型用途,以了解这些二进制文件的真正作用。

在您的模拟器中添加一个计数器来记录您采用“快”与“慢”方式的次数。如果事实证明您更多地采用了慢速方法,请重写代码以使其成为快速路径。

于 2021-02-17T03:19:15.657 回答