汇编分类统计字符个数.docx

上传人:b****4 文档编号:3270452 上传时间:2022-11-21 格式:DOCX 页数:8 大小:217.78KB
下载 相关 举报
汇编分类统计字符个数.docx_第1页
第1页 / 共8页
汇编分类统计字符个数.docx_第2页
第2页 / 共8页
汇编分类统计字符个数.docx_第3页
第3页 / 共8页
汇编分类统计字符个数.docx_第4页
第4页 / 共8页
汇编分类统计字符个数.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

汇编分类统计字符个数.docx

《汇编分类统计字符个数.docx》由会员分享,可在线阅读,更多相关《汇编分类统计字符个数.docx(8页珍藏版)》请在冰豆网上搜索。

汇编分类统计字符个数.docx

汇编分类统计字符个数

汇编分类统计字符个数

部门:

xxx

时间:

xxx

 

整理范文,仅供参考,可下载自行编辑

分类统计字符个数

1、实验目的

通过编程实现字符进行分类统计。

利用DOS功能调用INT21H的10<0Ah)号功能,掌握进行键盘输入字符串的方法以及数据区设置。

掌握8086指令:

CMP、JB、JA、SHL、INC、LEA、INT、JNZ、SCASB、LOOPE/LOOPNE等。

b5E2RGbCAP

2、实验内容

1、编写一个程序实现将数据段中存储在STRING处到NUM处的字符串进行分类统计,然后将结果存入以letter、digit和other为名的存储单元中。

查找字符串STRING中是否有空格,如有找出第一个出现的位置<先用十六进制显示,后修改为十进制显示),否则输出N。

p1EanqFDPw

2、修改前述1的程序,实现从键盘输入一个以回车键作为结束符的字符串<字符个数不超过80个),存入BUF中,分类统计BUF中字符串,将结果存入以letter、digit和other为名的存储单元中,屏幕输出大小写字母个数、数字个数和其它字符个数,并查找字符串BUF中是否有空格,如有找出第一个出现的位置<用十进制显示),否则输出N。

<对有余力的同学)DXDiTa9E3d

实验结果:

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

3、分析与体会

本次实验我花了较长的时间来完成。

初略的程序花了5个多小时完成。

后来遇到转换为十进制的时候就卡住了。

后来在第六周周三的时候听了课以后才会做。

RTCrpUDGiT

第一个代码很长,有340多行代码。

其实核心代码不多。

主要是每一次转换为16进制以及10进制的时候,重复了相同的代码。

还有换行也重复了几次。

5PCzVD7HxA

第二个代码不同的是自己输入字符。

我自学了子程序。

然后把转换为10进制和输出换行设置成了子程序。

精简了代码。

jLBHrnAILg

4、代码

键盘输入字符串,分类统计

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

申明:

所有资料为本人收集整理,仅限个人学习使用,勿做商业用途。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1