汇编分类统计字符个数
【精品文档】汇编语言-统计字符串中的字符个数
prompt2 byte cr, lf, "the string have ", 0 count1 dword 11 dup (?) prompt3 byte ' char',cr, lf, 0 string byte 100 dup (?)
.CODE count
proc near32 push ebp mov ebp, esp
INCLUDE io.h
; header file for input/output
cr
EQU 0dh ; carriage return character
Lf
EQU 0ah ; line feed
.STACK 4096
; reserve 4096-byte stack
.DATA prompt1 byte cr, lf, "Please input your string:",cr, lf,0
实 验 结 果 分 析 及 心 得 体 会
成 绩 评 定
备注:源代码附后,源代码要求有注释说明
教师签名mple assembly language program -- count number of chars in the string ; Author: duchuanhu ; Date: revised 12/08
.386 .MODEL FLAT
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
output prompt2 output count1 + 8 output prompt3
INVOKE ExitProcess, 0 ; exit with return code 0
在一个字符串中,统计大写字母个数,小写字母个数,其他字符个数的四种算法
在⼀个字符串中,统计⼤写字母个数,⼩写字母个数,其他字符个数的四种算法题⽬描述:编写程序,输出字符串中的⼤写字母、⼩写⼩母和其他的个数。
如有⼀个字符串"Helle, This is A test textfile.123456, tannkyou!!",则其⼤写字母个数:3,⼩写字母个数:29,其他字符个数:18.这⾥提供了四种算法,第⼀种是我们⽐较好理解的,也属于硬编码问题,其他三种⽅法要借助JAVA语⾔的jdk提供的api。
⽅法⼀:<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>js分析字符串内容</title><!--实现⼀个函数,输出某字符串⾥有⼏个⼤写字母,⼩写字母,数字,其他符号。
字符串由形参指定 --><script>var str = prompt("请随意输⼊⼤写字母⼩写字母数字及符号等");function analyze(aa){var a = 0;var A = 0;var n = 0;var other = 0;for (var i=0;i<aa.length;i++){var c = aa.substr(i,1); //aa.charAt(i);if (c>='a' && c<='z'){a++;}else if(c>='A' && c<='Z'){A++;}else if(c>='0' && c<='9'){n++;}else{other++;}}document.write("⼩写字母为"+a,"⼤写字母为"+A,"数字为"+n,"其他字符为"+other);}</script></head><body onload="analyze(str)"></body></html>[java]1. //⽅法⼀:在利⽤每个字符的Unicode码在a~z之间,调⽤jdk提2. //供的String类的charAt取出字符串每⼀个字符,逐个进⾏⽐较来判定3.4. class FindLetter {5. public static void main(String[] args) {6. String str = "Helle, This is A test textfile.123456, tannk you!!";7. int upCount = 0;8. int lowCount = 0;9. int otherCount = 0;10.11. for(int i = 0; i < str.length(); i++) {12. char c = str.charAt(i);13. if(c >= 'a' && c <= 'z') {14. lowCount++;15. } else if(c >= 'A' && c <= 'Z') {16. upCount++;17. } else {18. otherCount++;19. }⽅法⼆:[java]1. //⽅法⼆:⽤jdk的Character类的isUpperCase⽅法和isLowerCase⽅法2.3. class FindLetter1 {4. public static void main(String[] args) {5. String str = "Helle, This is A test textfile.123456, tannk you!!";6. int upCount = 0;7. int lowCount = 0;8. int otherCount = 0;9.10. for(int i = 0; i < str.length(); i++) {11. char c = str.charAt(i);12. if(Character.isUpperCase(c)) {13. upCount++;14. } else if(Character.isLowerCase(c)) {15. lowCount++;16. } else {17. otherCount++;18. }19. }20. System.out.println("⼤写字母个数:" + upCount);21. System.out.println("⼩写字母个数:" + lowCount);22. System.out.println("其他字母个数:" + otherCount);23. }24. }⽅法三:[java]1. //⽅法三:先定义两个字符串a到z和A到Z,再逐个取出str字符串中的每个字母,2. //⽤indexOf()⽅法来判断字符是否在这这个定义的字符串中,在⼤写字母这⼀⾏,3. //⼤写字母的计数器就加1,在⼩写字母这⾏,⼩写字母就加⼀,否则其他字母计算器4. //加15.6. class FindLetter2 {7. public static void main(String[] args) {8. String low = "abcdefghijklmnopqrstuvwxyz";9. String up = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";10. int lowCount = 0;11. int upCount = 0;12. int otherCount = 0;13. String str = "Helle, This is A test textfile.123456, tannk you!!";14.15. for(int i = 0; i < str.length(); i++) {16. char c = str.charAt(i);17. if(low.indexOf(c) != -1) {18. lowCount++;19. } else if(up.indexOf(c) != -1) {20. upCount++;21. } else {22. otherCount++;23. }⽅法四:[java]1. //把str分别转化为⼤写和⼩写⼤写⽤sU ⼩写 sL2. //然后通过与原串⽐较来统计个数3.4. class FindLetter3 {5. public static void main(String[] args) {6. String str = "Helle, This is A test textfile.123456, tannk you!!";7. String sU = str.toUpperCase();8. String sL = str.toLowerCase();9. int lowCount = 0;10. int upCount = 0;11. int otherCount = 0;12. for(int i = 0; i < str.length(); i++) {13. char charSTR = str.charAt(i);14. char charSU = sU.charAt(i);15. char charSL = sL.charAt(i);16.17. //如果不是字母,是其他字符,则直接⽤otherCount来计数18. if(Character.isLetter(charSTR)) {19. //如果原串与转换过后的⼤写字母串相等,则原来字符为⼤写字母,20. //若与⼩写字母相等,则为⼩写字母21. if( charSTR == charSU) {22. upCount++;23. } else if(charSTR == charSL) {24. lowCount++;25. }26. } else {27. otherCount++;28. }29. }30.31. System.out.println("⼤写字母个数:" + upCount);32. System.out.println("⼩写字母个数:" + lowCount);33. System.out.println("其他字母个数:" + otherCount);34. }35. }这四种算法都有正确的输出:⼤写字母个数:3⼩写字母个数:29其他字母个数:18。
字符个数计算
字符个数计算计算字符个数的方法可以有多种,具体取决于计算的对象和目的需要。
1.统计单个字符的个数:使用字符串方法count() 可以统计一个字符在字符串中出现的次数。
例如:计算字符串'hello world' 中字符'l' 出现的次数。
代码如下:pythons = 'hello world'count_l = s.count('l')print(count_l)输出结果为:32.统计不同字符的个数:使用set() 方法可以创建一个集合,其中的元素是字符串中的所有不同字符。
例如:计算字符串'hello world' 中不同字符的个数。
代码如下:pythons = 'hello world'unique_chars = set(s)count_unique_chars = len(unique_chars)print(count_unique_chars)输出结果为:103.统计字符串长度:使用len() 函数可以计算字符串的长度,即其中字符的个数(包括空格和标点符号)。
例如:计算字符串'hello world' 的长度。
代码如下:pythons = 'hello world'length = len(s)print(length)输出结果为:11需要注意的是,以上方法只计算了单个字符串的字符个数。
如果需要统计多个字符串中所有字符的总个数,可以使用循环遍历,或者将多个字符串拼接成一个字符串后再进行计算。
例如:pythons1 = 'hello's2 = 'world's3 = '!'s = s1 + s2 + s3 length = len(s) print(length)输出结果为:12。
统计键盘输入字符、数字个数”
“统计键盘输入字符、数字个数”实验报告一、实验目的1、学习循环程序结构,掌握编写循环处理程序的方法和技巧。
2、通过循环结构程序熟悉汇编语言程序设计的主要方法。
3、了解和掌握程序设计过程中算法的选择。
4、掌握汇编语言的调试方法。
二、实验内容从键盘输入一系列字符(每种字符不超过9)并以回车符结束,请统计出字母、数字及其它字符的个数,最后在屏幕上显示计数结果。
三、实验过程1、编写程序,后附程序代码2、测试程序输入四组不同的测试字符串,得到NUMBER值为数字个数,CHAR值为字母个数,REST为符号个数。
三、结果分析和思考结果分析:由测试中可以看出,三种字符显示的个数范围是0~9,大于9之后的就会显示个数的数值加30H之后的数值对应的ASCII码值,这是因为显示个数的时候,我的思路是将个数分别存储在NUMBER,CHAR,REST中,然后显示它们的值加30H后所对应的ASCII码值,因此如果想要显示两位数、三位数的数值,就要在最后输出的时候改变输出的方法,将两位数、三位数的数值输出。
改进思路:先将前面程序计算出的个数三位数放到AL中,然后调用除法指令DIV除以100得到百位数字,而后除以10得到十位数字,和余下的个位数字。
就可以得到000~999显示范围的字符个数。
在调用除法的过程中,被除数在AX中,商在AL中,余数在AH中以数字个数NUMBER为例:MOV AL,NUMBER 将NUMBER送到ALMOV AH,0 ;对应百位MOV BL 100DIV BLMOV BL,AH ;余数在AHMOV AH,2 ;显示最高位(除以100的余数为最高位,存在AH中)ADD AL,30HMOV DL,ALINT 21HMOV AL,BL ;对应十位MOV AH,0MOV BL,10DIV BLMOV BL,AH ;余数在AHMOV AH,2 ;显示中间位(除以10的余数为中间位,存在AH中)ADD AL,30HMOV DL,ALINT 21HMOV DL,BL;对应个位数字ADD DL,30HMOV AH,2 ;显示个位INT 21H四、代码DSEG SEGMENTNUMBER DB 0 ;存储数字个数CHAR DB 0 ;字母个数REST DB 0 ;字符个数STR1 DB 'NUMBER:','$' ;输出提示”NUMBER:”STR2 DB ' CHAR:','$' ;输出提示”CHAR:”STR3 DB ' REST:','$' ;输出提示”REST:”DSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEGMOV DS,AXAGAIN:MOV AH,1INT 21HCMP AL,0DH ;判断字符是否为回车JZ EXIT ;是回车,跳转到结束语句CMP AL,'0' ;不是回车,判断是否大于’0’JNL NEXT1 ;大于‘0’,跳转到NEXT1INC REST ; 小于’0’,是字符,REST自增1JMP AGAIN ;AGAIN循环NEXT1:CMP AL,'9' ;判断是否小于’9’JBE N1 ;小于9,是数字,跳转到N1CMP AL,65;大于9,不是数字,跟’a’比较JNL NEXT2 ;大于’a’,跳转到NEXT2INC REST ;小于’a’,是字符,REST自增1JMP AGAIN;返回循环NEXT2:CMP AL,90 ;跟’z’作比较JBE N2 ;小于’z’,是字母,跳转到N2CMP AL,97 ;大于’z’,跟‘A’比较JNL NEXT3 ;大于’A’跳转到NEST3INC REST ;大于’z’,小于‘A’,是字符,REST自增1 JMP AGAIN ;返回循环NEXT3:CMP AL,122 ;跟’Z’比较JBE N2 ;小于’Z’,是大写字母,跳转到N2INC REST ;不是字母,是字符,REST自增1JMP AGAIN ;返回循环N1:INC NUMBER ;判断为数字,NUMBER自增1JMP AGAIN ;返回循环N2:INC CHAR ;判断为字母,CHAR自增1JMP AGAIN ;返回循环EXIT:LEA DX,STR1MOV AH,09HINT 21H ;显示提示“NUMBER:”MOV DL,NUMBER ;NUMBER送到DLADD DL,30HMOV AH,2INT 21H ;显示NUMBER的值LEA DX,STR2MOV AH,09HINT 21H ;显示提示“CHAR:”MOV DL,CHAR ;CHAR送到DLADD DL,30HMOV AH,2INT 21H ;显示CHAR的值LEA DX,STR3MOV AH,09HINT 21H ;显示提示”REST:”MOV DL,REST ;REST送到DLADD DL,30HMOV AH,2INT 21H ;显示REST的值MOV AH,4CHINT 21H ;程序结束CSEG ENDSEND START。
分类统计字符个数
分类统计字符个数
中文字符指的是汉字、拼音、汉语标点符号等,是构成中文语言的基本单位。
在中文领域,分类统计汉字的数量及其使用情况已有多年的历史,可以为文字记录、语言学研究、数字化技术应用提供重要依据。
首先,统计字符的数目可以有效地记录中文字符数据,以便研究如何使用字符及其使用情况的变化。
从古代开始,就有多种不同的方法用于统计字符数目,但是,近几年来,随着计算机技术和语言学的发展,新的变化也被引入到字符统计中。
例如,通过计算机对文本中的字符进行自动编码,可以准确统计汉字数量。
此外,在统计字符数目时,也可以按照字符的使用频率来分类。
其中,常用字符是指经常使用的汉字,较少使用的汉字称为次常用字符。
这种分类可以有效地了解字符的使用状况。
从类别上看,常用的字符数量一般较多,但次常用字符的使用数量却相对较少。
另外,分类统计字符也可以用来回答一系列关于中文字符使用情况的问题。
例如:有多少汉字总共存在?哪些字符使用最广泛?应该如何改进字符使用方式?等等。
这些问题的解决对于提高中文记录的质量,提升中文数字化技术的应用,以及改善中文字符数据的统计技术具有重要意义。
综上所述,分类统计字符的数量及其使用情况的研究与应用有着非常重要的意义。
它不仅可以有效地记录和统计中文字符数据,还可以回答有关中文字符使用情况的一系列问题。
未来,分类统计字符还
将在中文文字记录、语言学研究、数字化技术应用等方面发挥重要作用。
单元格字符个数统计
建大痞子之精辟讲解单元格字符个数统计一、如果一个单元格中字符个数比较多,怎么去统计其中的字符个数呢。
下面我来为大家讲解一下!1以图1为例2在另外一个单元格B6中输入=len (B3),或者直接选择B3那个单元格也行3然后直接按enter 就行系了,就直接出来字符的个数如图31二如何统计某个单元格中重复的字符个数1还是以上图为例2统计e 的个数,输入=len(B3)-len(substitute(b3,”e ”,”’))3确定即可注意:substitute(b3,”e ”,”’)是指在ertyuiolkjhgfds a1234567!@#$%^&?><"}{|+\中用 一个空值替代 e 。
就等于把e 给去掉了。
32这样用len(substitute()就是计算去掉e之后的字符数目,再用之前的总数目一减就得到了e的数目文- 汉语汉字编辑词条文,wen,从玄从爻。
天地万物的信息产生出来的现象、纹路、轨迹,描绘出了阴阳二气在事物中的运行轨迹和原理。
故文即为符。
上古之时,符文一体。
古者伏羲氏之王天下也,始画八卦,造书契,以代结绳(爻)之政,由是文籍生焉。
--《尚书序》依类象形,故谓之文。
其后形声相益,即谓之字。
--《说文》序》仓颉造书,形立谓之文,声具谓之字。
--《古今通论》(1) 象形。
甲骨文此字象纹理纵横交错形。
"文"是汉字的一个部首。
本义:花纹;纹理。
(2) 同本义[figure;veins]文,英语念为:text、article等,从字面意思上就可以理解为文章、文字,与古今中外的各个文学著作中出现的各种文字字形密不可分。
古有甲骨文、金文、小篆等,今有宋体、楷体等,都在这一方面突出了"文"的重要性。
古今中外,人们对于"文"都有自己不同的认知,从大的方面来讲,它可以用于表示一个民族的文化历史,从小的方面来说它可用于用于表示单独的一个"文"字,可用于表示一段话,也可用于人物的姓氏。
统计字符个数
for(i=0;i<26;i++)
pp[i]=0;
for(i=0;i<m;i++)
for(j=0;j<26;j++)
if((aa[i]-97)==j)
{pp[j]=pp[j]+1;
j=26;}}
3、统计在 tt 字符串中'a'到'z'26个字母各自出现的次数,并存入pp数组。 请考生编写函数
int num(char *ss, char c)
{int i,n=0;
for(i=0;ss[i];i++)
if(ss[i] == c)
n++;
return n;}
5、函数ReadDat()实现从文件IN.DAT中读取一篇英文文章存入到字符串数组xx中;请编制函数CountWord(),找出重复出现次数最多的十个单词,并按它们的出现次数从大到小存入字符串数组yy中,它们各自出现的次数也将依次存放在整数数组nn中,最后调用函数WriteDat()把结果yy和nn输出到文件OUT.DAT中,单词和出现次数之间用“:”分开。原始数据文件的存放格式是:每行的宽度均小于80个字符,每一个单词的长度不大于20,含标点符号和空格。
int num(char *ss,char c)
{int i,cnt;
cnt=0;
for (i=0;i<M;i++)
if (ss[i]==c) cnt++;
return cnt;}
2、下列程序的功能是:统计在tt字符串中'a'到'z'26个字母各自出现的次数,并存入pp数组。请编写函数cnt(char *tt,int pp[])实现程序要求,最后调用函数readwriteDat()把结果输出到文件out.dat中。(注:仅统计小写字母)
从键盘输入一串字符,分别统计其中的字母,数字字符和其他
汇编编程:从键盘输入一串字符,分别统计其中的字母(不区分大小写)、数字字符和其他键盘输入一串字符,统计出其中的数字字符个数,字母字符(不区分大小写)个数,其他字符个数,并显示出这三类统计结果(输入字符串以回车结束),可连续对多个字符串统计,用户输入N时退出程序。
要求:题目分析(如何实现,以及实现的关键技术或步骤)2.要有流程图3.写出程序代码4.写出上机操作步骤,给出输入的数据及程序运行结果。
; 题目名称:分类统计字符; 题目来源:/question/131013276.html; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。
Code SegmentAssume CS:Code,DS:Code; -------------------------------------; 功能:显示指定地址(Str_Addr)的字符串; 入口:; Str_Addr=字符串地址(要求在数据段); 用法: Output Str_Addr; 用法举例:Output PromptStrOutput MACRO Str_Addrlea dx,Str_Addrmov ah,9int 21hEndM; -------------------------------------; 功能:在当前光标位置显示一个字符; 入口:dl=要显示的字符Output_Chr proc Nearpush axmov ah,02hint 21hpop axretOutput_Chr Endp; -------------------------------------; 功能:显示、输出一个回车、换行Output_CTLF proc Nearpush axpush dxmov ah,02hmov dl,0dhint 21hmov dl,0ahint 21hpop dxpop axretOutput_CTLF Endp; -------------------------------------; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示; 入口:AX=二进制数; 出口:在当前光标位置显示转换后的ASCII码数字Unsi_Dec_ASCII Proc Nearpush dxpush bxpush dimov bx,10lea di,@@Temp_Save[5]mov BYTE PTR [di],'$'dec dicld@@Divide: xor dx,dxdiv bxor dl,30hmov [di],dldec ditest ax,axjnz @@Divideinc dipush dipop dxmov ah,9int 21hpop dipop bxpop dxret@@Temp_Save db 6 dup(?)Unsi_Dec_ASCII EndP; -------------------------------------; 功能:键盘输入一个字符,若输入的是'y'或'n'(不分大小写),则显示并返回; 入口:无; 出口:若输入的是'y',进位标志置位;若输入的是'n',进位标志复位。
汇编实验三报告 分类统计字符个数COUNT_CHAR
计算机学院计算机科学与技术专业8 班学号姓名协作者_________ 教师评定_________________实验题目实验用2.3分类统计字符个数COUNT_CHAR一、实验目的与要求学习用汇编语言编写与设计分支循环程序。
题目:分类统计字符个数COUNT_CHAR二、实验内容程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字及其它字符分类计数,然后将结果存入以letter、digit和other 为名的存储单元中。
三、程序代码;******************************************Data segmentstring1 db 'Input your string:$'string2 db 'Digit:$'string3 db 'Letter:$'string4 db 'Other:$'Digit db 0Letter db 0Other db 0data ends;*******************************************prognam segment;-----------------------------------------------------------------main proc farassume cs:prognam,ds:datastart:push ds ;保留现场sub ax,axpush axmov ax,datamov ds,axlea dx,string1 ;输出string1mov ah,9int 21hmov c x,80L1:mov ah,1 ;输入字符int 21hcmp al,0dh ;若是回车则结束jz overcmp al,30h ;若小于30h(0)则others+1jb otherscmp al,39h ;若大于39h(9)则跳转L2继续比较ja L2jmp digits ;否则digits+1L2:cmp al,41h ;若小于41h(A)则others+1jb otherscmp al,5ah ;若大于5ah(Z)则跳转L3继续比较ja L3jmp letters ;否则letters+1L3:cmp al,61h ;若小于61h(a)则others+1jb otherscmp al,7ah ;若大于7ah(z)则others+1ja othersjmp letters ;否则letters+1digits:inc digitjmp over1others:inc otherjmp over1letters:inc letterjmp over1over1:loop L1over:call e ndlinelea dx,string2 ;输出string2mov ah,9int 21hsub ax,axmov al,digitcall displaycall e ndlinelea dx,string3 ;输出string3mov ah,9int 21hsub ax,axmov al,lettercall d isplaycall e ndlinelea dx,string4 ;输出string4mov ah,9int 21hsub ax,axmov al,othercall d isplayretmain endp;------------------------------------------------------------------------------ endline proc near ;输出回车与换行mov ah,2mov dl,0ahint 21hmov ah,2mov dl,0dhint 21hretendline endp;----------------------------------------------------------------------------------- display proc near ;输出结果mov dl,aladd dl,30h ;0的ascii码是30mov ah,2int 21hretdisplay endp;--------------------------------------------------------------------------------------- prognam ends;********************************************************* end s tart四、运行结果附录:由于这个实验一开始做错了题目,实验课上机检查是检查了该程序实验2.2查找匹配字符串程序代码:;---------------------------------------------newline macro ;回车换行的宏定义mov ah, 02hmov dl, 0dhint 21hmov ah, 02hmov dl, 0ahint 21hendm;------------------------------------------------data segmentmaxlenk db 8 ;关键字的最大长度factlenk db ? ;关键字的实际长度keyword db 8 dup(?) ;关键字的存储maxlens db 32 ;字符串的最大长度factlens db ? ;字符串的实际长度sentence db 32 dup(?) ;字符串的存储info1 db 'Enter Keyword:$'info2 db 'Enter Sentence:$'mess0 db 'Match at location:$'mess1 db 'No match.$'mess2 db ?,?,'H of the sentence.$'data ends;------------------------------------------------------stack segment stackstack ends;------------------------------------------------------code segment;------------------------------------------------------main proc farassume cs:code, ds:data, es:data, ss:stackstart:push dssub ax, axpush axmov ax, datamov ds, axmov es, axmov ah, 09h ;输出字符串信息lea dx, info1int 21hmov ah, 0ah ;输入关键字lea dx, maxlenkint 21hbegin:newlinemov ah, 09hlea dx, info2int 21hmov ah, 0ah ;输入字符串lea dx, maxlensint 21hnewlinelea si, keyword ;关键字的首地址赋予silea bx, sentence ;字符串的首地址赋予bxlea di, sentence ;字符串的首地址赋予dimov dl, 00h ;对dl清零cld ;方向标志位清零,字符串地址递增again:mov cl, factlenkrepz cmpsbjz matchmov al, factlenssub al, factlenkjs next1inc allea si, keywordinc bxmov di, bxinc dxcmp dl, aljl againnext1:lea dx, mess1mov ah, 09hint 21hjmp beginmatch:lea dx, mess0mov ah, 09hint 21hmov ax, bxlea bx, sentencesub ax, bxmov bx, 0001hadd ax, bxand ax, 00ffhxchg ax,bxmov ch, 2rotate:mov cl,4hrol bl,clmov al,bland al,0fhadd al,30hcmp al,3ahjl printadd al,7hprint:mov ah,02hmov dl,alint 21hdec chjnz rotatemov ah,09hlea dx,mess2int 21hjnl beginretmain endpcode endsend start运行结果:。
IBM-PC汇编语言程序实验报告
华北电力大学实验报告名称:汇编语言程序设计综合实验院系:信息工程系班级:网络工程10k1 学号:学生姓名:指导教师:设计天数:成绩:日期:年月日实验一用表格形式显示ASCII字符一、实验说明:按15行X16列的表格显示表示ASCII码为10H—100H的所有字符,即以行为主的顺序及ASCII码递增的次序一次显示对应的字符。
每16个字符为一行,每行中的相邻来那个字符之间用空白(ASCII为0)隔开。
(1)显示每个字符可使用功能号为02的现实输出功能调用,使用方法如下:mov ah,02hmov dl,输出字符的ASCII码int 21h本题中可把dl初始化为10H,然后不断使其加1(用INC指令)以取得下一个字符的ASCII码。
(2)显示空白符时,用其ASCII码置入dl寄存器。
每行结束时,用显示回车(ASCII为0dh)和换行符(ASCII为0ah)来结束本行并开始下一行。
(3)由于逐个显示相继的ASCII字符时,需要保存并不断修改dl寄存器的内容,而现实空白、回车、换行符时也需要使用dl寄存器,为此可使用堆栈来保存相机的ASCII字符。
具体使用方法:在显示空白或回车、换行符前用指令push dx把dl的内容保存到堆栈中去。
在现实空白或回车、换行符后用指令pop dx恢复dl寄存器的原始内容。
二、程序代码:code segmentassume cs:codestart:mov dx,0010h ;初值为10hnext:mov cx,0010h ;16列loop1:mov ah,02h;int 21h ;显示输出dl字符inc dx ;dx加1push dx ;把dx推进栈保存mov dl,0 ;显示空白符int 21hpop dx ;把dx之前的数取回来loop loop1 ;当cx=0时会自动跳出loop1循环push dx ;保存dx的数,即为了保存ascii码mov dl,0ah ;显示回车int 21h ;02的显示输出功能调用mov dl,0dh ;显示换行符int 21hpop dx ;把dx之前的数取回来cmp dx,100h ;最后的字符的ascii码为100h,相比较jb next ;小于时就跳会nextmov ah,4ch ;带返回码终止int 21hcode endsend start三、运行结果实验二查找匹配字符串一、实验说明程序接受用户键入的一个关键字以及一个句子。
分类统计各类字符个数解题思路
分类统计各类字符个数解题思路
解题思路可以分为以下几个步骤:
1. 数据预处理:首先,我们需要对原始数据进行预处理,包括去除无关字符、统一字符编码等。
这样可以确保我们的统计结果是准确的。
2. 定义字符类别:我们需要明确哪些字符属于同一类别。
例如,我们可以将字母、数字、标点符号等分别定义为不同的类别。
3. 遍历字符串:接下来,我们需要遍历整个字符串,对每个字符进行分类。
我们可以使用一个字典来记录每个类别的字符数量。
4. 计数与统计:在遍历过程中,如果当前字符属于某个类别,我们就将该类别的计数器加一。
这样,遍历结束后,我们就可以得到每个类别的字符数量。
5. 输出结果:最后,我们将统计结果输出。
这可以是一个列表、表格或者任何其他形式,取决于具体的需求。
下面是一个简单的Python代码示例,用于统计一个字符串中字母和数字的数量:
总结:
解题的关键在于对字符串进行适当的预处理,并定义清晰的字符类别。
通过遍历字符串并使用字典来记录每个类别的字符数量,我们可以快速得到统计结果。
最后,根据需求选择合适的输出形式。
用汇编语言实现字符统计算法
上海电力学院实验报告计算机硬件实验课程题目:字符统计算法的实现班级:姓名:学号:一、实验目的通过实验,掌握MASM工具调试汇编程序、熟悉DOS功能调用。
二、实验要求从键盘输入一系列字符,以回车符结束,编程统计其中非数字字符的个数。
三、实验内容程序首先调用DOS 功能的1号功能,从键盘输入字符。
为得到字符串,可以采用循环结构,连续输入。
在输入的过程中通过判断是否是回车来结束输入。
其中回车的ASII 码(0DH)。
数字的0的ASII码(30H)9的(39H)。
四、流程图Next1函数:Next函数:Exit函数:五、实验设计与实现1)编写实验程序如下data segmentbuf db 20h dup(?)cnt db ?data endscode segmentassume cs:code,ds:datastart: mov ax,datamov ds,axlea si,buf si指向buf首单元mov dl,0 记数器DL清零next1:mov ah,1 从键盘输入一个字符int 21hmov buf,al 输入字符送缓冲区inc sicmp al,0dHje exit 输入回车键转exitcmp al,30hjae next 输入字符的ASII码大于等于30h转next inc dl 否则记数器加1next: cmp al,39hjbe next1inc dljmp next1exit: add dl,30h 将dl变成ASCⅡ码mov ah,2 调用单字符输出功能int 21hmov ah,4chint 21h 退出,返回到doscode endsend start2)输入为abc123,结果输出为3(此时为无回显输入)图2-13)输入为abc123,输出结果也为3(此时有回显输入),输出结果替代了第一位置的1。
因此最后采用了无回显的功能。
图2-2。
从键盘输入一串字符_分别统计其中的字母_数字字符和其他
汇编编程:从键盘输入一串字符,分别统计其中的字母(不区分大小写)、数字字符和其他键盘输入一串字符,统计出其中的数字字符个数,字母字符(不区分大小写)个数,其他字符个数,并显示出这三类统计结果(输入字符串以回车结束),可连续对多个字符串统计,用户输入N时退出程序。
要求:题目分析(如何实现,以及实现的关键技术或步骤)2.要有流程图3.写出程序代码4.写出上机操作步骤,给出输入的数据及程序运行结果。
; 题目名称:分类统计字符; 本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。
Code SegmentAssume CS:Code,DS:Code; -------------------------------------; 功能:显示指定地址(Str_Addr)的字符串; 入口:; Str_Addr=字符串地址(要求在数据段); 用法: Output Str_Addr; 用法举例:Output PromptStrOutput MACRO Str_Addrlea dx,Str_Addrmov ah,9int 21hEndM; -------------------------------------; 功能:在当前光标位置显示一个字符; 入口:dl=要显示的字符Output_Chr proc Nearpush axmov ah,02hint 21hpop axretOutput_Chr Endp; -------------------------------------; 功能:显示、输出一个回车、换行Output_CTLF proc Nearpush axpush dxmov ah,02hmov dl,0dhint 21hmov dl,0ahint 21hpop dxpop axretOutput_CTLF Endp; -------------------------------------; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示; 入口:AX=二进制数; 出口:在当前光标位置显示转换后的ASCII码数字Unsi_Dec_ASCII Proc Nearpush dxpush bxpush dimov bx,10lea di,@@Temp_Save[5]mov BYTE PTR [di],'$'dec dicld@@Divide: xor dx,dxdiv bxor dl,30hmov [di],dldec ditest ax,axjnz @@Divideinc dipush dipop dxmov ah,9int 21hpop dipop bxpop dxret@@Temp_Save db 6 dup(?)Unsi_Dec_ASCII EndP; -------------------------------------; 功能:键盘输入一个字符,若输入的是'y'或'n'(不分大小写),则显示并返回; 入口:无; 出口:若输入的是'y',进位标志置位;若输入的是'n',进位标志复位。
汇编语言-统计字符串中的字符个数
汇编语言-统计字符串中的字符个数前言计算机语言的层次可以分为机器语言、汇编语言、高级语言等等。
在这些语言中,汇编语言是最接近于计算机硬件的一种语言,是二进制代码的直接书写形式。
虽然比机器语言更容易编写阅读,但汇编语言的学习和编写难度仍然比较大。
本篇文章将介绍在汇编语言中统计字符串中的字符个数的方法。
一、问题描述二、思路分析我们可以遍历这个字符串中的每一个字符,然后对每一个字符统计一次,最终就可以得到所有字符的总数。
在这个过程中需要注意以下几点:- 字符串的结束符,在C语言中,字符串以'\0'结尾,所以在统计字符串中字符个数的时候使用'cmpb $0, (%esi)'进行循环终止,因为字符串最后一个字符存放的是'\0'结束符。
- 字符串中可能含有同一个字符,所以在统计字符个数的时候,需要判断是否之前已经计算过了。
- 由于一个字符在ASCII码表中的值为0~255,这个范围有256个数,所以我们可以定义一个数组,将字符串中每个字符出现的次数存储在数组中。
三、具体实现下面是通过AT&T语法实现的代码。
.section .data ; 数据段str: .string "hello world ! This is a test." ; 字符串定义.section .bss ; 未初始化数据段count: .zero 256 ; 定义长度为256的数组,存放每个字符出现的次数.section .text ; 文本段.globl _start ; 入口标记_start:mov $str, %esi ; esi寄存器指向字符串地址xor %eax, %eax ; eax寄存器初始化为0.CountChar:cmpb $0, (%esi) ; 判断结束,碰到'\0'je EndCountmov (%esi), %al ; 从esi指向的地址取出一个字符,赋给al cmp $count, %al ; 比较字符是否越界jae NotLetteradd $1, count(%eax) ; 字符出现次数加1.NotLetter:add $1, %esi ; 下一个字符jmp CountChar.EndCount:mov $0, %ebx.Print:cmp $255, %ebx ; 假如循环到了255个字符,输出结果je EndPrintmov %bl, %bh ; 蓝色变红色mov count(%ebx), %ecx ; ecx中存放当前字符出现的次数cmp $0, %ecx ; 判断字符是否出现过jnz PrintChar ; 如果出现过,直接输出inc %ebxjmp Print.PrintChar:mov $4, %eax ; 输出mov $1, %ebx ; 标准输出mov $count(%ebx, %eax, 4), %ecx ; 取出次数 mov $1, %edx ; 字符个数mov $ebx, %eax ; 该字符的ASCII码add $48, %eax ; 将ASCII码转换为字符int $0x80 ; 输出字符mov $':', %al ; 输出':'int $0x80mov $ecx, %eax ; 输出次数xor %ebx, %ebxxor %ecx, %ecxmov $10, %ebx.Div:xor %edx, %edxdiv %ebxpush %edxcmp $0, %eax ; 进行取模除法jne DivPrintInt:pop %eaxadd $48, %eax ; 将ASCII码转换为字符int $0x80cmp $0, %esp ; 判断栈是否已经空了jne PrintInt ; 如果栈不为空,继续输出字符 mov $10, %al ; 输出换行符int $0x80 ; 停止程序.EndPrint:mov $1, %eax ; 退出xor %ebx, %ebxint $0x80.end _start四、总结统计字符串中字符个数是初学者熟悉汇编语言的一个适合练手的例子,可以对汇编语言的运行过程和寄存器的使用有一个较为直观的认识。
c语言字符个数统计长字符串中不同字符数
C语言字符个数统计长字符串中不同字符数一、概述在日常的软件开发过程中,经常需要对字符串进行操作和统计。
而在C语言中,统计长字符串中不同字符的个数是一个比较常见的需求。
本文将介绍如何使用C语言来实现对长字符串中不同字符的个数进行统计,并给出具体的代码实现。
二、问题分析在统计长字符串中不同字符的个数时,需要考虑以下几个问题:1. 如何定义和表示长字符串?2. 如何遍历字符串并进行字符的统计?3. 如何判断一个字符是否已经统计过?针对以上问题,我们将一一进行讨论并给出相应的解决方案。
三、定义和表示长字符串在C语言中,可以使用字符数组来表示长字符串。
例如:```cchar str[] = "hello, world!";```上述代码定义了一个名为str的字符数组,其中存储了长字符串"hello, world!"。
在实际的开发中,可以根据需要对字符数组进行动态分配内存,并使用指针来表示长字符串。
四、遍历字符串并进行字符的统计遍历字符串可以使用循环结构来实现,通过逐个访问字符串中的字符并进行相应的处理来实现对字符串的遍历。
在遍历字符串的过程中,可以使用一个哈希表或者数组来统计每个字符出现的次数。
```cint count[256] = {0}; // 假设字符串中只包含ASCII字符for (int i = 0; str[i] != '\0'; i++) {count[str[i]]++;}```上述代码中,我们定义了一个长度为256的整型数组来统计每个字符出现的次数。
通过遍历字符串str,更新count数组中相应字符的统计次数。
五、判断一个字符是否已经统计过为了判断一个字符是否已经统计过,我们可以使用一个标记数组来记录字符是否已经出现过。
例如:```cint visited[256] = {0}; // 假设字符串中只包含ASCII字符for (int i = 0; str[i] != '\0'; i++) {if (visited[str[i]] == 0) {visited[str[i]] = 1;// 统计不同字符的个数}}```上述代码中,我们定义了一个长度为256的整型数组visited来记录字符是否已经出现过。
字符串统计数字字符个数
字符串统计数字字符个数
数字在我们生活中无处不在,无论是电话号码、银行账户、还是社交媒体上的粉丝数量,数字都扮演着重要的角色。
在我们的日常交流中,数字字符也是不可或缺的一部分。
那么,让我们来探讨一下数字字符在字符串中的重要性吧。
首先,让我们来统计一下字符串中数字字符的个数。
数字字符包括0到9这10个字符,我们可以通过遍历字符串的每个字符,然后判断是否为数字字符来实现统计。
在计算机编程中,这是一项基本的操作,可以帮助我们处理各种数据。
数字字符的个数不仅仅是一个抽象的概念,它还可以帮助我们分析数据的特征。
比如,在处理文本数据时,我们可以通过统计数字字符的个数来分析文本中的数字信息,这对于金融、医疗等领域的数据处理非常重要。
此外,数字字符的个数还可以帮助我们验证数据的有效性。
在输入身份证号、银行卡号等信息时,我们可以通过统计数字字符的个数来验证输入的信息是否符合规范,从而提高数据的准确性和安全性。
总的来说,数字字符在字符串中的个数不仅仅是一个简单的统计问题,它还涉及到数据分析、数据验证等多个方面。
因此,我们应该重视数字字符在字符串中的重要性,善于运用它们来处理和分析各种数据。
希望大家在日常生活和工作中都能充分利用数字字符的统计信息,让数据处理更加高效和准确。
华北电力大学汇编实验报告
华北电力大学实验报告||实验名称汇编语言程序设计实验课程名称IBM-PC汇编语言程序设计||专业班级:计科1103 学生姓名:李庆贺学号:201109010307 成绩:指导教师:王保义实验日期:1月实验一用表格形式显示字符一、实验要求按15*16列的表格形式显示ASCⅡ码为10H—100H的所有字符,即以行为主的顺序及ASCⅡ码递增的次序依次显示对应的字符。
每16个字符为一行,每行中的相邻两个字符之间用空白符隔开。
二、设计说明(1)显示每个字符可使用功能号为02的显示输出功能调用:Mov ah,02hMov dl,输出字符的ASCⅡ码Int 21h将dl初始化为10H,然后使用其加1以取得下一个字符的ASCⅡ码。
(2)显示空白符是,用其ASCⅡ码置0入dl寄存器。
每行结束时,用回车和换行来结束本行并开始下一行。
(3)由于逐个显示相继的ASCⅡ码字符是,需要不断修改dl寄存器的内容,而显示空白、回车、换行也需要使用dl寄存器,为此可使用堆栈保存dx。
三、实验程序及调试结果prognam segmentmain proc farassume cs:prognamstart:mov ah, 02hmov dl, 10h ;设置初始输出为ASCII的10hmov bl, 15 ;输出显示为15行e:mov cx, 16;设置循环次数,16,表示输出显示为16列l:int 21h ;显示输出push dx ;推入堆栈mov ah, 02hmov dl, 0int 21hmov ah, 02hmov dl, 0int 21h ;显示空白符pop dx ;将栈顶元素推出inc dl ;设置下一个元素loop l ;循环输出每行的16个ASCII元素push dx ;将下一行的首元素推入堆栈mov ah, 02h华 北 电 力 大 学 实 验 报 告- 3 -mov dl, 0dhint 21hmov ah, 02hmov dl, 0ahint 21h ;输出换行pop dx ;将栈顶元素推出dec blcmp bl, 0 ;比较确定是否已经输出15行元素jne e ;若还未完成输出,则跳转至e ,继续进行下一行元素的输出je exit ;否则退出程序exit:mov ax, 4c00hint 21hmain endpprognam endsend; start实验二 查找匹配字符串一、 实验要求程序接受用户键入的一个关键字以及一个句子,如果句子中不包含关键字则显示“No match!”;如果句子中包含关键字则显示“match!”,且把该字在句子中的位置用十六进制数显示出来。
6-3统计字符串中各类字符个数
/*第6次作业第六章控制结构综合程序设计---6-3统计字符串中各类字符个数5.【问题描述】输入一行字符,统计其中英文字母、空格、数字和其他字符的个数。
【输入形式】输入一行字符。
【输出形式】输出各类字符串的个数。
【样例输入1】(下划线部分为键盘输入,其余部分为程序输出)Programming is fun!【样例输出】letter=16,blank=2,digit=0,other=1【样例输入2】(下划线部分为键盘输入,其余部分为程序输出)13 is a luck digit【样例输出】letter=12,blank=4,digit=2,other=0【样例说明】输入的数据之间以一个空格相隔。
英文字母区分大小写。
必须严格按样例输入输出。
*/#include<stdio.h>int main(void){int letter=0,blank=0,digit=0,other=0;char ch;while((ch=getchar())!='\n'){if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))letter++;else if(ch>='0'&&ch<='9')digit++;else if(ch==' ')blank++;elseother++;}printf("letter=%d,blank=%d,digit=%d,other=%d",letter,blank,digit,other);return 0;}。
汇编语言程序设计实验报告
实验报告实验名称汇编语言程序设计||专业班级:信息安全学号:姓名:实验一汇编语言上机过程和Debug常用调试命令一.实验目的:学习程序设计的基本方法和技能,熟练掌握用汇编语言设计、编写、调试和运行程序的方法。
二.实验题目:熟悉与实验有关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。
在调试过程中,学习及掌握debug程序的各种操作命令。
三.问题描述:试编写一程序:比较两个字符串string1和string2所含的字符是否相同,若相同则显示‘match’; 否则,显示‘no match’。
四.方法说明:a) 使用ws、tc或EDIT编辑程序来建立源文件,然后存盘,使系统返回DOS。
b) 用汇编程序masm(或asm)对源文件汇编产生目标文件obj如:汇编指示出错则需重新调用编辑程序修改错误,直至汇编通过为止。
c) 用连接程序link 产生执行文件EXE.d) 执行程序,可直接从DOS执行程序。
e) 使用debug程序调试程序的方法。
五.实验步骤:1.调用字处理程序EDIT 建立以sample.asm文件datarea segmentstring1 db ‘move the cursor backward.’string2 db ‘move the cursor backward.’mess1 db ‘Match..’,13,10,’$’mess2 db ‘No match!..’,13,10,’$’datarea endsprognam segmentmain proc farassume cs:prognam,ds:datarea,es:datarea start:push dssub ax,axpush axmov ax,datareamov ds,axmov es,axlea si,string1lea di,string2cldmov cx,25repz cmpsbjz matchlea dx,mess2jmp short dispmatch:lea dx, mess1disp:mov ah,09int 21hretmain endpprognam endsend start2.对源文件汇编产生目标文件obj D:\masm 文件名。
计算各类型字符个数有一篇文章共有3行文字每行小于80个字符要求分别统计出其
计算各类型字符个数有一篇文章共有3行文字每行小于80个字符要求分别统计出其各类型字符的个数,包括字母、数字、空格和其他字符。
首先,我们需要获得文章的文本内容。
我们假设文章的内容如下:```This is a sample text.```然后,我们可以按照以下步骤计算各类型字符的个数:1.定义一个字母计数器,初始值为0。
2.定义一个数字计数器,初始值为0。
3.定义一个空格计数器,初始值为0。
4.定义一个其他字符计数器,初始值为0。
5.对于每一行文字:-遍历每个字符。
-如果字符是字母,则字母计数器加1-如果字符是数字,则数字计数器加1-如果字符是空格,则空格计数器加1-如果字符既不是字母也不是数字也不是空格,则其他字符计数器加16.输出字母计数器、数字计数器、空格计数器和其他字符计数器的值。
根据以上步骤,我们可以使用Python实现如下代码:```pythontext = '''This is a sample text.letter_count = 0number_count = 0space_count = 0other_count = 0for line in text.split('\n'):for char in line:if char.isalpha(: # 判断字符是否是字母letter_count += 1elif char.isdigit(: # 判断字符是否是数字number_count += 1elif char.isspace(: # 判断字符是否是空格space_count += 1else:other_count += 1print("字母个数:", letter_count)print("数字个数:", number_count)print("空格个数:", space_count)print("其他字符个数:", other_count)```运行以上代码,输出结果如下:```字母个数:17数字个数:10空格个数:3其他字符个数:9```所以,根据给定的文章内容,字母个数为17,数字个数为10,空格个数为3,其他字符个数为9。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分类统计字符个数
一、实验目的
通过编程实现字符进行分类统计。
利用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:
MOV AH,1
INT 21H ;输入一个字符,存到AL
CMP AL,0DH ;判断是否是回车
JE NEXT0 ;是回车输入就结束
MOV STRING[SI],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 ; 41H-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
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 ;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 ;退出结束
INC SI ;下标与位置的转换,需加1
MOV PLACE,SI
MOV BX,PLACE
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
P102:
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
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。