c++ - 向左旋转就是向右旋转

标签 c++ assembly rotation

在 C++ 中,我想使用汇编指令 ROL 将 4 个字符的数组向左旋转一次。我想我会将数组解释为一个双字并将这个双字向左旋转一次,这会做我想要的。相反,每当我将双字向左旋转一次时,它就会向右旋转一次。这是我的 ASM 代码:

ShiftRow proc
; copy array into EAX
MOV EAX, DWORD PTR [RCX]
ROL EAX, 8
MOV DWORD PTR [RDX], EAX
RET
ShiftRow endp

这就是我的 C++ 代码的样子:

#include <iostream>
using namespace std;

extern "C" void __fastcall RotateArray(const char* Array, char* OutputArray);

int main()
{
    char input_array[] = {0x10, 0x20, 0x30, 0x40};

    char output_array[4] = {};
    RotateArray(input_array, output_array);


    for(int i = 0; i < 4; i++)
        std::cout << std::hex << (unsigned int)output_array[i] << " ";
    cin.get();
}

奇怪的是(对我来说)输出是 40 10 20 30 即使我向左移动。有人可以向我解释为什么会这样吗?这与字节顺序有关吗?

最佳答案

是的,这是由于字节顺序,您的机器是小端机器。 这是正在发生的事情:

旋转前的输入数组:10, 20, 30, 40

旋转前的 EAX:40 30 20 10

旋转后的 EAX:30 20 10 40

旋转后的输出数组:40, 10, 20, 30

关于c++ - 向左旋转就是向右旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16668312/

相关文章:

Android Camera2预览偶尔旋转90度

jquery - 如何让旋转在不同的时间旋转?

C++:在另一个函数内声明一个函数不是编译器错误所以......它是什么?

c++ - 字符串文字将存储在哪里

c++ - 我们可以在 Windows 上使用 .so 文件吗?

c++ - 将 Qt 5.3 应用程序移动到 Qt 5.5,10k+ 警告,PRAGMA, '-Winconsistent-missing-override'

linux - @plt在这里是什么意思?

assembly - 如何从 USB 启动 512 字节引导加载程序 (ARM x86)

linux - 在适用于 Linux 的 Windows 子系统上的 Ubuntu 上使用 INT 0x80 汇编编译的可执行文件不产生输出

python - 在 OpenGL 中围绕中心点旋转四边形