我目前正在尝试将两个浮点数相乘,一个来自浮点向量(存储在ebx中的地址)和我存储在ecx中的值.
我已经确认输入值是正确的,但是,如果我乘以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
Run Code Online (Sandbox Code Playgroud)
我知道如果我使用x87命令或SSE指令,这将是更容易的数量级,但问题的约束需要纯x86汇编代码.对不起,如果这看起来有点基础,但我仍然在学习装配的特质.
提前感谢您的帮助,祝您度过愉快的一天
我试图用std :: transform进行一些练习,用它来解密一个简单的凯撒密码.但是看起来我的函数定义是错误的,因为编译器认为一元函数参数无效.这是我的代码:
char CryptoModule::UndoCaesar(char& letter)
{
return (letter - atoi(key_.c_str()) % 128);
}
void CryptoModule::DecryptCaesar()
{
std::transform(data_.begin(), data_.end(), data_.begin(), UndoCaesar);
}
Run Code Online (Sandbox Code Playgroud)
谁能告诉我错误在哪里?另外,为了使用for_each,我需要修改什么?我相信它会涉及将返回值更改为void并将结果存储在letter中.
感谢,并有一个愉快的一天
编辑:尝试添加绑定,但仍然无法正常工作.目前的电话是:
std::transform(data_.begin(), data_.end(), data_.begin(), bind(&UndoCaesar, this, std::placeholders::_1));
Run Code Online (Sandbox Code Playgroud)