將一個字符串複製給另一個字符串,我們可以逐個訪問數組並進行逐個地賦值到新的數組中。但我們今天要介紹的是串指令。
MOVSB|MOVSW|MOVSD
;串傳送:ES:[EDI]←DS:[ESI]
;然後:ESI←ESI±1/2/4,EDI←EDI±1/2/4REP
;執行一次串指令,ECX減1;直到ECX=0
下面是源程序:
;功能:複製字符串
;作者:王文堃
;創建時間:2016/4/19
INCLUDE vcIO.inc
.data
srcmsg BYTE 'My name is Nick, and my major is computer science',0ah,0
destmsg BYTE (lengthof srcmsg) dup(0)
str_output BYTE "%s",0
.code
main PROC
mov esi, offset srcmsg
mov edi, offset destmsg
mov ecx, lengthof srcmsg
cld ;地址增量傳送
rep movsb ;rep執行一次串指令後ecx減一
invoke printf, offset str_output, offset destmsg
ret
main ENDP
;子程序
END main
其中destmsg BYTE (lengthof srcmsg) dup(0)的意思是:在數據段申請一個byte型的數據,它的長度爲srcmsg這個數組的長度,內容用重複的0初始化。
其中offset是取字符串的首地址,類似於c語言的‘&’
cld表示字符串的操作從低地址向高地址操作
std相反,從高地址到地地址rep movsb是進行字符串的複製工作。
其中movsb是一個串操作,將[esi]的內容複製到[edi]中去
rep調用一次movsb就將ecx減1,當ecx爲0時停止
這一句也可以用一下代碼實現:
again:
movsb
loop again