我正在尝试用JavaScript编写x86模拟器以用于教育目的。 我已经编写了一个编译器,目前我正在尝试用JavaScript编写x86模拟器。
但是我的DIV指令存在问题。根据{{3}},DIV将64位数作为输入,将EDX解释为较高的32位,将EAX解释为较低的32位。然后它将该数字除以DIV参数,并将结果(如果它不大于0xFFFFFFFF)放入EAX,将余数放入EDX。
由于JavaScript不支持64位整数,我需要应用一些技巧。但到目前为止,我没有提出有用的东西。
这里有人知道如何使用32位算法正确实现吗?
答案 0 :(得分:1)
我之前的版本不正确,所以我会重写它。
JS中的最大int是53位,我们可以使用它。
你取x[63:16]
(48位)并除以。 Res = x[63:16] / y * 16
或<< 0x01
。 Rem = x[63:16] % y * 16
。
然后执行:Res |= (Rem | x[15:0]) / y
* - x[a:b]
表示从第a到第b的x位。例如X = 0110
,x[3:1] = 011