分类统计字符个数 一、实验目的 通过编程实现字符进行分类统计。 利用 DOS 功能调用 INT 21H 的 10(0Ah)号功能,掌握进行键盘输入字符串的方法以及数据区设置。 掌握 8086 指令: CMP、JB、JA、SHL、INC、LEA、INT、JNZ、SCASB、LOOPE/LOOPNE 等。 二、实验内容 1、编写一个程序实现将数据段中存储在 STRING 处到 NUM 处的字符串进行分类统计,然后将结果存入以 letter、digit 和 other 为名的存储单元中。查找字符串 STRING 中是否有空格,如有找出第一个出现的位置(先用十六进制显示,后修改为十进制显示),否则输出 N。 2、修改前述 1 的程序,实现从键盘输入一个以回车键作为结束符的字符串(字符个数不超过 80 个),存入 BUF 中,分类统计 BUF 中字符串,将结果存入以 letter、digit 和 other 为名的存储单元中,屏幕输出大小写字母个数、数字个数和其它字符个数,并查找字符串 BUF 中是否有空格,如有找出第一个出现的位置(用十进制显示),否则输出 N。(对有余力的同学) 实验结果: DEBUG 调试并查看结果的正确性。 对存储区 STRING 的内容“12ABCDE#!@Y(78)=(1).” 屏幕显示: N 对存储区 STRING 的内容“12ABCD E#! @Y(78)=(1).” 屏幕显示: Place=7 对第 2 部分,如键盘输入 12ABCDE# 3456789143!@Y(78)=(1).回车 输出结果: Letter=6 Digit=15 Other=9 Place=9 三、分析与体会 本次实验我花了较长的时间来完成。初略的程序花了 5 个多小时完成。后来遇到转换为十进制的时候就卡住了。后来在第六周周三的时候听了课以后才会做。 第一个代码很长,有340 多行代码。其实核心代码不多。主要是每一次转换为16 进制以及10 进制的时候,重复了相同的代码。还有换行也重复了几次。 第二个代码不同的是自己输入字符。我自学了子程序。然后把转换为10 进制和输出换行设置成了子程序。精简了代码。 四、代码 键盘输入字符串,分类统计 STACKS SEGMENT 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 INPUT:...