Assembly 在32位计算机上添加64位
我正在汇编程序中编写一个将两个64位字相加的程序。Assembly 在32位计算机上添加64位,assembly,Assembly,我正在汇编程序中编写一个将两个64位字相加的程序。 我使用的是32位系统。据我所知,一个32位系统每个字只能容纳32位。有人能解释一下我如何为64位腾出空间吗? 谢谢大家! 你没有腾出空间;系统是32位的 您需要做的是将每个值的低32位相加,处理任何进位,然后(使用该进位)将高32位相加,将每个加法存储到所需总数的正确部分。从小学开始,您实际上已经知道如何进行此操作 如果我有一个位数,我可以做如下事情 3 +5 === 8 及 以此类推,但如果我想使用两列,我需要把东西带过来 1
我使用的是32位系统。据我所知,一个32位系统每个字只能容纳32位。有人能解释一下我如何为64位腾出空间吗?
谢谢大家! 你没有腾出空间;系统是32位的
您需要做的是将每个值的低32位相加,处理任何进位,然后(使用该进位)将高32位相加,将每个加法存储到所需总数的正确部分。从小学开始,您实际上已经知道如何进行此操作 如果我有一个位数,我可以做如下事情
3
+5
===
8
及
以此类推,但如果我想使用两列,我需要把东西带过来
1
68
+ 13
=====
81
但是如果我的10进制处理器只能存储一个数字,那么我就必须执行8+3=1来携带1。然后我需要加上6+1加上进位。6+1+1=8,因此一个寄存器有1,另一个寄存器有8,两个寄存器的结果是81。二进制使它更容易,因为只有两个符号,所以您可以将0或1带入下一列。如果你有7列(7位寄存器)或77或32或任何东西,这并不重要
x
abcd
+efgh
=======
我们可以把它分成几个部分
x
cd
+gh
====
带x的进位
然后
结束它。如果在汇编语言中,您的处理器有一个进位标志(有些不使用/产生标志,但这没关系),那么您可以查看它们是否有一个带进位的add指令。如果不是,则它们可能有一个跳转/分支if进位设置或清除指令
因此,请查看您的指令集是否有进位标志,然后查看add指令是否修改/设置进位标志,然后查看您是否有带进位的add指令,以正确的顺序排列它们以获得正确的结果。使用两个32位字来保存64位,你按照惯例把这两个词作为一个整体来处理。如果你需要添加它们,想想你是如何做算术的:添加较低的单词,然后添加较高的单词。如果添加较低的单词导致进位,则将进位添加到较高的单词。汇编语言通常有一个“带进位的加法”指令。你可能可以在谷歌上搜索很多关于这个的信息。你在为什么架构编程?这就是携带标志的用途。看,这非常有用。谢谢你这个老家伙!
x
cd
+gh
====
x
ab
+ef
====