汇编网首页登录博客注册
heliang6291的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
好友圈
文章收藏

[2012-07-20 20:22] [80X86] T6-14 (第6章第14题)

;程序名:T6-14.asm
;功能:截取字符串某子串
;入口参数:(1)es:di指向字符串首地址
;          (2)ah为截取子串的开始相对地址,al为子串长度
;出口参数:子串存放开始地址为es:di
;说明:(1)如果子串截取开始地址超过原字符串则出错,不执行
;      (2)字符串以0结束,子串也以此结束

dbcut proc near
     jmp dbcut_begin
         dbcut_stor db 256 dup (?)   ;出口参数存放缓冲区
dbcut_begin:
     push ds
         push si
         push bx
         push cx
         
     push ax
         push di
         xor al,al
         mov cx,0ffffh
         repnz scasb
         pop di
         not cx    ;测字符串长度(包括结束符0)
         dec cx
         mov bx,cx    ;保存字符串长度
         pop ax
         push ax
         mov al,ah
         xor ah,ah
         cmp ax,cx
         jae dbcut_end  ;检测截取开始地址是否超过字符串长度
         add di,ax
         pop ax
         push ax
         xor ah,ah
         cmp ax,bx
         jae dbcut_do   ;检测截取长度是否超过原字符串剩余长度
         mov cx,ax
         pop ax
         jmp dbcut_do2
dbcut_do:
     pop ax
         mov al,ah
         xor ah,ah
     sub bx,ax
         mov cx,bx
dbcut_do2:
         mov ax,es
         mov ds,ax
         mov si,di   ;ds:si指向字符串截取开始地址
         mov ax,seg dbcut_stor
         mov es,ax
         mov di,offset dbcut_stor
         push di
         rep movsb
         mov byte ptr es:[di],0   ;结束符补上
         pop di
         jmp dbcut_end1
dbcut_end:
     pop ax
dbcut_end1:
     pop cx
         pop bx
         pop si
         pop ds
         ret
dbcut endp
评论次数(0)  |  浏览次数(778)  |  类型(汇编作业) |  收藏此文  | 
 
 请输入验证码  (提示:点击验证码输入框,以获取验证码