我目前正試圖乘以兩個浮點數,一個來自浮點矢量(存儲在ebx中的地址)和我存儲在ecx中的值。如何在x86程序集中移動兩個浮點數的結果?
我已經確認輸入值是正確的,但是,如果我乘以32和1,例如,EAX中的值更改爲00000000,EDX中的值更改爲105F0000。根據我對MUL的理解,發生這種情況是因爲它將結果的高位存儲在EDX中,而將低位的結果存儲在EDX中。問題是,如何將結果移動到輸出變量(returnValue)?這是有問題的代碼片段:
AddColumnsIteration:
cmp esi, 4 // If we finished storing the data
jge NextColumn // Move to the next column
mov eax, [ebx][esi * SIZEOF_INT] // Get the current column
mul ecx // Multiply it by tx
add [returnValue][esi * SIZEOF_INT], eax // Add the data pointed at by eax to the running total
inc esi // Element x, y, z, or w of a Vec4
jmp AddColumnsIteration // Go back to check our loop condition
我知道,如果我使用的x87指令或SSE指令,這將是更加的簡單訂單,但問題的約束要求的純x86彙編代碼。對不起,如果這似乎有點基本,但我仍然在學習裝配的特質。
預先感謝您的幫助,並有一個愉快的一天
我不知道是什麼導致了負面評價 –
首先檢查你的代碼是否工作!mul似乎缺少一個操作數。對於輸出,你的C++環境是如何需要它的?你也可能有一個輸出地址,或者如果操作是「* =」 ,然後覆蓋舊的vect或與重新調整的一個。 – user877329
MUL不是任務操作數,它取任何你給它的值,並將存儲在EAX中的值乘以它。什麼是浮點值的編碼或解碼(正如我所說,我是彙編的新手)?結果輸出到Vec4中,只是一個帶有4個浮點的結構,全部初始化爲零。所以基本上,代碼將4x4矩陣乘以4x1向量並將其存儲在Vec4輸出中。 –