




已阅读5页,还剩10页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验时间:2004.11实验地点:计算机楼四楼实验内容:一、编写一个汇编程序,要求把一个文件当中的小写字母转换成大写字母,其它字母不变。流程图如下:Begin打开文件读文件内字符入数据缓冲区关闭文件以写方式再打开文件数据缓冲区内字符写入文件关闭文件结束在此汇编程序实现过程中,开始的做法是只以读写方式打开一个文件,中间没有关闭文件和再次打开文件.但是执行程序后,结果不符合要求.例:原文件中为:Allgc461=jklaa运行后结果为:Allgc461=jklaaALLGC461=JKLAA从中我们可以看出问题所在,它把字符写入文件时,只是在原文件的最尾部添加,而没有替代原来对应的字符.后来想到关闭文件,再打开文件这一方法,便尝试了一下.这方法虽然有些繁琐,但是还是可行的.程序:. .model small .stack 64 .data pathnam db D:masmname.txt,0 handle dw ? inprec db 100 dup(?) .codebegin:push ds sub ax,axpush axmov ax,data mov ds,ax lea dx,pathname mov ax,3d02h int 21hmov handle,ax mov ah,3fh mov bx,handle mov cx,100 lea dx,inprec int 21hmov ah,3eh mov bx,handleint 21hmov si,0loop1: cmp inprecsi,97d jb hellocmp inprecsi,122djg hellosub inprecsi,32hello:inc sidec cxcmp cx,0 je endchange jmp loop1endchange:mov ax,3d01h lea dx,pathnamint 21hmov bx,handlemov ah,40h lea dx,inprecmov cx,100int 21hmov ah,3eh mov bx,handleint 21hend begin运行结果:创建一个名为name的文本文件夹,输入内容为abcdefg并保存,运行改程序,再打开name文件夹,发现文件内容以变为ABCDEFG,符合实验结果要求。二、编写一汇编程序,要求从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数。算法思想为: 十六位二进制数保存在BX中,对BX中的二进制数循环左移,每次移一位,然后把BL中的二进制数送给AL,再对AL的前7位进行屏蔽,只留一位原本是最高位的那位二进制数,它要么为1,要么为0.然后把AL中的这位二进制数转换为十进制数,并且输出.由于AL高7位都为0,所以转换为十进制后,仍然要么为1,要么为0,并且与那位二进制数相对应.这样循环做16次,就把整个BX中的二进制数都显示出来了. 流程图如下:main hexbin crlf output结束crlf显示换行符显示回车符返回hexbin初始化(bx)=0接受一个十六进制数送AX字符转换成数字15?(BX)*16(BX)=(BX)+(AX)返回output显示hex?初始化循环次数ch显示binary:ch0返回显示二进制数程序为:datarea segment ;define bin db 13,10, 21 dup(?),13,10,$hex db 4 dup(?)mess db input the hex num:,$x db 2datarea endsprognam segment ;define code main proc far assume cs:prognam,ds:datareastart: push ds sub ax,ax push ax mov ax,datarea mov ds,ax lea dx,mess mov ah,09 int 21h mov si,1 mov bx,1 rotate: mov ah,1 int 21h mov dl,al sub al,48d cmp al,9d jg next jmp allnext: sub al,39dall: mov cx,4d cbw and ax,00FFh add bx,4 mov di,bxloop1: div x add ah,48d mov binbx,ah sub bx,1 and ax,00FFh loop loop1 add di,1 mov bindi,20h mov bx,di add si,1 cmp si,5 jnz rotate lea dx,bin mov ah,09h int 21h retmain endpprognam endsend start运行结果:input the hex num:ef561110 1111 0101 0110三、从键盘输入数N,用递归方法求函数FIB(N), 当N=0,1时,FIB=1 ;当N=2时,FIB=FIB(N-1)+FIB(N-2),结果用十进制输出。流程图如下:main显示input number n:键盘输入数numcall FIBN显示FIB=显示所求结果结束FIBNnum=0|1Num减1call FIBN把gradesi和gradesi-2赋给gradesi, gradesi赋给gradesi-2,即根据后两个数求前一个数返回 si=01赋给gradesi和gradesi+2程序为:;PROGRAM TITLE GOES HERE-DIGUI;*datarea segment num dw ? grade dw 2(?) mess1 db input number n:,13,10,$ mess2 db 13,10,FIB=$ mess3 db input error! $datarea ends;*prognam segment ;-main proc far assume cs:prognam,ds:datareastart: push ds sub ax,ax push ax mov ax,datarea mov ds,ax lea dx,mess1 mov ah,09 int 21h mov bx,0newchar: mov ah,01h int 21h cmp al,13 je lee01 sub al,30h jl error cmp al,9d jg error cbw xchg ax,bx mov cx,10d mul cx xchg ax,bx add bx,ax jmp newcharerror: lea dx,mess3 mov ah,09 int 21h retlee01: mov num,bx mov si,0 mov ax,0 call FIBN lea dx,mess2 mov ah,09 int 21h push bx push cx push si push di mov bx,gradesi mov cx,10000d call dec_div mov cx,1000d call dec_div mov cx,100d call dec_div mov cx,10d call dec_div mov cx,1d call dec_div pop di pop si pop cx pop bx retmain endp ;-dec_div proc near mov ax,bx mov dx,0 div cx mov bx,dx mov dl,al add dl,30h mov ah,02h int 21h retdec_div endp;-FIBN proc near cmp num,1 je lee02 dec num call FIBN mov ax,gradesi mov bx,gradesi-2 mov gradesi-2,ax add ax,bx mov gradesi,ax jmp lee03lee02: mov gradesi,1 add si,2 mov gradesi,1lee03: retFIBN endp;-prognam ends;*end start 运行结果: input number n:20FIB=10946D:diguiinput number n:10FIB=00089D:diguiinput number n:8FIB=00034四、编写一个程序,对键盘输入的数字进行排序,并在终端上显示出来。有用的模板为:模块名:main 为总控模块输入:从键盘输入一个班的学生成绩。输出:根据输入的学生成绩,按分数的高低进行排序。2 模块名: input 输入:输入学习成绩,用空格隔开,以回车结束。输出:把一个班的学习成绩存入grand数组。功能:接受一个班的学习成绩。调用子模块decibin把从键盘输入一个十进制数转化成二进制数。调用子模块crlf完成回车、换行功能。3 模块名:sort输入:从grade数组取得一个班的学生成绩。输出:以学习成绩的高低存入grade数组。功能:对学生成绩进行排序。算法运用冒泡排序算法。4 模块名:output输入:从grade数组中取得一个班的学生成绩。输出:把学习成绩按分数高低在终端显示出来。功能:调用binidec,以便把rank数组中的二进制数转化成十进制数并在终端上显示出来。调用子模块crlf完成回车、换行功能。5 模块名:decibin输入:从键盘上取得一个十进制数。输出:把该数转化成二进制数并存入BX寄存器。 功能:把从键盘取得一个十进制数转化成二进制数,并将该数并存入BX寄存器。6 模块名:crlf输出:向终端发出回车、换行符。功能:完成一次回车、换行符。7 模块名:binidec输入:从BX寄存器中取得一个二进制数。输出:在终端的显示一个十进制数。功能:把BX寄存器中的二进制数转换成十进制数,并在终端屏上显示出来。调用子模块decdiv用来做除法运算并显示字符。流程图如下:crlf显示换行符显示回车符返回decibin初始化(bx)=0接受一个十进制数送AX字符转换成数字9?(BX)*10(BX)=(BX)+(AX)返回output初始化循环次数count显示Result:count0endpcall binideccount-call crlfinput显示numbers:初始化数组首址初始化count接受一个数decibincount+是,否定显示出错信息存入grade数组call sort是回车否endp存入grade修改地址binidecCX=100call dec_dirCX=10call dec_dirCX=1call dec_direndpdec_div(BX)/(CX)BX=余数DL=商数转换为字符显示一位十进制数endpdi=cx,bx=0取gradebx比较gradebx和gradebx+2bx+2cx=di交换全部的gradesi和ranksisort=endp 程序为:datarea segment grade dw 50 dup(?)count dw ?mess1 db the number:$mess2 db 13,10,inputerror!,13,10,$mess3 db sorted num:$datarea endsprognam segment main proc far assume cs:prognam,ds:datareastart:;set up stack for return push ds sub ax,ax push ax;set DS register to current data segment mov ax,datarea mov ds,ax;MAIN PART OF PROGRAM GOES HERE call input call rankp call output ret main endpinput proc near lea dx,mess1 mov ah,09 int 21h mov si,0 mov count,0enter: call decibin inc count cmp dl, je store cmp dl,13 je exit2 jne errorstore: mov gradesi,bx add si,2 jmp entererror: lea dx,mess2 mov ah,09 int 21hexit2: mov gradesi,bx call crlf retinput endprankp proc near mov ax,datarea mov ds,ax mov cx,count dec cxloop1: mov di,cx mov bx,0 loop2: mov ax,gradebx cmp ax,gradebx+2 jge cotinue xchg ax,gradebx+2 mov gradebx,ax cotinue: add bx,2 loop loop2 mov cx,di loop loop1 retrankp endpoutput proc near lea dx,mess3 mov ah,09 int 21h mov si,0 mov di,countnext1: mov bx,gradesi call binidec cmp di,1 je next3 mov dl, mov ah,02 int 21hnext3: add si,2 dec di jnz next1 call crlf retoutput endpdecibin proc near mov bx,0newchar: mov ah,1 int 21h mov dl,al sub al,30h jl exit1 cmp al,9d jg exit1 cbw xchg ax,bx mov cx,10d mul cx xchg ax,bx add bx,ax jmp newchar exit1: retdecibin endpbinidec proc near push bx push cx push si push di ;控制输出数据的位数 mov cx,10d call dec_div mov cx,1d call dec_div pop di pop si pop cx pop bx retbinidec endpdec_div proc near mov ax,bx mov dx,0 div cx mov bx,dx mov dl,al add dl,30h mov ah,02h int 21h retdec_div endpcrlf proc near mov dl,0a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年公共关系专家危机处理技巧考核试卷及答案解析
- 机电电工基础知识培训课件
- 2025年安全管理培训考试模拟题及答案
- 2025年服务机器人应用技术员初级面试模拟题及答案
- 2025年安全生产监督测试题
- 2025年AI造型师职位面试准备问题集
- 2025年通信工程师中级技能考试模拟题及答案解析
- 新年祝福卡教学课件小班
- 2025年农家乐客房笔试秘籍
- 2025年工会安全检查员面试模拟题集
- 连锁餐饮合伙合同范本
- 小学戏剧教学课本剧剧本集锦
- 【一年级上册语文统编版(2024)-第四单元汉语拼音】14. ang eng ing ong第二课时课件
- 小学四年级道德与法治上册教材分析
- 广西建设工程质量安全监督总站建设工程检测见证取样员手册
- 《三字经》PPT课件(完整版)
- 钣金件检验的基本要求
- 公路工程施工安全技术规范-JTG-F90-2015
- 高职创新无人机实训室建设方案
- 现在完成时——英语公开课课件
- 管片嵌缝及手孔封堵施工方案完整
评论
0/150
提交评论