《计算机组成技术大作业第3题程序说明.pdf》由会员分享,可在线阅读,更多相关《计算机组成技术大作业第3题程序说明.pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第 3 题程序说明题目键盘输入 200 字符以上英文文章,统计各字母出现次数并输出(每个字母、出现次数占一行),结束时以响铃(07H)加以提示,请画出框图并编写完整程序。程序简单说明程序核心是找出字母并都变为大写字母,然后减去40h,结果 AZ 变成 126,放入di 中。然后对所对应存储位置加一,即:LetterOccurrences(di-1)+。代码流程图中同一行中的代码,是可以并行的、不分先后顺序的。程序执行结果程序流程图主程序流程图:提示输入输入数据于缓冲区(buf)中al sibx字母出现次数存放位置;si字母存放位置(buf);di=0;ax=0;cx=0;cl=buf+1 an
2、d al,0bfh;diax;shl di,1;-2bx+di+al 大于等于判断 zf 是否为 0 否cx-结束al 小于等于是开始and al,0dfh(小写变大写);si+比较 al 与 Aal 大al 小比较 al 与 Zcall delay(延时);输出提示;call dbxout(输出)SBinaryAscii 子程序(16 位无符号二进制数转化为ascii 码)流程图。ax 为目标操作数,bx为结果存放位置,结束时bx 为结果存放位置的下一个有效位置。第一个循环:除10 取余,第二个循环:去掉数字中可能有的0。di=4;dx=10h dx=0;除 si(10);dl=dl+30h
3、 bx+di=dl;di-cx-al=al+30h;bx+di=al;cx=5;cx=cx-di;si=0 si+di+比较 ax 与 10 al=bx+di;bx+si =al大于等于判断 zf 是否为 0 否bx=bx+si退出小是开始dbxout 子程序(输出)流程图。数组LetterOccurrences 中存有26 个字母出现次数,数组TemporaryAscii 是临时数据区。此子程序通用性上没有多少价值。cx=26;di=0 axLetterOccurrencesdi call SBinaryAscii dxTemporaryAscii的地址axdi;ax 除以 2;ax=ax+
4、41h;bxdx;bx al;bx+;bx:;bx+;判断 zf 是否为 0 否cx-返回是开始响铃bx$;输出 dx 开头的字符串水平制表;di=di+2 代码data segment LetterOccurrences dw 26 dup(0)TemporaryAscii db 10 dup(?)buf db 225 db?db 225 dup(?)str1 db Please enter your letters,and press enter to end your input:,$str2 db 0dh,0ah,The number of chars:,$data ends stac
5、k segment db 100 dup(?)stack ends code segment assume ds:data,cs:code,ss:stack begin:dbxprint macro;输出字符串宏mov ah,09h int 21h endm dbxprint mov ax,data mov ds,ax mov ax,stack mov ss,ax mov sp,100 mov dx,offset str1 mov ah,09h int 21h call crlf mov dx,offset buf;输入字符串mov ah,0ah int 21h;找出每个字母出现频率mov b
6、x,offset LetterOccurrences;字母出现次数存放位置xor di,di;字母出现次数相对存放位置mov si,offset buf+2;ascii存放相对位置xor ax,ax;暂存器xor cx,cx mov cl,buf+1 dbxlop:mov al,si inc si and al,0dfh;第六位置零,大小写合并cmp al,A jb InsteadOfLetters cmp al,Z ja InsteadOfLetters and al,0bfh mov di,ax shl di,1 inc word ptr-2bx+di InsteadOfLetters:l
7、oop dbxlop dbxok:call delay call crlf mov dx,offset str2 mov ah,09h int 21h call dbxout mov ah,04ch int 21h dbxout proc near;输出call crlf call crlf mov cx,26 xor di,di mov dx,offset TemporaryAscii dbxlop1:mov ax,di shr ax,1 add ax,0041h mov bx,dx mov bx,al inc bx mov byte ptr bx,:inc bx mov ax,Letter
8、Occurrencesdi call SBinaryAscii mov byte ptr bx,$dbxprint call form;call crlf add di,2 loop dbxlop1 call crlf call ring ret dbxout endp SBinaryAscii proc near;16位无符号二进制数转化为ascii 码;ax 为目标操作数,bx 为结果存放位置,输出 bx 为后一个空位置push dx push di push si push cx mov di,4 mov si,10 sbalop1:cmp ax,0ah jb sbaok1 xor dx
9、,dx div si add dl,30h mov bx+di,dl dec di jmp sbalop1 sbaok1:add al,30h mov bx+di,al mov cx,05h sub cx,di xor si,si sbalop2:;去掉数字中前面可能有的零mov al,bx+di mov byte ptr bx+si,al inc si inc di loop sbalop2 add bx,si pop cx pop si pop di pop dx ret SBinaryAscii endp crlf proc near;回车换行push dx push ax mov dl
10、,0dh mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h pop ax pop dx ret crlf endp form proc near;水平制表push ax push dx mov dl,09h mov ah,2 int 21h pop dx pop ax ret form endp ring proc near;响铃push ax push dx push cx mov cx,500 mov dl,07h mov ah,2 Ringlop:int 21h loop Ringlop pop cx pop dx pop ax ret ring endp delay proc near;延时push cx mov cx,01ffh loop1:push cx mov cx,0ffffh loop2:loop loop2 pop cx loop loop1 pop cx ret delay endp code ends end begin