彙編-字符串的複製

將一個字符串複製給另一個字符串,我們可以逐個訪問數組並進行逐個地賦值到新的數組中。但我們今天要介紹的是串指令。

MOVSB|MOVSW|MOVSD
;串傳送:ES:[EDI]←DS:[ESI]
;然後:ESI←ESI±1/2/4,EDI←EDI±1/2/4

REP
;執行一次串指令,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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章