首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将两个32位寄存器中的64位除以32位

将两个32位寄存器中的64位除以32位
EN

Stack Overflow用户
提问于 2010-10-14 19:51:12
回答 1查看 450关注 0票数 2

我正在尝试用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位算术正确地实现它?

EN

回答 1

Stack Overflow用户

发布于 2010-10-14 19:59:07

我之前的版本是不正确的,所以我将重写它。

JS中的最大int是53位,我们可以利用它。

x[63:16] (48位)除以。Res = x[63:16] / y * 16<< 0x01Rem = 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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3932774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档