注册 登录
编程论坛 汇编论坛

大虾们赐教啊~~~~~~~~~~~

aaazzzzz 发布于 2011-01-22 18:56, 895 次点击
写一个判别字符是否为数字符的子程序。
并利用该子程序把一个字符串中的所有数字符删除
dseg segment
string db "ab=c950=asd",0
dseg ends
cseg segment
     assume cs:cseg,ds:dseg
isdecm proc
cmp al '0'
jb isdecml
cmp al '9'
ja isdecml
clc
ret
isdecml:stc
ret
isdecm endp
start:mov ax,desg
      mov ds,ax
      mov si,offset string
      mov di,si
next:mov al [si]
     inc si
     or al,al
     jz ok
     call isdecm
     jnc next
     mov [di],al
     inc di
     jmp next
ok:mov [di],ai
   mov ah,4ch
   int 21h
    cseg ends end start

我怎么也弄不明白是怎么删除的。。。大家教教我啊
        
2 回复
#2
zaixuexi2011-01-24 13:00
程序代码:
dseg segment
    string db "ab=c950=asd",0
dseg ends

cseg segment
     assume cs:cseg,ds:dseg

isdecm proc
    cmp al,'0'
    jb isdecml
    cmp al,'9'
    ja isdecml
    clc     ;清除CF位
    ret
isdecml:
    stc    ;设置CF位
    ret
isdecm endp

start:
    mov ax,dseg
          mov ds,ax
          mov si,offset string   
          mov di,si    ;注意si,di的指向和变化
next:
    mov al,[si]
         inc si
         or al,al
         jz ok
         call isdecm
         jnc next
         mov [di],al;重新写回去就删除了
         inc di
         jmp next
ok:
    mov [di],al
       mov ah,4ch
       int 21h
cseg ends

end start
自己用DEBUG调试一下,看看ds段的内存变化就清楚了
#3
aaazzzzz2011-01-24 19:51
为啥重新写回去就是删除了呢?那不是没有变化吗?

[ 本帖最后由 aaazzzzz 于 2011-1-26 00:34 编辑 ]
1