繁体   English   中英

x86 汇编 - 添加两个 64 位数字

[英]x86 Assembly - Add Two 64 Bit Numbers

我正在尝试在 x86 程序集中编写此代码(X[i] 和 C 是 64 位数字)。 假设 A[i] 的内存地址存储在ebx ,C 存储在edx

for(int i = 0; i <= 100; i++) {
    A[i] = A[i] + C
}

我非常了解如何访问内存中的值。 因为我有 32 位寄存器,所以我相信我需要做两个加法:一个是每个操作数的低 32 位,一个是高 32 位。

所以像:

mov rax, [A[i]_bits0_15]
add rax, [C_bits0_15]
mov [A[i]_bits0_15], rax

mov rbx, [A[i]_bits16_31]
adc rbx, [C_bits16_31]
mov [A[i]_bits16_31], rbx

我在正确的轨道上吗? 我不确定如何为从内存中添加低/高 32 位做正确的表示法,这样也有助于查看。

和小学没什么区别。

 011
 1234
+5678
=====
 6912

把它分成两半

 11
  34
+ 78
=====
 112

 12
+56
=====
 68

您需要将结转移至上部添加

 11   <--- carry out hanging off the left
  34
+ 78
=====
  12

  1  <--- carry in from lower level addition
 12
+56
=====
 69

还有 6912。

X86 有一个进位位,应该有一个带进位的加法指令,以将该位(零或一)包含到下一级加法中。

根据您选择的指令,您显然可以一次添加与存储空间一样宽的数字,分别为 8、16、32、64 位。 100 万位,10 亿位,等等...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM