注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

信息 灵感 创新

I? =Information,Inspiration,Innovation

 
 
 

日志

 
 
关于我

we are 5. Mathematics, Computation, Programming, Engineering, and Making fun of life.

网易考拉推荐

字符串逆向  

2014-12-08 14:06:03|  分类: x86ASM |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
将一段内存中的的字符串逆向写入另一段内存中,并计算字符串的长度。
assume cs:code

data1 segment
  db "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",0
data1 ends

data2 segment
 db 80h dup('?')
data2 ends

stack segment
  db 100h dup(?)
stack ends

code segment
start:
  ;source
  mov ax,data1
  mov ds,ax
  mov si,0
  ;destination
  mov ax,data2
  mov es,ax
  mov di,0
  call reverse
  
  mov ax,4c00h
  int 21h

;将字符串逆向写入内存中
;输入:
;DS:[SI]指向一个以00h结尾的字符串的首地址
;输出:
;ES:[DI]指向以00h结束的逆字符串的首地址
;CX中储存字符串的长度,不包括结尾的00h

reverse:
  pushf
  push ax
  push bx
  push si
  push di
  mov bx,0;count the string length
s:
  mov ch,00h
  mov cl,ds:[si];each time a char
  jcxz done
  push cx
  inc bx
  inc si
  jmp s 
done:
  ;now all chars are in stack,pop them to destination
  mov cx,bx;loop times
  mov ax,di;
s1:
  pop bx
  mov es:[di],bl
  inc di
  loop s1
  mov cx,di
  sub cx,ax;length of the string
  mov es:[di],byte ptr 00h
  pop di
  pop si
  pop bx
  pop ax
  popf
  ret
;end of reverse

code ends
end start 
  评论这张
 
阅读(376)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016