汇编语言实现对字符串的插入与删除功能

一 代码实现

DATAS SEGMENT ;数据段
    STRING0 DB 10 
            DB ?  
            DB 10 DUP(?)
    STRING1 DB 'Input the string:',0DH,0AH,'$'  ;提示语
    STRING2 DB 'Insert or delete?(I/D)',0DH,0AH,'$' 
    STRING3 DB 'Position:$'
    WORD1   DW ?       ;存入所改动位置
    STRING4 DB 'Word:$'
    WORD2   DB ?       ;存入插入的字符
    STRING5 DB 0DH,0AH,'$'   
DATAS ENDS

STACKS SEGMENT

STACKS ENDS

CODES  SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS ;定义DS:DX
    MOV DS,AX    ;DS指向缓冲区首地址基地址
hshLOOP:
    LEA DX,STRING1 ;把STRING1的地址传给DX
	MOV AH,9       ;DOS9号功能调用,显示提示语
	INT 21H
	LEA DX,STRING0 ;把STRING0的地址传给DX
	MOV AH,10      ;DOS10号功能调用,键盘输入到缓冲区
	INT 21H
	LEA DX,STRING5 ;把STRING5的地址传给DX
	MOV AH,9       ;DOS9号功能调用回车换行
	INT 21H
NEXT3:	
    LEA DX,STRING2 ;把STRING2的地址传给DX
	MOV AH,9       ;DOS9号功能调用,显示提示语
	INT 21H
	MOV AH,1       ;DOS1号功能调用,键盘输入并回显
	INT 21H
	LEA DX,STRING5 ;把STRING5的地址传给DX
	MOV AH,9       ;DOS9号功能调用回车换行
	INT 21H
	CMP AL,'I'     ;将输入的字符的ASCII码与I的ASCII码比较
	JZ NEXT1       ;等于则跳转到NEXT1
	CMP AL,'i'     ;不等于,将输入的字符的ASCII码与i的ASCII码比较
	JZ NEXT1       ;等于则跳转到NEXT1
	CMP AL,'D'     ;不等于,将输入的字符的ASCII码与D的ASCII码比较
	JZ NEXT2       ;等于则跳转到NEXT2
	CMP AL,'d'     ;不等于,将输入的字符的ASCII码与d的ASCII码比较
	JZ NEXT2       ;等于则跳转到NEXT2
    JMP NEXT3      ;都不是上面的字符,则跳转到NEXT3
NEXT2:	
	CALL  DEL          ;执行删除
	LEA DX,STRING5     ;把STRING5的地址传给DX
	MOV AH,9           ;DOS9号功能调用回车换行
	INT 21H
	LEA DX,STRING5     ;把STRING5的地址传给DX
	MOV AH,9           ;DOS9号功能调用回车换行
	INT 21H
 JMP hshLOOP   ;JMP FINISH
NEXT1: 
    CALL  INSERT       ;执行插入   
    LEA DX,STRING5     ;把STRING5的地址传给DX
	MOV AH,9           ;DOS9号功能调用回车换行
	INT 21H 
	LEA DX,STRING5     ;把STRING5的地址传给DX
	MOV AH,9           ;DOS9号功能调用回车换行
	INT 21H
 JMP hshLOOP
 
FINISH: 
    MOV  AH,  4CH      ;返回DOS
    INT  21H


;插入子程序****************  
    INSERT PROC 
