汇编语言,删除字符串中的字符,求达人标注每步的作用,急用,编程达人帮个忙啊!!!

DATA SEGMENT
s1 db 0dh,0ah,'string: $'
s2 db 0dh,0ah,'ch: $'
s3 db 0dh,0ah,'string2: $'
input DB 50
IN_R DB 0,50 dup('0')
output db 50 dup('$')
db'HHHHHHHHH'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
PUSH DS
POP ES
MOV DX,OFFSET S1
MOV AH,09
INT 21H
MOV DX,OFFSET INPUT
MOV AH,0AH
INT 21H
MOV DX,OFFSET S2
MOV AH,09
INT 21H
MOV CL,IN_R
MOV CH,0
MOV BX,OFFSET IN_R+1
MOV DI,OFFSET OUTPUT
MOV AH,01
INT 21H
LOOP1:
MOV AH,[BX]
CMP AH,AL
JE NO_COPY
MOV [DI],AH
INC DI
NO_COPY:
INC BX
LOOP LOOP1
MOV DX,OFFSET S3
MOV AH,09
INT 21H
MOV DX,OFFSET OUTPUT
MOV AH,09
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START

第1个回答  推荐于2018-05-06
DATA SEGMENT 数据段开始
s1 db 0dh,0ah,'string: $' s1,s2,s3是字符串
s2 db 0dh,0ah,'ch: $'
s3 db 0dh,0ah,'string2: $'
input DB 50 input:输入的字符串长度不超过50
IN_R DB 0,50 dup('0') 第一个字节存放实际输入的长度,后面存放输入的字符串(ASCII)
output db 50 dup('$') 删除后的字符串
db'HHHHHHHHH'
DATA ENDS 数据段结束
CODE SEGMENT 代码段开始
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX DS指向DATA段
PUSH DS
POP ES DS,ES压栈
MOV DX,OFFSET S1
MOV AH,09
INT 21H 输出s1字符串,提示用户输入字符串
MOV DX,OFFSET INPUT
MOV AH,0AH
INT 21H 输入的字符串保存到input缓冲区,格式见上
MOV DX,OFFSET S2
MOV AH,09
INT 21H 输出s2字符串,提示用户输入要删除的字符
MOV CL,IN_R CL存放实际输入字符串的长度
MOV CH,0 CH=0
MOV BX,OFFSET IN_R+1 BX指向实际输入的字符串
MOV DI,OFFSET OUTPUT DI指向要输出的字符串
MOV AH,01
INT 21H 输入要删除的字符,存入到AL中
LOOP1:
MOV AH,[BX]
CMP AH,AL 比较字符串中的字符是否与要删除的字符相同
JE NO_COPY 如果相同,执行删除操作
MOV [DI],AH 不同则将该字符复制到输出字符串中
INC DI 指针DI加1
NO_COPY:
INC BX 该字符不送到输出字符串中
LOOP LOOP1 循环,知道结束
MOV DX,OFFSET S3
MOV AH,09
INT 21H 输出字符串s3
MOV DX,OFFSET OUTPUT
MOV AH,09
INT 21H 输出删除后的字符串
MOV AH,4CH
INT 21H 返回DOS
CODE ENDS 数据段结束
END START本回答被提问者和网友采纳

汇编语言,删除字符串中的字符,求达人标注每步的作用,急用,编程达人帮个...
MOV BX,OFFSET IN_R+1 BX指向实际输入的字符串 MOV DI,OFFSET OUTPUT DI指向要输出的字符串 MOV AH,01 INT 21H 输入要删除的字符,存入到AL中 LOOP1:MOV AH,[BX]CMP AH,AL 比较字符串中的字符是否与要删除的字符相同 JE NO_COPY 如果相同,执行删除操作 MOV [DI],AH ...

相似回答