;--------------------------------------------------------------------------
CSEG SEGMENT
MAIN PROC FAR
ASSUME CS: CSEG, DS: DSEG
START: PUSH DS ;设置返回DOS
SUB AX, AX
PUSH AX
MOV AX, DSEG
MOV DS, AX ;给DS赋值
BEGIN: LEA SI, ARRAY
MOV DX, 0 ;(DX)用于存放所求的结果
MOV AX, [SI]
MOV BX, [SI+2]
CMP AX, BX ;比较第一和第二两个数是否相等
JNE NEXT1
INC DX
NEXT1: CMP [SI+4], AX ;比较第一和第三两个数是否相等
JNE NEXT2
INC DX
NEXT2: CMP [SI+4], BX ;比较第二和第三两个数是否相等
JNE NUM
INC DX
NUM: CMP DX, 3
JL DISP
DEC DX
DISP: ADD DL, 30H ;转换为ASCII码
MOV AH, 2 ;显示一个字符
INT 21H
RET
MAIN ENDP
CSEG ENDS ;以上定义代码段
;--------------------------------------------------------------------------
END START
5.22 从键盘输入一系列字符(以回车符结束),并按字母、数字、及其它字符分类计数,最后显示出这三类的计数结果。
答:程序如下:
DSEG SEGMENT
ALPHABET DB ‘输入的字母字符个数为:’, ‘$’
NUMBER DB ‘输入的数字字符个数为:’, ‘$’
OTHER DB ‘输入的其它字符个数为:’, ‘$’
CRLF DB 0DH, 0AH, ‘$’
DSEG ENDS
;--------------------------------------------------------------------------
CSEG SEGMENT
MAIN PROC FAR
ASSUME CS: CSEG, DS: DSEG
START: PUSH DS ;设置返回DOS
SUB AX, AX
PUSH AX
MOV AX, DSEG
MOV DS, AX ;给DS赋值
BEGIN: MOV BX, 0 ;字母字符计数器
MOV SI, 0 ;数字字符计数器
MOV DI, 0 ;其它字符计数器
INPUT: MOV AH, 1 ;输入一个字符
INT 21H
CMP AL, 0DH ;是回车符吗?
JE DISP
CMP AL, 30H ;<数字0吗?
JAE NEXT1
OTHER: INC DI ;是其它字符
相关推荐: