Assembly Is movs[x]指令仅适用于NASM汇编程序!马斯姆呢?

Assembly Is movs[x]指令仅适用于NASM汇编程序!马斯姆呢?,assembly,x86,masm,Assembly,X86,Masm,我试图使用移动整个字符串的指令movs[x]。 在NASM汇编器上使用它时,它工作得很好,但在MASM汇编器中,会发生错误 NASM: 前面的代码运行良好 MASM: 前面的代码总是给出错误A2022指令操作数的大小必须相同并且指向以下行: mov esi, msg mov edi, msg2 我知道msg和msg2是8位的,ESI寄存器是32位的,但是没有8位的ESI,为什么该代码在NASM上运行良好 如何解决这个问题?这与movsb无关。它与如何在masm中加载地址有关。您应该使用move

我试图使用移动整个字符串的指令movs[x]。 在NASM汇编器上使用它时,它工作得很好,但在MASM汇编器中,会发生错误

NASM:

前面的代码运行良好

MASM:

前面的代码总是给出错误A2022指令操作数的大小必须相同并且指向以下行:

mov esi, msg
mov edi, msg2
我知道
msg
msg2
是8位的,
ESI
寄存器是32位的,但是没有8位的
ESI
,为什么该代码在NASM上运行良好


如何解决这个问题?

这与
movsb
无关。它与如何在masm中加载地址有关。您应该使用
movesi,offset msg
将来,您可能不希望以这种方式使用缩写
movsx
,因为它可能与助记符为
movsx
的指令混淆。
.386
.model flat, c
.stack 50

.data
msg db  'Hello', 0
len equ $ - msg
msg2 db len dup(0)


.code       
_start:
    mov ecx, 0
    mov ecx, len
    mov esi, msg
    mov edi, msg2
    rep movsb

    ret
end _start
mov esi, msg
mov edi, msg2