I3: LEA DX,STRING3   ;把STRING3的地址传给DX
	MOV AH,9         ;DOS9号功能调用,显示提示语插入的位置
	INT 21H
	MOV AH,1         ;DOS1号功能调用,键盘输入并回显 
	INT 21H
	LEA DX,STRING5   ;把STRING5的地址传给DX
	MOV AH,9         ;DOS9号功能调用回车换行
	INT 21H
	SUB AL,48        ;将键入的字符对应的ASCII码减去48,对应显示该字符的ASCII码
	DEC AL	         ;al自减1
    CMP AL,STRING0[1] ;Al与STRING0[1]比较
    JA I3             ;al大于STRING0[1]则跳转到I3即开始,不能插入大于字符串长度后一位的位置
   	MOV AH,0          ;小于,将AH清0
   	INC AL            ;AL自增1,恢复原来的位置
	MOV WORD1,AX      ;将AX的内容传给WORD1
	LEA DX,STRING4    ;把STRING4的地址传给DX
	MOV AH,9          ;DOS9号功能调用,显示提示语插入的内容
	INT 21H
	MOV AH,1          ;DOS1号功能调用,键盘输入并回显 
	INT 21H
	LEA DX,STRING5    ;把STRING5的地址传给DX
	MOV AH,9          ;DOS9号功能调用回车换行
	INT 21H
	MOV AH,0          ;AH清0
	MOV WORD2,AL      ;将AL输入的内容传给WORD2
	MOV SI,1          ;1赋给SI
	MOV CL,STRING0[1] ;将STRING0[1]即长度传给CL
	DEC SI            ;Sl自减1,指向前一位元素
I1: INC SI            ;SI自增1
    CMP WORD1,SI      ;WORD1与SI比较,确定插入的位置
    JNZ I2            ;不等于,则跳转到I2
    MOV DL,WORD2      ;指定位置插入指定字符
	MOV AH,2          ;DOS2号功能调用,显示输出WORD2的内容
	INT 21H
I2: MOV DL,STRING0[SI+1] ;将下一位地址STRING0[SI+1]传给DL
	MOV AH,2             ;DOS2号功能调用显示输出STRING0[SI+1]对应内容
	INT 21H
	LOOP I1              ;循环I1
	MOV AX,WORD1         ;将WORD1的内容传给AX
	DEC AL               ;AL自减1
	CMP AL,STRING0[1]    ;STRING0[1]的内容与AL比较
	JNZ I4               ;不等于则跳转到I4
	MOV DL,WORD2         ;指定位置插入指定字符
	MOV AH,2             ;DOS2号功能调用,显示输出WORD2的内容
	INT 21H
I4:  RET                 ;返回主程序
INSERT ENDP

;删除子程序*****************   
DEL PROC
D3: LEA DX,STRING3       ;把STRING3的地址传给DX
	MOV AH,9             ;DOS9号功能调用,显示提示语删除的位置
	INT 21H
	MOV AH,1             ;DOS1号功能调用,键盘输入并回显
	INT 21H
	LEA DX,STRING5       ;把STRING5的地址传给DX
	MOV AH,9             ;DOS9号功能调用回车换行
	INT 21H
    SUB AL,48            ;将键入的字符对应的ASCII码减去48,对应显示该字符的ASCII码
    CMP AL,STRING0[1]    ;Al与STRING0[1]比较
    JA D3                ;大于则跳转到D3
	MOV AH,0             ;小于,AH清0
	MOV WORD1,AX         ;把键入的删除位置传给WORD1
	MOV SI,1             ;1赋给SI
	MOV CL,STRING0[1]    ;将字符串长度传给CL
	DEC SI               ;SI自减1
D1: INC SI               ;SI自增1
CMP WORD1,SI             ;WORD1即插入位置与SI比较
;跳过输出指定位置的字符
    JZ D2                ;相等则跳转到D2
    MOV DL,STRING0[SI+1] ;不等于,把STRING0[SI+1]传给DX
	MOV AH,2             ;DOS2号功能调用,显示输出
	INT 21H
D2:	LOOP D1              ;循环D1
    RET                  ;返回主程序
DEL ENDP

CODES  ENDS
END  START

该程序的功能是对输入的字符串进行处理,I是对输入的字符串进行插入,输入插入的字符及插入的位置,即可进行插入功能,D是对输入的字符串进行删除,输入删除的位置即可进行删除功能。

二 运行结果
I:插入功能,运行截图如下
在这里插入图片描述
选择插入功能I,对输入的字符串abc进行插入,输入插入字符的位置2及插入的字符D,插入结果为aDbc,与实际相符,插入功能正确。

D:删除功能,运行截图如下
在这里插入图片描述
选择删除功能D,对输入的字符串abcd进行插入,输入删除字符的位置2,删除结果为acd,与实际相符,删除功能正确。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值