;*******************************************************
TITLE movsb,movsw,movsd
;*******************************************************
;*******************************************************
;程序运行平台说明
.386
.MODEL FLAT,STDCALL
OPTION CASEMAP:NONE
;*******************************************************
;*******************************************************
;文件包含
INCLUDE Irvine32.inc
;*******************************************************
;*******************************************************
;数据段说明
.DATA
stbSource byte "this is byte source",0
stbSize=$-stbSource
stbDestination byte stbSize dup(0)
stwSource word 13,45,48,15,1574,0
stwSize=($-stwSource)/2
stwDestination word stwSize dup(0)
stdSource dword 12,321,15,2,145,112,0
stdSize=($-stdSource)/4
stdDestination dword stdSize dup(0)
stbstr byte 0dh,0ah,"这是movsb的结果",0dh,0ah,0
stwstr byte 0dh,0ah,"这是movsw的结果",0dh,0ah,0
stdstr byte 0dh,0ah,"这是movsd的结果",0dh,0ah,0
;*******************************************************
;*******************************************************
;代码段定义
.CODE
main proc
;movsb 的使用
mov esi,offset stbSource
mov edi,offset stbDestination
mov ecx,stbSize
cld
rep movsb
mov edx,offset stbstr;
call WriteString
;movsb 查看结果
mov edx,offset stbDestination
call WriteString
;movsw的使用
mov esi,offset stwSource
mov edi,offset stwDestination
mov ecx,stwSize ;使用movsw时,要注意ecx的值存放的是以word为单位的长度
cld
rep movsw
mov edx,offset stwstr
call WriteString
;movsw 查看结果
mov ecx,stwSize
mov esi,0
L1:
xor eax,eax
mov ax,stwDestination[esi]
call WriteInt;
add esi,2;
loopd L1;
;movsd的使用
mov esi,offset stdSource
mov edi,offset stdDestination
mov ecx,stdSize
cld;不要忘记了设定方向
rep movsd
mov edx,offset stdstr
call WriteString
;movsd查看结果
xor esi,esi
mov ecx,stwSize
L2:
mov eax,dword ptr stdDestination[esi]
call WriteInt
add esi,4
loopd L2;
exit
main endp
end main
;*******************************************************
PS:这里面要注意的就是在使用movsb movsw movsd时,ecx的值,
当使用movsb时,ecx当中就是要复制的byte的个数
当使用movsw时,ecx当中就是要复制的word的个数
当使用movsd时,ecx当中就是要复制的dword的个数