1.实现简单的人机对话功能
STACKA SEGMENT
DB 100 DUP(?)
STACKA ENDS
DATA SEGMENT
MESS1 DB 'WHAT IS YOUR NAME?','$'
MESS2 DB 'HOW OLD ARE YOU?','$'
BUF1 DB 20
DB ?
DB 20 dup(?)
BUF2 DB 15
DB ?
DB 15 dup(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACKA
MAIN PROC FAR
START: PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MESS1
MOV AH,9
INT 21H
MOV DX,OFFSET BUF1
MOV AH,0AH
INT 21H
MOV DX,OFFSET MESS2
MOV AH,9
INT 21H
MOV DX,OFFSET BUF2
MOV AH,0AH
INT 21H
RET
MAIN ENDP
CODE ENDS
END START
2.键盘输入判断
STACKA SEGMENT
DB 100 DUP(?)
STACKA ENDS
DATA SEGMENT
MESSER DB 'ERROR',0AH,0DH,'$'
MESSRI DB 'RIGHT',0AH,0DH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACKA
START:
MOV AX,DATA
MOV DS,AX
READ1: MOV AH,01H;读入第一个字符
INT 21H
CMP AL,30H
JL ERROR1;比'0'小报错
CMP AL,39H
JG ERROR1;比'9'大报错
READ2: MOV AH,01H;读入第二个字符
INT 21H
CMP AL,41H
JL ERROR2;比'A'小报错
CMP AL,7AH
JG ERROR2;比'z'大报错
CMP AL,5AH;与'Z'比较
JG NEXT
JMP RIGHT;正确,数字+大写字母
NEXT: CMP AL,61H;与'a'比较
JL ERROR2
JMP RIGHT;正确,数字+小写字母
ERROR1:MOV DX,OFFSET MESSER;显示错误信息
MOV AH,09H
INT 21H
JMP READ1;返回第一个出错处
ERROR2:MOV DX,OFFSET MESSER;显示错误信息
MOV AH,09H
INT 21H
JMP READ2;返回第二个出错处
RIGHT: MOV DX,OFFSET MESSRI;显示正确信息
MOV AH,09H
INT 21H
MOV AH,4CH;返回DOS
INT 21H
CODE ENDS
END START
3.分类统计字符个数
STACKA SEGMENT
DB 100 DUP(?)
STACKA ENDS
DATA SEGMENT
STRING DB 50,?,50 DUP(?)
DIGIT DB ?
LETTER DB ?
OTHER DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACKA
START:
MOV AX,DATA
MOV DS,AX
LEA DX,STRING;读入字符串
MOV AH,0AH
INT 21H
LEA SI,STRING;初始化指针
INC SI;指针指向字符个数存放单元
MOV CH,0
MOV CL,[SI];设置循环次数
MOV AH,0;AH DH DL三个计数器清零
MOV DX,0
LL: INC SI;指针后移
MOV AL,[SI];取数
CMP AL,30H;与'0'比较
JL OTHERS
CMP AL,39H;与'9'比较
JG CHAR
INC AH;数字计数器加1
JMP NEXT
CHAR: CMP AL,41H;与'A'比较
JL OTHERS
CMP AL,7AH;与'z'比较
JG OTHERS
CMP AL,5AH;与'Z'比较
JG DAXIE
INC DH;字母计数器加1
JMP NEXT
DAXIE: CMP AL,61H;与'a'比较
JL OTHERS
INC DH;其他字符计数器加1
JMP NEXT
OTHERS: INC DL
NEXT: LOOP LL
MOV DIGIT,AH;存结果
MOV LETTER,DH
MOV OTHER,DL
MOV DL,0AH;换行
MOV AH,02H
INT 21H
MOV BL,DIGIT;显示数字的个数
CALL DISP
MOV BL,LETTER;显示字母的个数
CALL DISP
MOV BL,OTHER;显示其他字符的个数
CALL DISP
MOV AH,4CH
INT 21H
DISP PROC NEAR
MOV DL,BL
SHR DL,1;右移四位,取高位,TASM中可用SHR DL,4
SHR DL,1
SHR DL,1
SHR DL,1
ADD DL,30H;加30H,变成ASCII码
MOV AH,02H;显示
INT 21H
MOV DL,BL
AND DL,0FH;取低位
CMP DL,9
JBE NEXT1
ADD DL,7;A~F加7
NEXT1: ADD DL,30H;加30H,变成ASCII码
MOV AH,02H;显示
INT 21H
RET
DISP ENDP
CODE ENDS
END START