当我删除此“ WORD 13”时,它工作正常,但我想移动整个'str1

时间:2019-11-18 19:48:37

标签: string assembly x86 masm irvine32

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

1 个答案:

答案 0 :(得分:1)

MASM的lengthof计算什么?只是2字节的word而忽略了单独行上的byte数组?

您可以执行byte 13, 0, 'Source String',0以在内存中获取相同的数据字节,但让MASM将整个内容视为一个“变量”。

或者您可以在标签的末尾加上str1_len equ end-start来自己计算尺寸,而不是依靠MASM的魔术来将标签数据特别视为“变量”。

任何时候,只要您想做的事都不是MASM所期望的,通常就必须解决它。例如dword ptr从声明为不同大小的“变量”中加载4个字节。