[英]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.