【问题标题】:Modifying a character array, the modified part shows up backwards修改一个字符数组,修改的部分向后显示
【发布时间】:2013-01-29 22:19:01
【问题描述】:

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

这是我的汇编代码:

.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”,而不是我预期的,显然是“Four”

为什么会这样?我怎样才能让文本以正确的方向输出,而不必做一些廉价的解决方法,比如:mov dword ptr[rax], 'ruoF'

【问题讨论】:

  • 你可以使用宏来反转字符串。
  • @AlexeyFrunze 你能发一个例子说明如何做到这一点吗?
  • 您不想要一个便宜的解决方法,是吗? :)
  • @AlexeyFrunze 好吧,聊胜于无……
  • 简单的答案:使用合适的大端CPU!

标签: string assembly 64-bit x86-64 masm


【解决方案1】:

你可以使用:

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

或者,在支持movbe 的英特尔凌动处理器上(可以通过cpuid 确认):

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

【讨论】:

  • @MahmoudAl-Qudsi 你在movbe 上是对的,相应地编辑了答案。 bswap 从 486 开始可用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
  • 2012-03-31
  • 2019-05-28
  • 1970-01-01
  • 2021-11-17
相关资源
最近更新 更多