include irvine32.inc
.data
str1 WORD 13
BYTE 'Source String',0
desti BYTE 80 DUP(?)
.code
main PROC
mov esi,offset str1
inc esi
mov edi,offset desti
call dumpregs
mov ecx, lengthof str1
rep movsb
mov edx,offset desti
call WriteString
call crlf
exit
main ENDP
END main
答案 0 :(得分:1)
MASM的lengthof
计算什么?只是2字节的word
而忽略了单独行上的byte
数组?
您可以执行byte 13, 0, 'Source String',0
以在内存中获取相同的数据字节,但让MASM将整个内容视为一个“变量”。
或者您可以在标签的末尾加上str1_len equ end-start
来自己计算尺寸,而不是依靠MASM的魔术来将标签数据特别视为“变量”。
任何时候,只要您想做的事都不是MASM所期望的,通常就必须解决它。例如dword ptr
从声明为不同大小的“变量”中加载4个字节。