Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 在32位计算机上添加64位_Assembly - Fatal编程技术网

Assembly 在32位计算机上添加64位

Assembly 在32位计算机上添加64位,assembly,Assembly,我正在汇编程序中编写一个将两个64位字相加的程序。 我使用的是32位系统。据我所知,一个32位系统每个字只能容纳32位。有人能解释一下我如何为64位腾出空间吗? 谢谢大家! 你没有腾出空间;系统是32位的 您需要做的是将每个值的低32位相加,处理任何进位,然后(使用该进位)将高32位相加,将每个加法存储到所需总数的正确部分。从小学开始,您实际上已经知道如何进行此操作 如果我有一个位数,我可以做如下事情 3 +5 === 8 及 以此类推,但如果我想使用两列,我需要把东西带过来 1

我正在汇编程序中编写一个将两个64位字相加的程序。
我使用的是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
====