2014-汇编-综合实验报告

  • 格式:doc
  • 大小:173.00 KB
  • 文档页数:19

综合实验报告( 2014 -- 2015 年度第一学期)名称:《汇编语言程序设计》综合实验题目:院系:班级:学号:学生姓名:指导教师:设计周数:成绩:日期:2015 年 1 月 4 日实验一用表格形式显示字符一、课程设计(综合实验)的目的与要求按15*16列的表格形式显示ASCⅡ码为10H—100H的所有字符,即以行为主的顺序及ASCⅡ码递增的次序依次显示对应的字符。

每16个字符为一行,每行中的相邻两个字符之间用空白符隔开。

二、设计(实验)正文(1)显示每个字符可使用功能号为02的显示输出功能调用:Mov ah,02hMov dl,输出字符的ASCⅡ码Int 21h将dl初始化为10H,然后使用其加1以取得下一个字符的ASCⅡ码。

(2)显示空白符是,用其ASCⅡ码置0入dl寄存器。

每行结束时,用回车和换行来结束本行并开始下一行。

(3)由于逐个显示相继的ASCⅡ码字符是,需要不断修改dl寄存器的内容,而显示空白、回车、换行也需要使用dl寄存器,为此可使用堆栈保存dx。

三、实验程序及程序运行结果DATAS SEGMENTDATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMOV DS,AXmov ax,10hmov dx,axpush dxnext: mov cx,10hloop1: mov ah,02h;int 21hinc dxpush dxmov dx,0int 21hpop dxloop loop1;zongji:push dxmov dl,13;int 21hmov dl,10int 21hpop dxcmp dx,100hjb nextexit: MOV AH,4CHINT 21HCODES ENDSEND START实验二查找匹配字符串一、课程设计(综合实验)的目的与要求程序接受用户键入的一个关键字以及一个句子,如果句子中不包含关键字则显示“No match!”;如果句子中包含关键字则显示“match!”,且把该字在句子中的位置用十六进制数显示出来。

要求程序的执行过程如下:Enter keyword:abcEnter sentence:we are studying abcMatch at location:11H of the sentenceEnter sentence:xyzNo match!Enter sentence:二、设计(实验)正文程序由三部分组成:(1)输入关键字和一个句子,分别存入相应的缓冲区中。

(2)在句子中查找关键字(3)输出信息。

用功能调用09h分‘找到’和‘未找到两种情况分别显示不同的信息。

在“找到”时,显示关键字在字符串中位置。

三、使用说明根据提示输入关键字和句子,按回车键结束输入。

程序将显示字符串中是否含有关键字,有则提示‘match’并显示关键字位置,无则提示‘no match’。

四、实验程序及运行结果datasg segment para 'data'mess1 db 'Enter keyword:','$'mess2 db 'Enter sentence:','$'stoknkeyword db 10act1 db ?stokn1 db 10 dup(?)stoknsenten db 50act2 db ?stokn2 db 50 dup(?)mess3 db 'Match at location:','$'mess4 db 'No match!',0dh,0ah,'$'mess5 db 'H of the sentence.',0dh,0ah,'$'mess7 db 0dh,0ah,'$'flag dw 0tongji dw 30hdatasg ends;******************************************************************** codesg segment para 'code'main proc farassume cs:codesg,ds:datasg,es:datasgstart::mov ax,datasgmov ds,axmov es,ax;lea dx,mess1 ;输入字符提示mov ah,09int 21hlea dx,stoknkeyword ;输入字符mov ah,0ahint 21hlea dx,mess7 ;输出回车换行mov ah,09int 21hloop1:mov ax,30hmov tongji,axlea dx,mess2 ;输出输入句子提示mov ah,09int 21hlea dx,stoknsenten ;输入句子mov ah,0ahint 21hlea dx,mess7 ;输入回车换行mov ah,09int 21h;mov al,act1 ;比较字符长度cmp al,act2jg print ;若act1大于act2则跳lea si,stokn1 ;吧字符地址给silea bx,stokn2 ;把句子地址给bxloop2:mov di,bxmov cl,act1lea si,stokn1cldrepz cmpsb ;比较句子中有无字符jz next ;相等则跳到nextinc bx ;移到下一字符比较dec act2jnz loop2test flag,0ffffh ;测试地址有无变化无则输出不匹配jz printmov dx,tongjimov ah,02hint 21hlea dx,mess7mov ah,09hint 21hjmp loop1print:lea dx,mess4 ;输出不匹配语句mov ah,09int 21hmov ah,02hmov dx,tongjiint 21hmov ah,09hlea dx,mess7int 21hjmp loop1 ;返回到loop1重新输入句子next:lea dx,mess3 ;输出匹配句子mov ah,09hint 21hmov flag,bx ;记录此时匹配的地址push bx ;匹配地址进栈lea dx,stokn2 ;获取句子地址sub bx,dx ;获得字符在句子的位置inc bxpush cx ;字符长度进栈mov ch,4rotate:mov cl,4rol bx,clmov al,bland al,0fhadd al,30hcmp al,3ahjl print2add al,7hprint2:mov dl,almov ah,2int 21hinc bxdec chjnz rotate ;二进制转换十六进制pop cxpop bxtongge:mov ax,0mov ax,tongjiinc axmov tongji,axlea dx,mess5 ;输出匹配句子mov ah,09hint 21h; mov ah,02h;mov dx,13;int 21h;mov dx,tongji;int 21h;lea dx,mess7;mov ah,09h;int 21htonjijieshu:inc bxdec act2 ;句子长度减二jnz loop2 ;若长度不等于0则转loop2继续寻找匹配shuchu:;mov dx,tongji; mov ah,02h;int 21hjmp loop1main endp;--------------------------------------------------------------------codesg ends;******************************************************************** end start实验三分类统计字符个数一、实验要求程序接受用户键入一行字符(字符个数不超过80个,该字符串用回车符结束),并按字母、数字、其它字符分类计数,然后将结果存入以letter、digit和other为名的存储单元中。

二、实验设计(1)不程序可采用01H功能调用把键入字符先分类计数再存入缓冲区中。

(2)程序进入debug运行并查看计数结果。

三、实验程序及运行结果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',进位标志复位。