汇编实验报告-.pdf
《汇编实验报告-.pdf》由会员分享,可在线阅读,更多相关《汇编实验报告-.pdf(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、综合实验报告(2010-2011 年度第一学期)名称:汇编语言程序设计综合实验班级:学号:学生姓名:指导教师:设计周数:一周成绩:日期:2011 年1 月3 日2/24汇编语言程序设计综合实验任务书一、目的与要求通过本门课程的学习与实践,加深对汇编语言程序设计课程的理解与掌握,提高学生的汇编语言程序设计能力,同时可以加深对计算机工作原理的理解,有助于促进后续课程的学习。本课程要求学生针对课本所学知识从调试程序、循环程序设计、分支程序设计、子程序设计、显示器IO 程序设计、键盘输入程序设计和中断练习程序等七个实验进行学习和实践,使学生对汇编语言有更深入、细致和全面的了解,并能用所学知识解决实际问
2、题。要求有实验说明,画出程序流程图,然后根据流程图编写程序,并上机调试写出运行结果。二、主要内容1比较字符串sample(学习)、用表格形式显示字符比较字符串sample:比较两个字符串string1 和 string2 所含的字符数是否相同。若相同则显示match,否则显示 no match;要求编写程序,并汇编,连接,运行,然后使用Debug 调试该程序。用表格形式显示字符:按15 行*16 列的表格形式显示ASCII 码为 10H-100H 的所有字符,即以行为主的顺序及 ASCII 码递增的次序依次显示对应的字符。每16 个字符为一行,每行中的相邻两个字符之间用空白符(ASCII 为
3、20H)隔开。2查找匹配字符串程序接受用户键入的一个关键字以及一个句子。如果句子中不含关键字则显示no match;如果句子中包含关键字则显示match,且把该字在句子中的位置用十六进制数显示出来。3分类统计字符的个数程序接收用户键入的一行字符(用回车符结束),并按字母,数字及其他字符分类计数,然后将结果存入以 letter,digit 和 other 为名的存储单元中。4查找电话号码要求程序建立一个可存50 项的电话号码表,每项包括人名及电话号码两部分;程序可接受输入人名及相应的电话号码,并将其保存至电话号码表中;当有新的输入后,程序应按人名对电话号码表重新排序;程序可接受键盘输入人名并查找
4、电话号码,再在屏幕上显示出来。5屏幕窗口程序在屏幕上开出三个窗口,它们的行列坐标如下页图所示,光标首先定位在右窗口最下面一行的行首(15,50),如果从键盘输入字符,则显示在右窗口,同时也显示在下窗口的最下面一行。若需要将字符显示于左窗口,则先按下左键,接着再从键盘输入字符,字符就会从左窗口的最下行开始显示,同时下窗口也显示左窗口的内容。当一行字符显示满后,窗口自动向上卷动一行,输入字符继续显示于最低一行,窗口最高一行向上卷动后消失。3/246扩充键盘处理功能(选做)在完成键盘处理基本功能的基础上,增加 left_shift 和 right_shift 键的功能。要求实现左右SHIFT 任何一
5、个键处于按下状态时输入字符为键盘的上档字符或大写字母,否则输出数字或小写字母。三、进度计划序号设计内容完成时间备注1 比较字符串sample(学习)用表格形式显示字符2010.12.272 查找匹配字符串2010.12.283 分类统计字符的个数2010.12.294 查找电话号码2010.12.30 5 屏幕窗口程序2010.12.31 6 扩充键盘处理功能(选做)2010.12.31 注:其中第1-5 个实验根据进度在12 月 31 日之前验收即可;学有余力的同学可选做第6 题。四、设计成果要求1.以上实验要求首先画出程序流程图,然后根据流程图编写程序并上机调试,教师将验收实验结果。2.课
6、程设计报告:完成上机题目后,应认真撰写上机课程设计报告,报告内容包括:?上机题目及要求;?实验说明:完成的功能、整体设计思想及使用的算法;?设计的程序流程框图和主要数据结构;?上机题目完成的情况,输入的典型代码、数据和运行结果;?存在的问题及解决方法;?上机实验的心得体会。五、考核方式依据进度计划,完成综合实验内容,并向老师讲解所完成任务的功能、思想、使用算法及主要程序流程,老师提出问题,提交综合实验报告。成绩评定方法:现场验收+综合实验报告。(5,10)(15,30)(5,50)(15,70)(18,15)(22,65)4/241.1实验题目:实验2.1 用表格形式显示字符1.2实验目的和要
7、求:详见任务书1.3实验说明:1)显示每个字符可使用功能号为 02 的显示输出功能调用,使用方法如下:MOV AH,02H MOV DL,输出字符的 ASCII 码 INT 21H 2)显示空白符时,用其 ASCII 码 0 置入 DL 寄存器。每行结束时,用显示回车(ASCII 为 0dh)和换行符(ASCII 为 0ah)来结束本行并开始下一行。3)由于逐个显示相继的 ASCII 字符时,需要保存并不断修改DL 寄存器的内容,而显示空白、回车、换行符时也需要使用DL寄存器,为此可使用堆栈来保存相继的ASCII 字符。具体用法是:在显示空包或回车、换行符前用指令:PUSH DX把 DL 的内
8、容保存到堆栈中去;在显示空白或回车、换行符后用指令POP DX恢复 DL 寄存器的原始内容。4)TEST DL,0FH来进行是否应该换行的判断,ZF=1 则转至下一行。1.4实验结果:程序代码DATAS SEGMENT;此处输入数据段代码DATAS ENDS STACKS SEGMENT;此处输入堆栈段代码STACKS ENDS CODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START:MOV AX,DATAS MOV DS,AX mov dl,0fh output:cmp dl,0FFh jz exit inc dl test dl,0Fh
9、 jz newline mov ah,02h int 21h push dx mov dl,0 mov ah,02h int 21h pop dx 实验 2.1 流程图5/24jmp output newline:push dx mov dl,0Dh mov ah,02h int 21h mov dl,0Ah mov ah,02h int 21h pop dx mov ah,02h int 21h push dx mov dl,0 mov ah,02h int 21h pop dx jmp output exit:MOV AH,4CH INT 21H CODES ENDS END START
10、2.1实验题目:实验2.2 查找匹配字符2.2实验说明1)采用 0AH 功能调用将关键字和一个句子分别存入相应的缓冲区。2)关键字的查找。关键字和句子中相应字段的比较可使用串比较指令,因此定义附加段,附加段和数据段定义为同一段;相应寄存器内容如下:SI 寄存器:关键字首指针;DI 寄存器:句子中正相比较的字符指针;CX 寄存器(数据段的COUNT 变量):关键字的字母个数。3)关键字在句子中位置的判断。DI-COUNT即为关键字在句子中的地址,LEA DX SENTENCE;SUB DI,DX;DEC DI;此时 DI 中存放关键字的位置。4)十六进制显示,采用循环移位,每次输出四个二进制位对
11、应的十六进制字符。2.3实验结果程序代码DATAS SEGMENTKEYWORD DB 10H,?,10H DUP(?)MATCH DB 0AH,0DH,Match at Location:$NOMATCH DB 0AH,0DH,NO match$实验 2.1运行结果图6/24MSG3 DB 0AH,0DH,Enter Keyword:$SENTENCE DB 50H,?,50H DUP(?)MSG4 DB 0AH,0DH,Enter Sentence:$MSG5 DB H of the Sentence!$COUNT DB?DATAS ENDS CODES SEGMENT MAIN PROC
12、 FAR ASSUME CS:CODES,DS:DATAS,ES:DATAS START:PUSH DS SUB AX,AX SUB CX,CX SUB BX,BX PUSH AX MOV AX,DATAS MOV DS,AX MOV ES,AX MOV CH,0 LEA DX,MSG3 MOV AH,09H INT 21H LEA DX,KEYWORD MOV AH,0AH INT 21H;输入关键字AGAIN:LEA DX,MSG4 MOV AH,09H INT 21H;输出 MSG4 LEA DX,SENTENCE MOV AH,0AH INT 21H;输入句子LEA DI,SENTEN
13、CE LEA SI,KEYWORD MOV AL,DI+1 MOV CL,SI+1 MOV COUNT,CL MOV BL,AL SUB BL,CL ADD BL,2 小于或等于开始初置段地址输入关键字初置 SI,DI Al=句子长度CL=关键字长度BX=句子比较末地址不匹配匹配调用 DISPLAY 串比较ZF=1?CMP DI,BX 输入句子小于大于或等于CMP AL,CL Y 实验 2.2 程序流程图7/24ADD BX,DI CMP AL,CL JB NOMATCH1 ADD DI,2 SIGN1:MOV CL,COUNT LEA SI,KEYWORD ADD SI,2 CLD REPZ
14、 CMPSB JZ MATCH1 CMP DI,BX JBE SIGN1 NOMATCH1:LEA DX,NOMATCH MOV AH,09H INT 21H JMP AGAIN MATCH1:LEA DX,MATCH MOV AH,09H INT 21H LEA DX,SENTENCE SUB DI,DX MOV CL,COUNT SUB DI,CX DEC DI MOV BX,DI CALL DISPLAY JMP AGAIN;子程序 DISPLAY,用于将二进制数转换成十六进制数DISPLAY PROC NEAR MOV CH,2 ROTATE:MOV CL,4 ROL BL,CL MO
15、V AL,BL AND AL,0FH ADD AL,30H CMP AL,3AH JL PRINTIT ADD AL,7H 8/24PRINTIT:MOV DL,AL MOV AH,2 INT 21H DEC CH JNZ ROTATE LEA DX,MSG5 MOV AH,09H INT 21H RET DISPLAY ENDP EXIT:RET MAIN ENDP CODES ENDS END START3.1实验题目:实验2.3 分类统计字符个数3.2实验说明1)程序采用0AH 功能调用把键入字符直接送到缓冲区,然后再逐个取出,比较字符的ASC 码,分类计数。2)程序需进入debug 运
16、行并查看计数结果。3)十进制显示输出,数值存放在AL 中,运用MOV BL,10;DIV BL;分别将十位和个位输出。3.3实验结果程序代码DATAS SEGMENT string db 80,?,80 dup(?)LETTER1 DB 0AH,0DH,LETTER:$DIGIT1 DB 0AH,0DH,DIGIT:$OTHER1 DB 0AH,0DH,OTHER:$letter db 0 digit db 0 other db 0 DATAS ENDS CODES SEGMENT main proc far ASSUME CS:CODES,DS:DATAS start:MOVAX,DATAS
17、 MOVDS,AX leadx,string 实验 2.2 程序运行结果9/24movah,0ah int 21h leadi,string+2 movcl,string+1 adddx,2 again:mov al,di cmp al,0dh jz exit cmp al,30h jb other2;其他cmp al,39h jbe digital2;数字cmp al,41h jb other2;其他cmp al,5ah jbe letter2;字母cmp al,61h jb other2;其他cmp al,7ah jb letter2;字母other2:inc other inc di j
18、mp again digital2:inc digit inc di jmp again letter2:inc letter inc di jmp again exit:call crlfLEADX,LETTER1 MOVAH,09 INT 21H xorax,ax moval,letter call display call crlf LEADX,DIGIT1 MOVAH,09 INT 21H xorax,ax 小于小于小于或等于大于小于或等于小于开始字符送缓冲区DI=首地址CL=字符个数数字digital+1 di+1 字符letter+1 di+1其他other+1 di+1 回车?C
19、MP AL,30H CMP AL,39H CMP AL,41H CMP AL,5AH CMP AL,61H CMP AL,7AH 调用 display 退出Y 实验 2.3 程序流程图10/24moval,digit call display call crlf LEADX,OTHER1 MOVAH,09 INT 21H xorax,ax moval,other call display MOVAH,4CH INT 21H main endp;子程序 display,用于将二进制数转换成十进制数display proc near movbl,10 divbl pushax movdl,al a
20、dddl,30h movah,2 int 21h popax movdl,ah adddl,30h movah,2 int 21h ret display endp crlf proc near movah,02 movdl,0dh int 21h movdl,0ah int 21h ret crlf endp CODES ENDS END START实验 2.3 程序运行结果11/244.1实验题目:实验2.4 查找电话号码4.2实验说明:1)实验提示显示提示符“Input name:”;调用子程序input_name 接收人名;调用子程序stor_name 把人名存入电话号码表tel_ta
21、b 中:显示提示符“Input a telephone number:”;调用子程序inphone 接收电话号码,并把它存入电话号码表tel_tab 中;如输入已结束则调用name_sort 子程序对电话号码表接人名排序;显示提示符“Do you want a telephone number?(Y/N)”;回答 N 收退出程序;回答 Y 则再显示提示符“name?”;调用子程序input_name 接收人名;调用子程序name_search 在电话号码表中查找所要的电话号码;调试示意图1 调试示意图2 12/24调用子程序printline 按要求格式显示人名及电话号码;重复查号提示符直至用
22、户不要求查号为止。2)流程图3)模块层次图4)模块说明主程序 main:用来显示用户操作提示,调用子模块,使程序完成查找电话号码的过程子程序 input_name:输入人名,将此人名保存至缓冲区,并用空格补足子程序 stor_name:将人名从缓冲区中取出,保存在电话号码表中的人名区中子程序inphone:输入电话号码,将此电话号码保存至缓冲区,并用空格补足,然后,将电话号码从缓冲区中取出,保存在电话号码表中的电话号码区中子程序 name_sort:运用冒泡法,对电话号码表按人名排序子程序 exchange:将不符合排序规律的条目的位置进行调整子程序 name_search:输入人名,在电话号
23、码表中依次比较人名进行查找子程序 printline:查找到条目之后,将条目输出主函数main 接收人名函数Input_name 保存人名函数Stor_ name 接收并且保存电话号码函数inphone 电话号码表排序函数Name_ sort 查找电话号码函数Name_ search 输出电话号码表函数printall 输出电话号码条目函数printline 对调条目位置函数exchange 13/24子程序 printall:将整个电话号码表的所有条目依次输出4.3实验结果:程序代码datarea segment tel_name db21 namelen db?namefld db21 d
24、up(?);定义 20个字符的用于存放人名的字符串tel_num db9 tellen db?telfld db9 dup(?);定义 8个字符的用于存放电话号码的字符串tel_tab db50 dup(20 dup(),8 dup();定义可存放 50项纪录的电话号码表tel_sav db28 dup(?),13,10,$list db20 dup(),8 dup(),0dh,0ah,$;定义电话号码表的每个条目string1 dbInput name:$string2 dbInput a telphone number:$string3 dbDo you want a telephone
25、number?(Y/N)$string4 dbname?$string5 dbWould you like to input a telephone list?(Y/N)$string6 dbThere is no list fitting.$string7 dbname telephone$string8 dbDo you want a Tel_Lab?(Y/N)$endadd dw?swapped db0 tel_count db0;计算电话号码表中的条目数量datarea ends prognam segment main proc far;主程序assume cs:prognam,ds
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 报告
限制150内