2015-10-19 94 views
1

因此,我嘗試並未能爲彙編語言(Intel x86,使用NASM)製作GCD程序。當我試圖將兩個寄存器相乘時,我不斷收到編譯器錯誤。我將用戶值存儲在寄存器ebx,ecx和edx中。我想乘以所有3 &在ebx中存儲ebx和ecx的乘積,然後乘以ebx和edx,並存儲在ebx中,並顯示結果。我試圖做到這一點通過使用此代碼 imul ebx, ebx, ecx imul ebx, ebx, edx 這是不是一個有效的方法來乘法寄存器?如何將兩個寄存器相乘並將它們存儲在不同的寄存器中?

+0

如果看到我的整個程序會幫助別人幫助我,我很樂意發佈它!因爲我認爲這很可能是一個簡單的問題,只會讓我笨拙的醜陋代碼變得複雜起來。 –

+0

糟糕,那些無效。 – Jester

+1

你的頭銜說「兩個登記冊」,你的內容是「三個登記冊」什麼是真的?我很早以前編寫了彙編程序,但是IIRC CPU根本無法一次運行三個寄存器。物理。也許這就是爲什麼你會得到錯誤,至少應該增加這個問題。 'JMP返回''並再試一次'。 :) –

回答

3

imul的3個操作數版本僅立即作爲第三個操作數。幸運的是,您可以使用2操作數版本,因爲其中一個操作數與目標相同。因此:

imul ebx, ecx ; ebx *= ecx 
imul ebx, edx ; ebx *= edx 

會做你想做的。

+0

傑斯特非常感謝你!它最終編譯!我知道它是一個完全簡單的問題,但我似乎比其他任何東西都更加困難。 –

+2

@JamieJackson - 下載[Intel參考手冊](http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html)或許是個好主意。 。像這樣的問題比你在其他地方找到的更詳細。 – owacoder

+0

我會給你一個閱讀...我是一本手冊/說明書horder,謝謝你的提示 –

相關問題