1

アセンブリの学習を始めたばかりで、文字配列を変更しようとしています。

これは私のアセンブリコードです:

.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'ですか?

4

1 に答える 1

1

以下を使用できます。

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

または、次をサポートする Intel Atom プロセッサmovbe(で確認できますcpuid):

mov   ebx,'Four'
movbe [rax],ebx
于 2013-01-29T22:41:57.243 に答える