我必須從字符串末尾刪除一定數量的字符(比如說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說的事情。 –