Str_trim 过程可以删除字符串尾部的全部空格(或者任何重复的其他字符).其实现思路是:在想要移除的字符前面插入一个空字节,根据字符串在内存中的存放规则,这一操作使得这个字节后面所有的待取出内容变得无意义。
;trim trailing characters trim.asm
;test the trim procedure.trim removes
;trailing all occurrences of a selected
;character from the end of a string
include irvine32.inc
Str_trim PROTO,
pString:PTR BYTE, ;point to string
char :BYTE ;character to remove
Str_Length PROTO,
pString:PTR BYTE ;pointer to string
ShowString PROTO,
pString:PTR BYTE
.data
string_1 BYTE 0
string_2 BYTE "@@@",0
string_3 BYTE "Hello###",0
string_4 BYTE "Hello",0
string_5 BYTE "H#",0
string_6 BYTE "#H",0
.code
main PROC
call Clrscr
invoke Str_trim,ADDR string_1,'!'
invoke ShowString,ADDR string_1
invoke Str_trim,ADDR string_2,'@'
invoke ShowString,ADDR string_2
invoke Str_trim,ADDR string_3,'#'
invoke ShowString,ADDR string_3
invoke Str_trim,ADDR string_4,'#'
invoke ShowString,ADDR string_4
invoke Str_trim,ADDR string_5,'#'
invoke ShowString,ADDR string_5
invoke Str_trim,ADDR string_6,'#'
invoke ShowString,ADDR string_6
call WaitMsg
exit
main ENDP
;-------------------------------------------------
ShowString PROC USES edx,pString:PTR BYTE
;Display a string surround by brackets.
;-------------------------------------------------
.data
lbracket BYTE "[",0
rbracket BYTE "]",0
.code
mov edx,OFFSET lbracket
call WriteString
mov edx,pString
call WriteString
mov edx,OFFSET rbracket
call WriteString
call Crlf
call WaitMsg
call Crlf
ret
ShowString ENDP
END main