Assembly 如何仅使用32位寄存器在汇编中创建64位计算器?

Assembly 如何仅使用32位寄存器在汇编中创建64位计算器?,assembly,x86,masm32,Assembly,X86,Masm32,我想只使用32位寄存器创建一个64位计算器(操作:+,-,*,/)。我必须从控制台读取一个字符串,将其转换为数学表达式(例如:123+4321,因此我必须将其转换为两个数字123和4321,并且必须将它们相加)。请给我一个想法,如何在内存中表示64位数字,以及如何仅使用32位寄存器实现加法 如果这是X86或其他小端处理器,则应在第一个字中存储低阶32位,在第二个字中存储高阶32位(这是DD的存储方式)。加法和减法只需要使用进位/借位 乘法的实现方式类似于长柄乘法。您可以使用将乘法的数量减少到3,

我想只使用32位寄存器创建一个64位计算器(操作:+,-,*,/)。我必须从控制台读取一个字符串,将其转换为数学表达式(例如:123+4321,因此我必须将其转换为两个数字123和4321,并且必须将它们相加)。请给我一个想法,如何在内存中表示64位数字,以及如何仅使用32位寄存器实现加法

如果这是X86或其他小端处理器,则应在第一个字中存储低阶32位,在第二个字中存储高阶32位(这是DD的存储方式)。加法和减法只需要使用进位/借位

乘法的实现方式类似于长柄乘法。您可以使用将乘法的数量减少到3,但我不确定这是否会节省很多时间,因为乘法相当快


除法类似于长手法。如果有一个除法使用两个32位寄存器进行除数,比如X86使用EDX、EAX,这会有所帮助(尽管商的大小限制为32位)。一般的方法是迭代几次以产生一个收敛于实际商的估计商。有几种方法可以做到这一点。您可以在web上搜索64位除法以查找如何执行此操作的示例。

我创建了一个包含两个元素的数组,如num DD 2 DUP(0),并尝试保存num(0)中的前32位和num(1)中的最后32位。我已成功地将最后32位保存在num(1)中,但我不知道如果我的数字较大,该怎么做,如何使用进位?使用
add
添加低位DWORD,然后使用
adc
添加高位DWORD和进位。与
sub
sbb
类似。对于乘法和除法,该体系结构已经提供了64位操作。参考指令集参考。基本答案是“阅读英特尔指令集”和“多精度算术”。非常感谢!