《汇编实验三报告分类统计字符个数COUNT_CHAR》由会员分享,可在线阅读,更多相关《汇编实验三报告分类统计字符个数COUNT_CHAR(7页珍藏版)》请在金锄头文库上搜索。
1、 计算机 学院 计算机科学与技术 专业 8 班 学号 姓名 协作者_ 教师评定_实验题目 实验用 2.3 分类统计字符个数 COUNT_CHAR 一、实验目的与要求学习用汇编语言编写与设计分支循环程序。 题目:分类统计字符个数 COUNT_CHAR二、实验内容程序接收用户键入的一行字符(字符个数不超过 80 个,该字符串用回车符结束), 并按字母、数字及其它字符分类计数,然后将结果存入以 letter、digit 和 other 为名的存储单元中。三、 程序代码;* Datasegment string1 db Input your string:$ string2 db Digit:$ st
2、ring3 db Letter:$ string4 db Other:$ Digit db 0 Letter db 0 Other db 0 data ends ;* prognam segment ;- main proc farassume cs:prognam,ds:data start: push ds ;保留现场 sub ax,ax push ax mov ax,data mov ds,axlea dx,string1 ;输出 string1mov ah,9 int 21h mov cx,80 L1: mov ah,1 ;输入字符 int 21h cmp al,0dh ;若是回车则结
3、束 jz over cmp al,30h ;若小于 30h(0)则 others+1 jb others cmp al,39h ;若大于 39h(9)则跳转 L2 继续比较 ja L2 jmp digits ;否则 digits+1 L2: cmp al,41h ;若小于 41h(A)则 others+1 jb others cmp al,5ah ;若大于 5ah(Z)则跳转 L3 继续比较 ja L3 jmp letters ;否则 letters+1 L3: cmp al,61h ;若小于 61h(a)则 others+1 jb others cmp al,7ah ;若大于 7ah(z)则
4、 others+1 ja others jmp letters ;否则 letters+1 digits: inc digit jmp over1 others: inc other jmp over1 letters: inc letter jmp over1 over1: loop L1 over: call endline lea dx,string2 ;输出 string2 mov ah,9 int 21h sub ax,ax mov al,digit call displaycall endline lea dx,string3 ;输出 string3 mov ah,9 int 21
5、h sub ax,ax mov al,letter call display call endline lea dx,string4 ;输出 string4 mov ah,9 int 21h sub ax,ax mov al,other call display ret main endp ;- endline proc near ;输出回车与换行 mov ah,2 mov dl,0ah int 21h mov ah,2 mov dl,0dh int 21h ret endline endp ;- display proc near ;输出结果 mov dl,al add dl,30h ;0
6、的 ascii 码是 30 mov ah,2 int 21h ret display endp ;- prognam ends ;* end start四、 运行结果附录:由于这个实验一开始做错了题目,实验课上机检查是检查了该程序 实验 2.2 查找匹配字符串程序代码:;- newline macro;回车换行的宏定义mov ah, 02hmov dl, 0dhint21hmov ah, 02hmov dl, 0ahint21h endm ;- datasegment maxlenkdb8;关键字的最大长度 factlenk db?;关键字的实际长度 keyword db8 dup(?);关键
7、字的存储maxlensdb32;字符串的最大长度 factlensdb?;字符串的实际长度 sentence db32 dup(?);字符串的存储info1dbEnter Keyword:$ info2dbEnter Sentence:$ mess0dbMatch at location:$ mess1dbNo match.$ mess2db?,?,H of the sentence.$ data ends ;- stacksegment stack stackends ;- code segment ;- mainproc far assume cs:code, ds:data, es:da
8、ta, ss:stack start: pushds subax, ax pushaxmov ax, data mov ds, ax mov es, axmov ah, 09h;输出字符串信息 leadx, info1 int21hmov ah, 0ah;输入关键字 leadx, maxlenk int21hbegin: newline mov ah, 09h leadx, info2 int21hmov ah, 0ah;输入字符串 leadx, maxlensint21hnewline leasi, keyword;关键字的首地址赋予 si leabx, sentence;字符串的首地址赋予
9、 bx leadi, sentence;字符串的首地址赋予 di mov dl, 00h;对 dl 清零 cld;方向标志位清零,字符串地址递增 again: mov cl, factlenk repzcmpsb atch mov al, factlens subal, factlenk jsnext1inc al leasi, keyword incbx mov di, bx incdx cmpdl, al jlagain next1: leadx, mess1 mov ah, 09h int21h jmpbegin match: leadx, mess0 mov ah, 09h int21
10、hmov ax, bx leabx, sentence subax, bx mov bx, 0001h add ax, bx andax, 00ffh xchg ax,bx mov ch, 2 rotate: mov cl,4hrol bl,clmov al,bland al,0fhadd al,30hcmp al,3ahjl printadd al,7h print: mov ah,02hmov dl,alint 21hdec chjnz rotatemov ah,09hlea dx,mess2int 21hjnl beginret mainendp code ends end start运行结果: