标题:
分类统计字符个数 汇编语言
[打印本页]
作者:
zy6011
时间:
2018-1-13 12:57
标题:
分类统计字符个数 汇编语言
DATAS SEGMENT
STRING1 DB'Please input a string:
;输入提示信息
STRING2 DB'Number of letter:
;各类字符提示信息
STRING3 DB'Number of digits:
STRING4 DB'Number of others:
STRING5 DB'Number of upperletter:
STRING6 DB'Number of lowerletter:
LETTER DB 0 ;字母
UPPERLETTER DB 0;大写字母
LOWERLETTER DB 0;小写字母
DIGIT DB 0 ;数字
OTHERS DB 0 ;其他
DATAS ENDS
STACKS SEGMENT PARA STACK 'STACK';此处输入堆栈段代码
DB 256 DUP(?)
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
start: MOV AX,DATAS
MOV DS,AX
LEA DX,STRING1 ;显示输入提示信息Please input a string,LEA取指功能实现。
MOV AH,09H ;09H为字符串输出
INT 21H ;中断调用,INT 21H 中断为DOS中断
MOV CX,80 ;设置循环次数足够大,CX用来保存循环指令
L1: MOV AH,01H ;中断调用,单字符输入,01H带回显的键盘输入,
INT 21H ;输入符号的ASCII代码在AL寄存器中。
CMP AL,0DH ;若输入回车符则结束,CMP比较指令。如果为数字:30H---39H
JZ OVER2 ;JZ条件转移指令,根据ZF进位转移
CMP AL,30H ;若<30H(0),OTHERS++
JB OTHER ;JB条件转移指令,为低于不高于指令。
CMP AL,39H ;若>39H(9),跳转进一步比较
JA ONE ;JA条件转移指令。为高于/不低于指令。
JMP DIGITAL ;DIGIT++,JMP无条件转移指令,
ONE: CMP AL,41H ;若IF<41H(A),OTHERS++ 如果为大写字母“A-Z”字符:41H---5AH
JB OTHER
CMP AL,5AH ;若IF>5AH(Z),跳转继续比较
JA TWO
JMP CHAR1 ;检测为大写字母,字母和大写字母数加一
TWO: CMP AL,61H ;若IF<61H(a),OTHERS++ 如果为小写字母字符“a-z”字符:61H--7AH
JB OTHER
CMP AL,7AH
JA OTHER
JMP CHAR2 ;检测为小写字母,字母和小写字母数加一
JMP OVER ;比较结束
OTHER: INC OTHERS
JMP OVER
CHAR1: INC LETTER ;字母
INC UPPERLETTER ;大写字母
JMP OVER ;比较结束
CHAR2: INC LETTER ;字母
INC LOWERLETTER ;小写字母
JMP OVER ;结束比较
DIGITAL:INC DIGIT ;DIGIT++
JMP OVER ;比较结束
JMP OVER ;比较结束
OVER: NOP
LOOP L1 ;循环,输入下一字符
OVER2: CALL HUANHUANG ;回车换行
LEA DX,STRING2 ;字符串的输出Number of letter
MOV AH,09H ;09H为字符串输出
INT 21H ;中断调用,INT 21H 中断为DOS中断
XOR AX,AX
MOV AL,LETTER ;将统计的数字送 AX
CALL OUTPUT ;调用输出两位数字的子程序
CALL HUANHUANG ;回车换行
LEA DX,STRING5 ;字符串的输出Number of upperletter
MOV AH,09H ;09H为字符串输出
INT 21H
XOR AX,AX
MOV AL,UPPERLETTER ;将统计的数字送AX
CALL OUTPUT ;调用输出两位数字的子程序
CALL HUANHUANG ;回车换行
LEA DX,STRING6 ;字符串的输出Number of lowerletter:
MOV AH,09H ;09H为字符串输出
INT 21H
XOR AX,AX
MOV AL,LOWERLETTER ;将统计的数字送AX
CALL OUTPUT ;调用输出两位数字的子程序
CALL HUANHUANG ;回车换行
LEA DX,STRING3 ;字符串的输出为Number of digits:
MOV AH,09H ;09H为字符串输出
INT 21H
XOR AX,AX
MOV AL,DIGIT ;将统计的数字送AX
CALL OUTPUT ;调用输出两位数字的子程序
CALL HUANHUANG ;回车换行
LEA DX,STRING4 ;字符串的输出Number of others
MOV AH,09H ;09H为字符串输出
INT 21H
XOR AX,AX
MOV AL,OTHERS ;将统计的数字送AX
CALL OUTPUT ;调用输出两位数字的子程序
MOV AH,4CH ;4CH带返回码结束
INT 21H
HUANHUANG PROC NEAR ;控制输出格式,输出回车换行子程序
MOV AH,02H
MOV DL,0AH ;0AH键盘输入至缓冲区
INT 21H ;输出换行符
MOV AH,02H
MOV DL,0DH ;0DH键盘复位。
INT 21H ;输出回车符
RET
HUANHUANG ENDP
OUTPUT PROC NEAR ;输出两位数字的子程序(输出两位数字为十进制)
MOV BL,10
DIV BL ;AX/BL,AL=商,AH=余数
PUSH AX ;保存AX中的信息
MOV DL,AL
ADD DL,30H ;十进制转为ASCAII码
MOV AH,02H ;显示一个字符
INT 21H ;输出十位数
POP AX ;出栈送AX
MOV DL,AH
ADD DL,30H
MOV AH,02H ;显示一个字符
INT 21H ;输出个位数
RET
OUTPUT ENDP
CODES ENDS
END START
复制代码
作者:
zy6011
时间:
2018-1-13 15:08
附件见下面
基于8086的波形发生器设计与proteus电路仿真_魏凤旗.pdf
2018-1-13 15:07 上传
点击文件名下载附件
下载积分: 黑币 -5
628.67 KB, 下载次数: 4, 下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1