汇编实验三:分类统计字符个数
- 格式:doc
- 大小:45.50 KB
- 文档页数:4
实验一:简单程序设计实验(1)编写一个32 位无符号数除法的程序,要求将存放在NUM1 中的32 位无符号数与存放在NUM2 中的16 位无符号数相除,结果存放在程序流程图略。
参考源程序:NUM1 DD 2A8B7654HNUM2 DW 5ABCHNUM3 DW ?NUM4 DW ?ASSUME DS:DATA, CS:CODE;数据段寄存器初始化MOV AX, WORD PTR NUM1MOV DX, WORD PTR NUM1+2DIV NUM2MOV NUM3,AXMOV NUM4,DXEND START(2)编写一个拆字程序。
要求将存放在ARY 单元的2 位十六进制数X1X2 拆为X1 和X2 两部分,并以0X1 和0X2 的形式分别存入ARY+1 和ARY+2 单元中。
程序流程图略。
参考源程序:DATA SEGMENTARY DB 2AH,?,?DATA ENDSCODE SEGMENTASSUME DS:DATA, CS:CODESTART:MOV AX,DATAMOV DS,AXMOV SI,OFFSET ARY MOV AL,[SI] ;取ARY 的偏移地址;取16进制数至ALNUM3 和NUM4 中。
DATA SEGMENTDATA ENDS CODE SEGMENTSTART: MOV AX,DATAMOV DS,AXCODE MOV AH,4CHINT 21HENDS;正常返回DOS 系统MOV BL,ALAND AL,0F0H;取16进制数的高四位,即X1SHR AL,4MOV [SI+1],AL ;存0X1 MOV AL,BLAND AL,0FH; 取16 进制数的低四位,即X2MOV [SI+2],AL ;存0X2MOV AH,4CHINT 21HENDSEND STARTCODE实验二:分支程序设计实验(1)编写一个字符比较程序,比较 3 个无符号字节数 A ,B ,C 的大小,并根据比较结果 对变量 K 赋值:如果 3 个数不相等,则 K=0 ; 如果 3 个数中有两个相等,则 K=1 ; 如果 3 个数都相等,则 K=2 。
汇编:统计输入字符串内的数字个数(最多三位数0—256);This is made by wq;编程从键盘读入不超过256 个字符的字符串;;编程统计其中数字的个数,并将结果在屏幕上输出。
;经进一步完善(能输出三位数啦)DATAS SEGMENT sum db 00h ;累加器string db 256 dup(0dh);存放字符tital db This program is made by wq.,0dh,0ah db It is used to calculater the amout of the number in the string ,0dh,0ah,$ tital1 db PLease input the string: ,$ overs db Amout of the nember is : ,$ tital2 db Do you want to have a try again(if yes,input “y” else “n”) : ,0dh,0ah, $ tital3 db Welcome to use this program again,$ kongzi db 0dh,0ah,$ result db 256 dup(?)DATAS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATASSTART: MOV AX,DATAS MOV DS,AX mov ax,offset tital;输出抬头mov dx,ax mov ah,09h int 21hmain: lea dx,kongzi mov ah,09h int 21h lea dx,tital1 ;输出抬头1 mov ah,09h int 21h mov si,0 mov ax,offset string mov dx,axagain: ;输入字符mov ah,01h int 21h cmp al,0dh jz then mov string[si],al inc si jmp again ;输入完毕then: ;传输mov di,0 mov si,0 mov bl,0exchang: ;判断字符的性质lea dx,string cmp string[si],0dh jz over cmp string[si],30h jnb next inc si dec cx jmp exchangnext: mov al,string[si] cmp string[si],39h jbe calculator inc si dec cx jmp exchangtips:感谢大家的阅读,本文由我司收集整编。
分类统计字符个数
中文字符指的是汉字、拼音、汉语标点符号等,是构成中文语言的基本单位。
在中文领域,分类统计汉字的数量及其使用情况已有多年的历史,可以为文字记录、语言学研究、数字化技术应用提供重要依据。
首先,统计字符的数目可以有效地记录中文字符数据,以便研究如何使用字符及其使用情况的变化。
从古代开始,就有多种不同的方法用于统计字符数目,但是,近几年来,随着计算机技术和语言学的发展,新的变化也被引入到字符统计中。
例如,通过计算机对文本中的字符进行自动编码,可以准确统计汉字数量。
此外,在统计字符数目时,也可以按照字符的使用频率来分类。
其中,常用字符是指经常使用的汉字,较少使用的汉字称为次常用字符。
这种分类可以有效地了解字符的使用状况。
从类别上看,常用的字符数量一般较多,但次常用字符的使用数量却相对较少。
另外,分类统计字符也可以用来回答一系列关于中文字符使用情况的问题。
例如:有多少汉字总共存在?哪些字符使用最广泛?应该如何改进字符使用方式?等等。
这些问题的解决对于提高中文记录的质量,提升中文数字化技术的应用,以及改善中文字符数据的统计技术具有重要意义。
综上所述,分类统计字符的数量及其使用情况的研究与应用有着非常重要的意义。
它不仅可以有效地记录和统计中文字符数据,还可以回答有关中文字符使用情况的一系列问题。
未来,分类统计字符还
将在中文文字记录、语言学研究、数字化技术应用等方面发挥重要作用。
c语言字符个数统计长字符串中不同字符数-回复C语言字符个数统计长字符串中不同字符数在编程的世界中,经常会遇到需要统计字符串中不同字符个数的问题。
对于初学者来说,这似乎是一个相对简单的问题,但实际上,它涉及了很多基本的概念和技巧。
本文将以C语言为基础,详细解释如何使用C语言来统计长字符串中不同字符的个数。
首先,让我们了解一下C语言中的字符数据类型。
在C语言中,字符被定义为一种基本数据类型,用于存储单个字符。
我们可以使用单引号将字符常量括起来,例如'a','b','c'等。
字符变量可以用来存储单个字符,字符数组可以用来存储一系列字符。
在C语言中,字符串是由字符构成的字符数组。
字符串以空字符'\0'结尾,表示字符串的结束。
C语言提供了许多函数来操作字符串,包括字符串长度函数strlen(),字符串复制函数strcpy(),字符串连接函数strcat()等。
要统计长字符串中不同字符的个数,我们可以使用一个字符数组来存储已经出现的字符,并使用一个计数器变量来记录不同字符的个数。
具体的步骤如下:1. 声明一个字符数组和一个计数器变量。
char charArray[256]; 假设字符串中的字符取值范围在ASCII码的0-255之间int count = 0;2. 初始化字符数组中的元素为0。
这一步是非常重要的,因为在C语言中,未初始化的变量会被赋予一个随机的值,这可能导致错误的计算结果。
cmemset(charArray, 0, sizeof(charArray));3. 遍历长字符串的每个字符。
cfor (int i = 0; i < strlen(longString); i++) {统计每个字符出现的次数}4. 在循环中,对于每个字符,先判断它是否已经出现过。
如果字符数组中对应位置的值为0,则表示该字符尚未出现,需要将计数器加一,并将字符数组对应位置的值设为1。
汇编编程:从键盘输入一串字符,分别统计其中的字母(不区分大小写)、数字字符和其他键盘输入一串字符,统计出其中的数字字符个数,字母字符(不区分大小写)个数,其他字符个数,并显示出这三类统计结果(输入字符串以回车结束),可连续对多个字符串统计,用户输入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',进位标志复位。
华北电力大学实验报告名称:汇编语言程序设计综合实验院系:信息工程系班级:网络工程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三、运行结果实验二查找匹配字符串一、实验说明程序接受用户键入的一个关键字以及一个句子。
2.输入字符,得出结果备注:源代码附后,源代码要求有注释说明.386.model flatExitProcess proto near32 stdcall, dwexitcode:dwordINCLUDE io.hcr EQU 0dhlf EQU 0ah.STACK 4096.DA TAprompt1 BYTE cr,lf,lf,"Please enter the string(<80).",cr,lf,lfBYTE "The string is:",0stringIn BYTE 1 DUP (?)charLabel BYTE cr,lf,"The number of char is:"char BYTE 16 DUP (?)BYTE cr,lf,0numberLabel BYTE cr,lf,"The number of number is:"number BYTE 16 DUP (?)BYTE cr,lf,0otherLabel BYTE cr,lf,"The number of other is:"other BYTE 16 DUP (?)BYTE cr,lf,0.CODE_start: output prompt1 ;提示输入字符mov ax,0mov bx,0mov cx,0begin:input stringIn,1;输入字符cmp stringIn,0dhje forOut ;是回车则结束程序cmp stringIn,0dhjb forOther ;ASCII码值小于0dh则其他字符数加1cmp stringIn,2fhjbe forOther;ASCII码值小于或等于2fh则其他字符数加1cmp stringIn,39hjbe forNumber;ASCII码值小于或等于39h则数字数加1cmp stringIn,40hjbe forOther;ASCII码值小于或等于40h则其他字符数加1cmp stringIn,5ahjbe forChar;ASCII码值小于或等于5ah则字母数加1cmp stringIn,60hjbe forOther;ASCII码值小于或等于60h则其他字符数加1cmp stringIn,7ahjbe forChar;ASCII码值小于或等于7ah则字母数加1jmp forOther;其他字符数加1forOther: ;其他字符数加1,回到循环开始inc axjmp beginforNumber: ;数字数加1,回到循环开始inc bxjmp beginforChar: ;字母数加1,回到循环开始inc cxjmp beginforOut:itoa other,axoutput otherLabel ;输出其他字符数itoa number,bxoutput numberLabel ;输出数字数itoa char,cxoutput charLabel ;输出字母数INVOKE ExitProcess,0PUBLIC _startEND。
分类统计各类字符个数解题思路
解题思路可以分为以下几个步骤:
1. 数据预处理:首先,我们需要对原始数据进行预处理,包括去除无关字符、统一字符编码等。
这样可以确保我们的统计结果是准确的。
2. 定义字符类别:我们需要明确哪些字符属于同一类别。
例如,我们可以将字母、数字、标点符号等分别定义为不同的类别。
3. 遍历字符串:接下来,我们需要遍历整个字符串,对每个字符进行分类。
我们可以使用一个字典来记录每个类别的字符数量。
4. 计数与统计:在遍历过程中,如果当前字符属于某个类别,我们就将该类别的计数器加一。
这样,遍历结束后,我们就可以得到每个类别的字符数量。
5. 输出结果:最后,我们将统计结果输出。
这可以是一个列表、表格或者任何其他形式,取决于具体的需求。
下面是一个简单的Python代码示例,用于统计一个字符串中字母和数字的数量:
总结:
解题的关键在于对字符串进行适当的预处理,并定义清晰的字符类别。
通过遍历字符串并使用字典来记录每个类别的字符数量,我们可以快速得到统计结果。
最后,根据需求选择合适的输出形式。
实验三汇编语言程序设计——字符与数据的操作(二)
一、实验目的:
1.掌握显示提示信息的方法及接收键盘输入信息的方法,完成字符串匹配程序。
2.掌握字符和数据的显示方法,完成字符和数据的显示程序。
3.了解小写字母和大写字母在计算机内的表示方法,并掌握如何进行转换,完成将键盘输入的小写字母转换成大写字母。
二、实验内容:
1. 编写程序,先显示信息“INPUT STRING ,THE END FLAG IS $”,再接收字符。
如为非数字字符即非“0——9”,则计数器加1,并显示字符。
如为数字,则直接显示,但不计数。
2.编写程序,接收键盘字符(以^-C为结束),并将其中的大写字母转变为小写字母,然后进行显示。
三、实验原理
1.DB、 DUP、 EQU等伪指令的功能以及使用格式;INT 21H 的09H子功能的功能、工作情况以及使用格式;INT 21H的0AH子功能的功能、工作情况以及使用格式;串扫描指令SCASB的功能以及使用格式;入栈、出栈指令PUSH 、POP的使用情况。
2.程序跳转指令JMP的功能及用法;比较指令CMP 、JB、 JBE 等指令的功能及用法;循环移位指令ROL的用法及功能;逻辑指令AND的功能及用法。
3.比较指令JA的功能及用法;减法指令SUB的功能及用法。
四、程序框图
五、实验步骤
1.按实验要求编写程序
2.汇编连接程序生成可执行文件 3.执行程序观察结果。
一、实验目的
学习用汇编语言编写设计分支循环程序
二、实验要求
程序接收用户键入的一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字及其它字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。
三、实验提示
(1)程序可0AH功能调用把键入字符直接送到缓冲区中,然后再逐个取出分类计数。
也可01H功能调用在接收字符后先分类计数再存入缓冲区中。
(2)程序需要进入debug运行并查看计数结果。
四、实验程序
datarea segment
string db 80
db ?
db 80 dup(?);定义字符串string,长度为80
letter db 0 ;定义存储单元letter
digit db 0 ;定义存储单元digit
other db 0 ;定义存储单元other
datarea ends
case segment
main proc far
assume cs:case, ds:datarea
start:
mov ax, datarea
mov ds, ax
lea dx, string
mov ah, 0ah
int 21h
lea di, string + 2 ;输入一行字符,依次将每个字符存入字符串string中
sub ch,ch
mov cl, string + 1
add dx, 2
check: ;将每个字符进行分类
mov al, [di]
cmp al, 0dh
je exit ;字符串以回车符结束,若进行分类的字符是回车符,则跳转至exit,退出程序
cmp al, 30h ;与ASCII码中的0,即30h比较
jb o ;小于30h的,为其他类型字符,则跳转至o,在other块进行操作
cmp al, 39h ;与ASCII码中的9,即39h比较
jna d ;不大于39h的,结合不小于30h的,则跳转至d,在digit块进行操作
ja loro ;剩下的为字母或者其他类型
loro:
cmp al, 41h ;与ASCII码中的A,即41h比较
jb o ;小于41h的,结合大于39h的,则跳转至o,在other块进行操作
cmp al, 7ah ;与ASCII码中的z,即7ah比较
ja o ;大于7ah的,则条钻至o,在other块进行操作
cmp al, 5ah ;与ASCII码中的Z,即5ah比较
jna l ;不大于5ah的,结合大于41h的,则跳转至l,在letter块进行操作
cmp al, 61h ;与ASCII码中的a,即61h比较
jnb l ;不小于61h的,结合不大于7ah的,则跳转至l,在letter块进行操作
jb o ;小于61h的,结合大于5ah的,则跳转至o,在other块进行操作
l:
inc letter ;属于letter类型,则letter增1
inc di
jmp check ;返回继续比较下一个字符
d:
inc digit ;属于digit类型,则digit增1
inc di
jmp check
o:
inc other ;属于other类型,则other增1
inc di
jmp check
exit: ;输出letter,digit,other类型的计数结果
mov ah, 02
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
mov dl, 4ch
int 21h
mov dl, 3ah
int 21h
mov dl, 0
int 21h
xor ax, ax
call display ;调用子程序display,输出
mov ah, 02
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
mov dl, 44h
int 21h
mov dl, 3ah
int 21h
mov dl, 0
int 21h
xor ax, ax
mov al, digit
call display
mov ah, 02
mov dl, 0dh
int 21h
mov dl, 0ah
int 21h
mov dl, 4fh
int 21h
mov dl, 3ah
int 21h
mov dl, 0
int 21h
xor ax, ax
mov al, other
call display
mov ax, 4c00h
int 21h
main endp
display proc near ;子程序display,用于将二进制数转换成十进制数mov bl, 10
div bl
push ax
mov dl, al
add dl, 30h
mov ah, 2
int 21h
pop ax
add dl, 30h
mov ah, 2
int 21h
ret
display endp
case ends
end start
五、调试结果。