汇编分类统计字符个数.docx
- 文档编号:23905046
- 上传时间:2023-05-22
- 格式:DOCX
- 页数:9
- 大小:16.05KB
汇编分类统计字符个数.docx
《汇编分类统计字符个数.docx》由会员分享,可在线阅读,更多相关《汇编分类统计字符个数.docx(9页珍藏版)》请在冰豆网上搜索。
汇编分类统计字符个数
分类统计字符个数
一、实验目的
通过编程实现字符进行分类统计。
利用DOS功能调用INT21H的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的内容“12ABCDE#!
@Y(78)=
(1).”
屏幕显示:
Place=7
对第2部分,如键盘输入
12ABCDE#3456789143!
@Y(78)=
(1).回车
输出结果:
Letter=6
Digit=15
Other=9
Place=9
三、分析与体会
本次实验我花了较长的时间来完成。
初略的程序花了5个多小时完成。
后来遇到转换为十进制的时候就卡住了。
后来在第六周周三的时候听了课以后才会做。
第一个代码很长,有340多行代码。
其实核心代码不多。
主要是每一次转换为16进制以及10进制的时候,重复了相同的代码。
还有换行也重复了几次。
第二个代码不同的是自己输入字符。
我自学了子程序。
然后把转换为10进制和输出换行设置成了子程序。
精简了代码。
四、代码
键盘输入字符串,分类统计
STACKSSEGMENTSTACK
DW128DUP(?
)
STACKSENDS
DATASSEGMENT
STRINGDB100DUP(?
)
NUMDW?
STR1DB'Letter=$'
STR2DB'Digit=$'
STR3DB'Other=$'
STR4DB'Place=$'
DIGITDW0
OTHERDW0
LETTERDW0
PLACEDW?
FLAGDW0
DATASENDS
CODESSEGMENT
MAINPROCFAR
ASSUMECS:
CODES,DS:
DATAS
START:
MOVAX,DATAS
MOVDS,AX
MOVSI,0
INPUT:
MOVAH,1
INT21H;输入一个字符,存到AL
CMPAL,0DH;判断是否是回车
JENEXT0;是回车输入就结束
MOVSTRING[SI],AL
INCSI
JMPINPUT
NEXT0:
MOVNUM,SI
MOVBX,NUM
LEASI,STRING
NEXT:
MOVAL,[SI]
CMPAL,30H
JBCOTHER;小于30H是其他字符
CMPAL,3AH
JBECDIGIT;30H-3AH是数字
CMPAL,41H
JBCOTHER;3AH-40H是其他字符
CMPAL,5AH
JBECLETTER;41H-5AH是大写字母
CMPAL,61H
JBCOTHER;5BH-60H是其他字符
CMPAL,7AH
JBECLETTER;61H-7AH是小写字母
;大于7AH是其他字符
COTHER:
INCOTHER
JMPP2
CDIGIT:
INCDIGIT
JMPP2
CLETTER:
INCLETTER
JMPP2
P2:
DECBX
JZOUTPUT
INCSI
JMPNEXT
OUTPUT:
CALLPRIENTER
MOVAH,9;letter
MOVDX,SEGSTR1
MOVDS,DX
MOVDX,OFFSETSTR1
INT21H
MOVBX,LETTER
CALLTOTEN;调用转换为十进制的子程序
CALLPRIENTER;调用换行
MOVAH,9;digit
MOVDX,SEGSTR2
MOVDS,DX
MOVDX,OFFSETSTR2
INT21H
MOVBX,DIGIT
CALLTOTEN
CALLPRIENTER
MOVAH,9;other
MOVDX,SEGSTR3
MOVDS,DX
MOVDX,OFFSETSTR3
INT21H
MOVBX,OTHER
CALLTOTEN
CALLPRIENTER
MOVAH,9;space
MOVDX,SEGSTR4
MOVDS,DX
MOVDX,OFFSETSTR4
INT21H
MOVBX,NUM;找第一个空格的位置
LEASI,STRING
AGAIN:
MOVAL,20H
CMPAL,[SI]
JEP1
DECBX
JZOVER
INCSI
JMPAGAIN
OVER:
MOVPLACE,4EH;4EH为N,找不到输出N
MOVDX,PLACE
MOVAH,2
INT21H
JMPEXIT;退出结束
P1:
INCSI;下标与位置的转换,需加1
MOVPLACE,SI
MOVBX,PLACE
CALLTOTEN
CALLPRIENTER
JMPEXIT
;十进制输出的子程序,小于十六位二进制的数可以输出
;原理是把原数除10000,取值,余数除1000,取值,再次得到的余数
;除100,取值,再将余数除10,取值,取余
TOTENPROCNEAR
CMPBX,0
JGP111
MOVDL,30H
MOVAH,2
INT21H
JMPRETURN
P111:
MOVFLAG,0
MOVDI,10000
P15:
MOVDX,0
MOVAX,BX
DIVDI
MOVBX,DX
MOVDL,AL
CMPDL,0
JEP101
MOVFLAG,1
P102:
ADDDL,30H
MOVAH,2
INT21H
P16:
MOVAX,DI
MOVDX,0
MOVCX,10
DIVCX
MOVDI,AX
CMPDI,0
JGP15
JMPRETURN
P101:
CMPFLAG,0
JEP16
JMPP102
RETURN:
RET
TOTENENDP
PRIENTERPROCNEAR;回车换行
MOVDL,0DH
MOVAH,2
INT21H
MOVDL,0AH
MOVAH,2
INT21H
RET
PRIENTERENDP
EXIT:
MOVAX,4C00H
INT21H
MAINENDP
CODESENDS
ENDSTART
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 分类 统计 字符 个数