В настоящее время я пытаюсь умножить два поплавка, один из которых поступает из вектора float (адрес хранится в ebx) и против значения, которое я сохранил в ecx.Как перенести результат mul из двух поплавков в сборку 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++ хочет этого? У вас может быть выходной адрес тоже, или если операция «* =», , затем перезаписать старый объект или с перемасштабированным. – user877329
MUL не является операндом, он принимает любое значение, которое вы ему даете, и умножает значение, хранящееся в EAX. Что значит кодирование или декодирование значений с плавающей запятой (как я уже сказал, я новичок в сборке)? Результат выводится в Vec4, просто структура с 4 поплавками, все инициализируются до нуля. Таким образом, в основном код умножает матрицу 4x4 на вектор 4x1 и сохраняет ее на выходе Vec4. –