我必须从字符串末尾删除一定数量的字符(比如说3)。对于这个特定的字符串,它在我找到'Z'时起作用,然后通过sub edi,3指向W,然后使用0存储字符串的其余部分。如何从字符串的末尾删除字符计数?
INCLUDE Irvine32.inc
.data
source BYTE "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 0
.code
main PROC
mov edi, OFFSET source
mov al, 'Z' ; search for Z
mov ecx, LENGTHOF source
cld
repne scasb ; repeat while not equal
sub edi, 3 ; now points to W
mov al, 0
rep stosb ; stores all characters after W with 0.
mov edx, OFFSET source
call WriteString
call CrlF
exit
main ENDP
end main
但是,我想让这段代码可以使用不同的以null结尾的字符串。为此,我试图找到0(字符串的末尾),因为我的代码如下所示。但它不起作用,它只输出整个字符串。
我应该怎么做才能确保即使字符串发生更改,代码仍然有效,而不必每次都更改字符串末尾的搜索?
INCLUDE Irvine32.inc
.data
source BYTE "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 0
.code
main PROC
mov edi, OFFSET source
mov al, '0' ; search for end of string
mov ecx, LENGTHOF source
cld
repne scasb ; repeat while not equal
sub edi, 3 ; now points to W ??
mov al, 0
rep stosb ; stores all characters after W with 0.
mov edx, OFFSET source
call WriteString
call CrlF
exit
main ENDP
end main
你不需要以填补零,你只需要一个。对于编译时常量字符串,您可以使用'LENGTHOF',因为您不需要进行任何搜索。还要注意,'0'是'0'的ascii码,它不是'0'而是'48',所以这不是你想要的。 – Jester
您对这个问题的三次尝试中至少有一次没有关闭。 :) –
我的荣幸。看起来,这更贴切地反映了“如何提出问题”Wiki说的事情。 –