我在裝配中遇到了一些麻煩。 我正在使用程序集IA32。假設-4(%ebp)= x和-8(%ebp)= y,我已經從用戶那裏獲得它們(都是32位長)。 這是代碼:彙編乘法操作64位
format1: .string "Multiply : %u * %u = %llu\n"
format2: .string "Divide : %u/%u = %u\n"
# operation multiply
movl -4(%ebp), %eax
mull -8(%ebp)
pushl %edx
pushl %eax
pushl -8(%ebp)
pushl -4(%ebp)
pushl $format1
call printf
# operation divide
movl -4(%ebp), %eax
divl -8(%ebp)
pushl %eax
pushl -8(%ebp)
pushl -4(%ebp)
pushl $format2
call printf
原因乘法的結果是%LLU是因爲我希望能夠乘2個長數字和打印結果,即使達到64個字節。 而且在%edx中,mull命令保存了64字節結果的「其他32個字節」,因此我需要將它推送到堆棧以及printf。 例如我想要這個輸出:
Multiply : 4000000000 * 2 = 16000000000
另外,我想用4的除法運算返回X.YZ結果。 (在尾數中不超過2個數字,並且不捨入) 例如
Divide : 3/4 = 0.75
19和1000:
Divide : 19/1000 = 0.01
和8和2:
Divide : 8/2 = 4.00
我真的努力了很多得到的結果,但沒有成功。 謝謝ALOT! :)
'4000000000 * 2 = 16000000000'?星球大戰:奔騰反擊? –
只是想舉個例子,我需要能夠得到最大64位的結果。我無法讓這個例子在我的代碼中工作:/ – Jjang
爲什麼?你爲什麼標記這個C或C++?如果你堅持C,你問過你的本地C專家,也就是你的C編譯器,他會怎麼做這樣的事情? (例如使用gcc或clang選項-S產生相當不錯的彙編代碼) –