string - 修改字符数组,修改部分向后显示

标签 string assembly 64-bit x86-64 masm

我刚刚开始学习汇编,我正在尝试修改一个字符数组。

这是我的汇编代码:

.data
data byte 'Five', 0
.code 
    Asm proc
        lea rax, data
        mov dword ptr[rax], 'Four'
        ret
    Asm endp
end 

还有我的 C++ 代码:

#include <stdio.h>
#include <conio.h>
// external function
extern "C" char* Asm();
// main function
int main()
{
    printf(Asm());
    _getch();
}

当我注释掉mov dword ptr[rax], 'Four'时,结果是控制台打印:“Five”。但是,在取消注释上述代码的情况下,结果是“ruoF”,而不是我所期望的,显然是“4”

为什么会发生这种情况?如何让文本以正确的方向输出,而不必执行一些廉价的解决方法,如下所示:mov dword ptr[rax], 'ruoF'

最佳答案

您可以使用:

mov   ebx,'Four'
bswap ebx
mov   [rax],ebx

或者,在支持 movbe 的 Intel Atom 处理器上(可以通过 cpuid 确认):

mov   ebx,'Four'
movbe [rax],ebx

关于string - 修改字符数组,修改部分向后显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14593122/

相关文章:

ios - Swift:二维数组处理的JSON对象

assembly - 汇编中的 "MOV"指令是分配内存吗?

assembly - 可变位移位

.net - 64位平台编程

string - 即使字符串只使用过一次,我是否应该使用常量而不是字符串?

c# - 锁定 String.Format()

C++:Getline 在第一个空格处停止读取

assembly - 进位标志和减法问题

c# - 如何配置我的项目以在 64 位和 32 位计算机上运行

java - 将 Launch4J 配置为仅使用 32 位 JVM