汇编实现的 memcpy memset strstr

;**********************************************
TITLE 汇编实现的 memcpy  memset strstr
;**********************************************


;**********************************************
;程序运行平台说明
.386
.MODEL FLAT,STDCALL
OPTION CASEMAP:NONE
;**********************************************


;**********************************************
;文件包含
INCLUDE Irvine32.inc
;**********************************************


;**********************************************
;数据段定义
.DATA
valstr byte "This is Source Byte",0dh,0ah,0
valDes byte ($-valstr) dup(0)
strstr  byte "we have found it",0dh,0ah,0
;**********************************************


;**********************************************
;代码段定义
.CODE
main proc
  ;开始使用memcpy
  mov esi,offset valstr
  mov edi,offset valDes
  mov ecx,sizeof valstr
  cld
  rep movsb
  ;输出valDes查看结果
  mov edx,offset valDes
  call WriteString
  ;开始使用strstr寻找特定的字符
  mov al,'B'
  mov edi,offset valDes
  mov ecx,sizeof valDes
  repne scasb;repne 当在不相等的情况下继续循环
  ;开始输出看看是否是结果  
  mov edx,offset valDes
  mov ebx,sizeof valDes
  add edx,ebx
  sub edx,ecx  
  dec edx
  call WriteString
  ;开始使用memset将valDes清空
  mov edi,offset valDes
  mov al,0
  mov ecx,sizeof valDes
  rep stosb
  ;输出查看结果
  mov edx,offset valDes
  call WriteString  
  exit
main endp
end main
;**********************************************


PS:解读使用strstr时,也就是scasb,

如果要查询的字符在edi指向的内存数据当中的话,那么ecx的值就是其索引所在,但是与高级语言不同的是,ecx的索引的含义是从字符串末尾开始作为起始0开始计数的

也就是说如果内存中的数据是

str=ABCDEFG   起始地址放在edi当中的话,ecx中放的是7,查找F,那么最终ecx中放的索引值就是2,此时如果我们想要输出查找字符所在的的后续字符串的话,就需要

str+sizeof(str)-ecx,将该结果放在edx当中,然后输出,才是最终结果...



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

世纪殇

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

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

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

打赏作者

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

抵扣说明:

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

余额充值