X86 操作码1中的8086 d位:更常见的值是0还是1?

X86 操作码1中的8086 d位:更常见的值是0还是1?,x86,dos,machine-code,x86-emulation,X86,Dos,Machine Code,X86 Emulation,对于相当多的8086指令,操作码1的位1是方向位d(不要与DF标志混淆),允许两种方式对同一指令进行编码 由于空间限制,我正在编写的模拟器可以对d=0或d=1的“from”和“to”进行解码,但不能同时对两者进行解码。未编码的d值通过交换“from”和“to”来处理,使其变慢 DOS是否特别优先使用d=0而不是d=1,反之亦然?只有reg指令可以选择;那么这可能取决于汇编程序。(因此,如果您仅使用仿真器分析少数可执行文件以获取计数,请注意样本偏差。) 我猜现代编译器生成的代码会更多地使用内存源操

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

由于空间限制,我正在编写的模拟器可以对d=0或d=1的“from”和“to”进行解码,但不能同时对两者进行解码。未编码的d值通过交换“from”和“to”来处理,使其变慢


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

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

我猜现代编译器生成的代码会更多地使用内存源操作数,比如
add reg、[esp+12]
或其他什么,但对于16位手工编写的代码来说,这两种方式都可以。在堆栈溢出上看到的初学者代码显示出使用craptastic静态存储(“命名变量”)而不是寄存器的大趋势

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

在模拟器中添加一个计数器,记录您采用“快”与“慢”方式的次数。如果事实证明你走的慢了很多,重写代码,使之成为一条快速的道路