Assembly x86程序集-添加两个64位数字
我试图用x86汇编语言编写这段代码(X[I]和C是64位数字)。假设A[i]的内存地址存储在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 您需要
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上添加一个qwordadd
。(除非您想要实现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