Lenguaje ensamblador, elimine los caracteres de la cadena. Marque la función de cada paso. ¿Puede ayudarme un experto en programación? ! !
DATA SEGMENT el segmento de datos comienza
s1 db 0dh,0ah,'string: $' s1,s2,s3 son cadenas
s2 db 0dh,0ah , 'ch: $'
s3 db 0dh,0ah,'string2: $'
entrada DB 50 entrada: La longitud de la cadena de entrada no excede 50
IN_R DB 0,50 dup('0') El primer byte almacena la longitud de entrada real, seguido de la cadena de entrada (ASCII)
salida db 50 dup('$') después de eliminar la cadena
db'HHHHHHHH'
FIN DE DATOS fin del segmento de datos
SEGMENTO DE CÓDIGO inicio del segmento de código
ASUME CS:CODE, DS: DATA
INICIO: MOV AX,DATA
MOV DS,AX DS apunta al segmento DATA
PUSH DS
POP ES DS , ES empujado a la pila
MOV DX,OFFSET S1
MOV AH,09
INT 21H genera la cadena s1 y solicita al usuario que ingrese la cadena
MOV DX, ENTRADA OFFSET
MOV AH,0AH
INT 21H La cadena de entrada se guarda en el búfer de entrada, el formato es como se muestra arriba p>
MOV DX ,OFFSET S2
MOV AH,09
INT 21H Genera la cadena s2 y solicita al usuario que ingrese los caracteres que se eliminarán
MOV CL, IN_R CL almacena la entrada real La longitud de la cadena
MOV CH,0 CH=0
MOV BX,OFFSET IN_R+1 BX apunta a la entrada real string
MOV DI,OFFSET OUTPUT DI apunta a la cadena que se generará
MOV AH,01
INT 21H Ingrese el carácter que desea eliminar y guárdelo en AL
LOOP1:
MOV AH,[BX]
CMP AH,AL Compara si los caracteres de la cadena son los mismos que los caracteres que se van a eliminar
JE NO_COPY Si son iguales, ejecute la operación Eliminar
MOV [DI], AH Si es diferente, copie el carácter a la cadena de salida
INC DI puntero DI más 1
NO_COPY:
p>INC BX Este carácter no se envía a la cadena de salida
LOOP LOOP1 bucle hasta el final
MOV DX,OFFSET S3 p>
MOV AH ,09
INT 21H Cadena de salida s3
MOV DX, SALIDA OFFSET
MOV AH,09
INT 21H Salida después de la eliminación Cadena de
MOV AH,4CH
INT 21H Regreso a DOS
CODE ENDS final del segmento de datos
FIN INICIO