1.输入字符串用10号中断,对缓冲区有格式规定,第一位未缓冲区大小,第二位保留,输入后储存字符串长度,从第三位开始是字符串。
2. 遍历字符串,按照A,Z,a,z的顺序依次CMP当前字符,按逻辑判断是不是非字母字符,如果是,转输出部分。
3.通过判断CX当前值,来判断该字符是不是第一个或最后一个字符,这两种情况输出要特别处理。
DATA SEGMENT
BUF DB 20,?,20 DUP(?)
CRLF DB 0AH,0DH,'$'
DATA ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET BUF
MOV AH,0AH
INT 21H
MOV DX,OFFSET CRLF
MOV AH,09H
INT 21H
MOV CL,BUF+1
LEA BX,BUF+2
A0: MOV AL,[BX]
CMP AL,'A'
JB OUTPUT
CMP AL,'Z'
JB NEXT
CMP AL,'a'
JB OUTPUT
CMP AL,'z'
JB NEXT
JB OUTPUT
NEXT:
INC BX
LOOP A0
OUTPUT:
AND CX,CX
JZ OVER
MOV AL,BUF+1
AND AX,00FFH
CMP CX,AX
JZ CUR
PRE:MOV DL,[BX-1]
MOV AH,02H
INT 21H
CUR:MOV DL,[BX]
MOV AH,02H
INT 21H
CMP CX,1
JZ RTN
LAT:MOV DL,[BX+1]
MOV AH,02H
INT 21H
RTN:MOV DL,' '
MOV AH,02H
INT 21H
JMP NEXT
OVER:
MOV AH,4CH
INT 21H
CODES ENDS
END START