汇编程序的 movsb movsw movsd的使用

本文详细解释了MOV指令在不同数据类型的使用方式,包括如何在字节、字和双字级别进行数据复制,并提供了实际示例来演示其在实际编程中的应用。
;*******************************************************
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的个数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世纪殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值