我必须从字符串的末尾删除一定数量的字符(比方说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
但是,我想让这个代码使用不同的字符串,即如果用户更改了源代码以说某些不同的东西(E.g.source byte“This is a string”,0)。为此我尝试找到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
答案 0 :(得分:0)
我认为你需要使用重复移动字符串字节。我从另一个网站得到了这个。在你的情况下,你将你的字符串的长度 - 10移动到cx。
mov ax,@data
mov ds,ax ;initialize ds
mov es,ax ;and es
lea si,[str1] ;si points to source string
lea di,[str2] ;di points to dest string
cld ;set df=0 (increasing)
mov cx,5 ;# of chars in string1
rep movsb ;copy the string