Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.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 x86程序集-添加两个64位数字_Assembly_X86 - Fatal编程技术网

Assembly x86程序集-添加两个64位数字

Assembly x86程序集-添加两个64位数字,assembly,x86,Assembly,X86,我试图用x86汇编语言编写这段代码(X[I]和C是64位数字)。假设A[i]的内存地址存储在ebx中,C存储在edx中 for(int i = 0; i <= 100; i++) { A[i] = A[i] + C } 我走对了吗?我不知道如何正确地从内存中添加上下32位,这样也会有助于查看。与小学没有什么不同 011 1234 +5678 ===== 6912 把它分成两半 11 34 + 78 ===== 112 12 +56 ===== 68 您需要

我试图用x86汇编语言编写这段代码(X[I]和C是64位数字)。假设A[i]的内存地址存储在
ebx
中,C存储在
edx

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

我走对了吗?我不知道如何正确地从内存中添加上下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

11您的大小混淆不清。您在标题中提到64位数字,32位寄存器,示例代码使用64位寄存器,但暗示它要读取每个数字的16位。这些是64位寄存器,您只需要在x86-64上添加一个qword
add
。(除非您想要实现128位整数数学)。当然可以使用dword add+adc,但效率较低。查看带有
-m32
无符号长
的gcc输出(),或带有普通64位代码的
无符号int128
 11   <--- carry out hanging off the left
  34
+ 78
=====
  12

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