簡體   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