汇编分类统计字符个数

合集下载

【精品文档】汇编语言-统计字符串中的字符个数

【精品文档】汇编语言-统计字符串中的字符个数

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等,从字面意思上就可以理解为文章、文字,与古今中外的各个文学著作中出现的各种文字字形密不可分。

古有甲骨文、金文、小篆等,今有宋体、楷体等,都在这一方面突出了"文"的重要性。

古今中外,人们对于"文"都有自己不同的认知,从大的方面来讲,它可以用于表示一个民族的文化历史,从小的方面来说它可用于用于表示单独的一个"文"字,可用于表示一段话,也可用于人物的姓氏。

统计字符个数

统计字符个数
m=strlen(aa);
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',进位标志复位。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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。

相关文档
最新文档