【发布时间】:2016-05-05 13:06:24
【问题描述】:
我必须从字符串末尾删除一定数量的字符(比如说 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
但是,我想让这段代码使用不同的以空字符结尾的字符串。为此,我尝试找到 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,所以这不是您想要的。 -
您对这个问题的三次尝试中至少有一次没有结束。 :)
-
我的荣幸。这似乎更接近地反映了“如何提出问题”wiki 所说的内容。
标签: assembly x86 masm masm32 irvine32