收录日期:2021/01/28 15:32:30 时间:2016/05/22 22:52:10 标签:汇编语言
大家好:我是新手,我刚写了个程序,就是说"在字付串中删出制定字付,要删除的同过键盘输入,要求删一个后,后面的相应前移"前面的不难我以写好了,不过就是不懂怎样前移,起大家帮下忙
这是我的程序请看看:
DSEG SEGMENT
S1 DB 'ABCDBC','$'
COUNT DB ?
DSEG ENDS
;
SSEG SEGMENT
DB 100H DUP(?)
SSEG ENDS
;
CSEG SEGMENT
ASSUME DS:DSEG,CS:CSEG,SS:SSEG
START:
        MOV AX,DSEG
        MOV DS,AX
        ;
        MOV DX,OFFSET S1
        MOV AH,09H
        INT 21H
        MOV AH,02H
        MOV DL,13
        INT 21H
        MOV DL,10
        INT 21H
        ;
        XOR BX,BX
        XOR AX,AX
        MOV CX,6
        MOV AH,01H
        INT 21H
        ;
        
        LEA SI,S1
        LEA DI,S1
        ;
AGAIN:  MOV BL,[SI]
        CMP AL,BL
        JZ J1
        INC SI
        LOOP AGAIN
        JMP J2
J1:     SUB [SI],AL
        SHL [SI],1
        INC SI
        JMP AGAIN
J2:     MOV DX,OFFSET S1
        MOV AH,09H
        INT 21H
        ;
        MOV AH,4CH
        INT 21H
        ;
CSEG ENDS
END START
????没有一个朋友能帮我的啊???
好像药用到一个特殊的中断,不记得了,你自己查查
用串拷贝指令就可以了。
用C来描述就是
void delchar(char *src,char c)
{
    char *p;
    char *q;
    p = src;
    while(*p!='$')
    { 
        if(*p==c)
        {
           q = p;
           do
           {
             ++p;
             *q = *p;
            }
            while(*p!='$');
            break;
        }
    }
}
查找
; 以下过程入口参数是:
;  si - 字符串缓冲区
;  al - 要查找的字符,不能是'$'
; 要使用的积存器有ah
delchar proc near
    ; lea si,s1
    ; al = 要找的字符
    push di ;保存di
search_again:
   mov ah,[si]
   cmp ah,'$'
   jz all_done ;到达字符串结尾,找不到就不用移动
   cmp al,ah
   jne search_again ;还没找到
   ;找到了就到这里来
   ; 移动
   mov di,si
   inc si
move_again:
   mov ah,[si]
   mov byte ptr [di],ah
   cmp ah,'$'
   jne move_again
all_done:
   pop di ;恢复di
delchar endp

接收输入之后先确认不是'$',调用如下
; al = 要删除的字符
lea si, s1
call delchar
就妥了
楼上的,谢谢你咯,呵呵我是个新手还不是很懂~~~你能不能帮我把这段程序加到我那程序里面能???谢谢了,不过如果没时间也没事啊~~~呵呵给我个回应哦,我要结稿啊~~~~~~
DSEG SEGMENT
S1 DB 'ABCDBC','$'
COUNT DB ?
DSEG ENDS
;
SSEG SEGMENT
DB 100H DUP(?)
SSEG ENDS
;
CSEG SEGMENT
ASSUME DS:DSEG,CS:CSEG,SS:SSEG
START:
        MOV AX,DSEG
        MOV DS,AX
        ;
        MOV DX,OFFSET S1
        MOV AH,09H
        INT 21H
        MOV AH,02H
        MOV DL,13
        INT 21H
        MOV DL,10
        INT 21H
        ;
        XOR BX,BX
        XOR AX,AX
        MOV CX,6
        MOV AH,01H
        INT 21H
        ;
        
        LEA SI,S1
        cmp al, '$'
        je skip_del
        call delchar
sjip_del:
        MOV DX,OFFSET S1
        MOV AH,09H
        INT 21H
        ;
        MOV AH,4CH
        INT 21H
        ;
; 以下过程入口参数是:
;  si - 字符串缓冲区
;  al - 要查找的字符,不能是'$'
; 要使用的积存器有ah
delchar proc near
    ; lea si,s1
    ; al = 要找的字符
    push di ;保存di
search_again:
   mov ah,[si]
   cmp ah,'$'
   jz all_done ;到达字符串结尾,找不到就不用移动
   cmp al,ah
   ; *********************
   ; 忘记增加si了,sorry
   ; *********************
   inc si
   jne search_again ;还没找到
   ;找到了就到这里来
   ; 移动
   mov di,si
   inc si
move_again:
   mov ah,[si]
   mov byte ptr [di],ah
   cmp ah,'$'
   jne move_again
all_done:
   pop di ;恢复di
