小编Bru*_*lon的帖子

如何在x86汇编中移动两个浮点数的结果?

我目前正在尝试将两个浮点数相乘,一个来自浮点向量(存储在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汇编代码.对不起,如果这看起来有点基础,但我仍然在学习装配的特质.

提前感谢您的帮助,祝您度过愉快的一天

c++ floating-point x86 assembly multiplication

1
推荐指数
1
解决办法
220
查看次数

在C++字符串上使用std转换

我试图用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)

c++ string algorithm transform c++11

0
推荐指数
1
解决办法
1890
查看次数