1、汇编分类统计字符个数汇编分类统计字符个数部门: xxx 时间: xxx整理范文,仅供参考,可下载自行编辑分类统计字符个数1、实验目的通过编程实现字符进行分类统计。利用DOS功能调用INT 21H的100Ah)号功能,掌握进行键盘输入字符串的方法以及数据区设置。掌握8086指令: CMP、JB、JA、SHL、INC、LEA、INT、JNZ、SCASB、LOOPE/LOOPNE等。b5E2RGbCAP2、实验内容1、编写一个程序实现将数据段中存储在STRING处到NUM处的字符串进行分类统计,然后将结果存入以letter、digit和other为名的存储单元中。查找字符串STRING中是否有空格,
2、如有找出第一个出现的位置先用十六进制显示,后修改为十进制显示),否则输出N。p1EanqFDPw2、修改前述1的程序,实现从键盘输入一个以回车键作为结束符的字符串字符个数不超过80个),存入BUF中,分类统计BUF中字符串,将结果存入以letter、digit和other为名的存储单元中,屏幕输出大小写字母个数、数字个数和其它字符个数,并查找字符串BUF中是否有空格,如有找出第一个出现的位置用十进制显示),否则输出N。=(1.”屏幕显示:N对存储区STRING的内容12ABCD E#! Y(78=(1.”屏幕显示:Place=7对第2部分,如键盘输入12ABCDE# 3456789143!Y(
3、78=(1.回车输出结果:Letter=6Digit=15Other=9Place=93、分析与体会本次实验我花了较长的时间来完成。初略的程序花了5个多小时完成。后来遇到转换为十进制的时候就卡住了。后来在第六周周三的时候听了课以后才会做。RTCrpUDGiT第一个代码很长,有340多行代码。其实核心代码不多。主要是每一次转换为16进制以及10进制的时候,重复了相同的代码。还有换行也重复了几次。5PCzVD7HxA第二个代码不同的是自己输入字符。我自学了子程序。然后把转换为10进制和输出换行设置成了子程序。精简了代码。jLBHrnAILg4、代码键盘输入字符串,分类统计 STACKS SEGME
4、NT STACK DW 128 DUP(? STACKS ENDS DATAS SEGMENT STRING DB 100 DUP(? NUM DW ? STR1 DB Letter=$ STR2 DB Digit=$ STR3 DB Other=$ STR4 DB Place=$ DIGIT DW 0 OTHER DW 0 LETTER DW 0 PLACE DW ? FLAG DW 0 DATAS ENDS CODES SEGMENT MAIN PROC FAR ASSUME CS:CODES,DS:DATAS START: MOV AX,DATAS MOV DS,AX MOV SI,0
5、INPUT: MOV AH,1 INT 21H 。输入一个字符,存到AL CMP AL,0DH 。判断是否是回车 JE NEXT0 。是回车输入就结束 MOV STRINGSI,AL INC SI JMP INPUT NEXT0: MOV NUM,SI MOV BX,NUM LEA SI,STRING NEXT: MOV AL,SI CMP AL,30H JB COTHER 。小于 30H 是其他字符 CMP AL,3AH JBE CDIGIT 。30H-3AH 是数字 CMP AL,41H JB COTHER 。 3AH-40H是其他字符 CMP AL,5AH JBE CLETTER 。 4
6、1H-5AH是大写字母 CMP AL,61H JB COTHER 。5BH-60H是其他字符 CMP AL,7AH JBE CLETTER 。61H-7AH是小写字母 。大于 7AH 是其他字符 COTHER: INC OTHER JMP P2 CDIGIT: INC DIGIT JMP P2 CLETTER: INC LETTER JMP P2 P2: DEC BX JZ OUTPUT INC SI JMP NEXT OUTPUT: CALL PRIENTER MOV AH, 9 。letter MOV DX, SEG STR1 MOV DS, DX MOV DX, OFFSET STR1
7、INT 21H MOV BX,LETTER CALL TOTEN 。调用转换为十进制的子程序 CALL PRIENTER 。调用换行 MOV AH, 9 。digit MOV DX, SEG STR2 MOV DS, DX MOV DX, OFFSET STR2 INT 21H MOV BX,DIGIT CALL TOTEN CALL PRIENTER MOV AH, 9 。other MOV DX, SEG STR3 MOV DS, DX MOV DX, OFFSET STR3 INT 21H MOV BX,OTHER CALL TOTEN CALL PRIENTER MOV AH, 9 。
8、space MOV DX, SEG STR4 MOV DS, DX MOV DX, OFFSET STR4 INT 21H MOV BX,NUM 。找第一个空格的位置 LEA SI,STRING AGAIN: MOV AL,20H CMP AL,SI JE P1 DEC BX JZ OVER INC SI JMP AGAIN OVER: MOV PLACE,4EH 。4EH 为 N ,找不到输出 N MOV DX,PLACE MOV AH,2 INT 21H JMP EXIT 。退出 结束 P1: INC SI 。下标与位置的转换 ,需加 1 MOV PLACE,SI MOV BX,PLACE
9、 CALL TOTEN CALL PRIENTER JMP EXIT。十进制输出的子程序,小于十六位二进制的数可以输出。原理是把原数除10000,取值,余数除1000,取值,再次得到的余数。除100,取值,再将余数除10,取值,取余 TOTEN PROC NEAR CMP BX,0 JG P111 MOV DL,30H MOV AH,2 INT 21H JMP RETURN P111: MOV FLAG,0 MOV DI,10000 P15: MOV DX,0 MOV AX,BX DIV DI MOV BX,DX MOV DL,AL CMP DL,0 JE P101 MOV FLAG,1 P1
10、02: ADD DL,30H MOV AH,2 INT 21H P16: MOV AX,DI MOV DX,0 MOV CX,10 DIV CX MOV DI,AX CMP DI,0 JG P15 JMP RETURN P101: CMP FLAG,0 JE P16 JMP P102 RETURN: RET TOTEN ENDP PRIENTER PROC NEAR 。回车换行 MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H RET PRIENTER ENDP EXIT: MOV AX,4C00H INT 21H MAIN ENDP CODES ENDS END START申明:所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1