我正在尝试用JavaScript编写一个用于教学目的的x86仿真器。我已经编写了一个编译器,目前我正在尝试用JavaScript编写x86仿真器。
然而,我对DIV指令有一个问题。根据http://siyobik.info/index.php?module=x86&id=72,DIV通过将EDX解释为较高的32位,而将EAX解释为较低的32位,将64位数字作为输入。然后,它将此数字除以DIV参数,并将结果(如果不大于0xFFFFFFFFF)放入EAX,将余数放入EDX。
由于JavaScript不支持64位整数,我需要应用一些技巧。但到目前为止,我还没有想出什么有用的东西。
这里有没有人知道如何用32位算术正确地实现它?
发布于 2010-10-14 19:59:07
我之前的版本是不正确的,所以我将重写它。
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-th到b-th的x位。像X = 0110一样,x[3:1] = 011
https://stackoverflow.com/questions/3932774
复制相似问题