delchar endp
CSEG ENDS
END START
太不好意思了,还是有问题
search_again:
   mov ah,[si]
   cmp ah,'$'
   jz all_done ;到达字符串结尾,找不到就不用移动
   cmp al,ah
   je search_end
   inc si
   jmp search_again ;还没找到
search_end:
   ;找到了就到这里来
   ; 移动
   mov di,si
   inc si      ;跳过要删除的字符
move_again:
DSEG SEGMENT
S1 DB 'ABCDBC','$'
COUNT DB ?
DSEG ENDS
;
SSEG SEGMENT  stack
DB 100H DUP(?)
SSEG ENDS
;
CSEG SEGMENT
ASSUME DS:DSEG,CS:CSEG,SS:SSEG
START:
        MOV AX,DSEG
        MOV DS,AX
        ;
        MOV DX,OFFSET S1
        MOV AH,09H
        INT 21H
        MOV AH,02H
        MOV DL,13
        INT 21H
        MOV DL,10
        INT 21H
        ;
        XOR BX,BX
        XOR AX,AX
        MOV CX,6 
        MOV AH,01H
        INT 21H
        ;
        
        LEA SI,S1
        LEA DI,S1
        ;
AGAIN:  MOV BL,[SI]
        CMP AL,BL
        JZ J1
mov [di],bl
inc di
j1:
        INC SI
        LOOP AGAIN
J2:
mov byte ptr [di],'$'
MOV DX,OFFSET S1
        MOV AH,09H
        INT 21H
        ;
        MOV AH,4CH
        INT 21H
        ;
CSEG ENDS
END START
DSEG SEGMENT
S1 DB 'ABCDBC','$'
COUNT DB ?
DSEG ENDS

SSEG SEGMENT
DB 100H DUP(?)
SSEG ENDS

CSEG SEGMENT
ASSUME DS:DSEG,CS:CSEG,SS:SSEG
START:
        MOV AX,DSEG
        MOV DS,AX
        
        MOV DX,OFFSET S1
        MOV AH,09H
        INT 21H
        MOV AH,02H
        MOV DL,13
        INT 21H
        MOV DL,10
        INT 21H
       
        XOR BX,BX
        XOR AX,AX
        MOV CX,6
        MOV AH,01H
        INT 21H
        PUSH AX
        MOV AH,02H
        MOV DL,13
        INT 21H
        MOV DL,10
        INT 21H
        POP AX
        mov si,0
        mov di,0
AGAIN: 
        MOV dL,s1[si]
        CMP AL,dL
        JZ J1
        mov ah,s1[si]
        mov s1[di],ah
        INC si
        inc di
        LOOP AGAIN
        JMP J2
J1:    
       inc si
       cmp al,s1[si]
       jz j1
       mov ah,s1[si]
       mov s1[di],ah
       inc si
       inc di
       loop again       
J2:     MOV DX,OFFSET S1
        MOV AH,09H
        INT 21H
        ;
        MOV AH,4CH
        INT 21H
        ;
CSEG ENDS
END START
谢谢大家啊,我去试试哦~~~~我给分咯呵呵
DoItFreely(Freely),csdsjkk,rain1983 你好,我觉得你门都很不错哦,你门中有谁能不能给我你的email,有不懂的就直接发给你问你行吗???谢谢

在ASP.NET页面中怎么做一个置顶按钮导航,功能很简单的,就是跳转而已!请高手指点! 在vb中直接打开一个可执行文件的函数 如果实现当单出文字就执行javascript 推荐好书 刚学网络编程一些问题 一个Struts的问题,在线等,谢谢 \" 急求论坛C#完成代码\" 小弟是个初学者,有一作业不回请教师兄们! 这是澳洲大学IT MASTER的JAVA作业,我做了一些,但是有些问题,大家帮看看。 数据窗口分页显示数据....急.... 在WEB上输出报表,大家使用的是水晶报表的那个版本? DataTable和DataGridView绑定后datagridview无法更改列列名? 如何判断连接的对象是否存在,如果存在,怎么关闭才比较保险(有难度,欢迎大家讨论) linux程序开发,哪些书比较好 File.Exists(\"%systemroot%\\\\temp\\\\1.txt\"));1.txt已经建立,为何不能判断出来? 看看这条头疼的insert 语句怎么写???? 如何在in语句中使用自定义排序 咨询电脑配置 C#开发的客户端程序如何在非.net formwork 环境中运行? File.Exists(\"%systemroot%\\\\temp\\\\1.txt\"));1.txt已经建立,为何不能判断出来? 关于ajax的问题,急!! 透明绘图的另类问题。高手请来。不是普通的透明绘图能解决的 怎么在visualc++中写c语言 透明绘图的另类问题。高手请来。不是普通的透明绘图能解决的 焦点始终在弹出的页面上,关闭弹出页面时焦点回到主页 百思不得其解!!!!!!!! 我买了一款手机,可是在网上找不到相关资料,来问问大家。 遍历类成员的问题??? 菜鸟求问保存文件的问题 内网的电脑如何把它的做成一个服务器?