




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、华 北 科 技 学 院课程设计说明书班级: 姓名: 学号: 课程名称: 汇编语言课程设计 课设时间: 2006-12-05 至 2006-12-16 成绩评定:1、工作量: A( ),B( ),C( ),D( ),F( )2、难易度: A( ),B( ),C( ),D( ),F( )3、答辩情况:基本操作: A( ),B( ),C( ),D( ),F( )代码理解: A( ),B( ),C( ),D( ),F( )4、报告规范度: A( ),B( ),C( ),D( ),F( )5、学习态度: A( ),B( ),C( ),D( ),F( )总评成绩: 指导教师: 一 课程设计的目的、任务1.
2、课程设计的目的:使学生综合使用所学过的汇编语言程序设计知识,掌握结构化程序设计的基本思路和方法,利用所学的基本知识和技能,发挥自学能力和查找资料的能力,解决稍微复杂的结构化程序设计问题,加深对所学知识的理解与掌握,增强学生利用自己所学知识解决实际问题的能力,为以后的程序开发打下基础。课程设计的目的和要求:(1)使学生巩固和加强汇编语言课程的理论知识。(2)使学生掌握汇编语言的基本概念、语法、语义和数据类型的使用特点。(3)使学生掌握汇编语言程序设计的方法及编程技巧,能正确使用汇编语言编写程序。(3)进一步理解与运用结构化程序设计的思想和方法;学会利用流程图或N-S图表示算法。(4) 使学生掌握
3、调试程序的基本方法及上机操作方法。(5)掌握书写程设计开发文档的能力,使学生学会撰写课程设计总结报告。课程设计的思想和方法还可以作为学生做毕业论文时的参考资料。(6)通过查阅手册和文献资料,培养学生独立分析问题和解决问题的能力。为学生做毕业设计打好基础。(7)初步掌握开发一个小型实用系统的基本方法:结合实际应用的要求,使课程设计既覆盖知识点,又接近工程实际需要。通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析 问题的能力及编程能力,并养成良好的编程习惯。(8)培养学生的创新能力和创新思维。学生可以根据指导书和相关文献上的参考算法,自己设计出相应的应用程序
4、。(9)培养学生良好的程序设计风格。在实际编程中,为了提高编程质量,对空行、空格和注释均有要求。学生在课程设计书写代码时,应该严格按要求处理,以便建立良 好的程序设计风格。2.课程设计的题目矩阵相乘(1)要求:掌握多重循环程序的设计方法,并熟悉有关矩阵的编程原理。(2)内容:将一个4 X 4 的矩阵与一个4 X 1 的矩阵相乘,将结果存入相应的单元,分别用十进制数、二进制、十六进制形式显示结果。3.课程设计环境(1)硬件:PC机。(2)软件:操作系统为64位Windows7,设计语言为MASM FOR WINDOWS 汇编语言集成实验环境。4.课程设计要求(1)课程设计可采取每人一题,可任选一
5、题进行设计, 至少包含五个功能模块。或者每组完成一个课题,每组成员分工合作完成一个课程设计,每个人的任务不同;(2)可以选择老师提供的参考选题,也可以自选,如果自选,需要将自选题目的详细内容以及实现要求提供给老师,老师批准后方可采用;(3)要求利用结构化程序设计方法以及汇编语言的编程思想来完成系统的设计;(4)要求有欢迎界面、菜单、文件操作,数据使用数组、结构体等均可,键盘操作或鼠标操作均可;(5)模块化程序设计:要求在设计的过程中,按功能定义过程或宏,多个模块化设计可以用文件的形式来实现;(6)学生所选课题必须上机通过,并获得满意的结果;(7)程序书写风格:锯齿型书写格式。二 软件需求分析和
6、设计(1)需求分析本程序主要实现的功能是一个4*4矩阵与4*1矩阵相乘最后得到一个4*1矩阵,并且要求用三种方式输出这个矩阵,分别是二进制和十六进制和十进制。并且这个程序要求菜单的选择。(2)下面就是这个程序的流程图、 开始 菜单选择输出第一个矩阵(十进制) 输出第二个矩阵(十进制) 矩阵相乘运算(矩阵相乘规则)输出结果矩阵(十进制) 输出流程图开始将BX值和地址给AX输出结果矩阵(十六进制)以十进制输出AX的第一个数输出结果矩阵(二进制)NN地址转移下个数,中间TAB功能 结束 列数CX=0? 主流程图 Y行数DX=0?Y 结束开始开始获得AX中一个数获得AX中一个数 循环左移四位除以10,
7、商放在AX,余数放在DX取出AL低四位加上30H输出AX=0?NYAL>9?余数的出栈输出NYNCX=0? N加上07H变成A-F Y输出一个数 结束开始CH=0? 十进制矩阵输出获得AX中一个数Y结束逻辑左移一位是否进位?N 十六进制矩阵输出NY输出0输出1CX=0?Y开始 二进制矩阵输出 开始列循环数初始赋值行循环数初始赋值重新定义偏移量和CXYN边相乘边存储CX=0?YY第二矩阵是否有第二列?N行循环数加一是否有下一行?N开始 三 程序实现说明(介绍程序实现过程,包括关键代码分析(注意:应该限制代码的数量)1.矩阵相乘关键代码MUL_AB: ;矩阵相乘 MOV DI, 0 MOV
8、HH, 0;-嵌套循环- MUL_0: MOV LL, 0;- MUL_1: MOV BX, HH;HH为空,BX清零 ADD BX, HH MOV SI, LL;LL为空,SI清零 ADD SI, LL MOV CX, LA;将4传给CX;- MUL_2: MOV AX, MABX;矩阵一的第一个数放进AX MOV DX, MBSI;矩阵二的第一个数放进DX MUL DX;两数相乘 ADD MCDI, AX;结果矩阵第一数先放上AX ADD BX, 2;地址往下移 ADD SI, 2 * LB;地址下移矩阵二列数*2 LOOP MUL_2;- ADD DI, 2;地址往下移 INC LL;列
9、数加1 CMP LL, LB;比较结果矩阵列数与矩阵二的列数 JNZ MUL_1;- ADD HH, LA;结果矩阵行数 CMP HH, HA * LA;比较结果矩阵行数数与矩阵一的行数与列数的乘积 JB MUL_0 RET2.十进制转换关键代码PRINT_AX:;将存在AX中的数按照十进制输出 PUSH BX PUSH CX PUSH DX MOV BX, 10 MOV CX, 0 P_LOP1: MOV DX, 0 DIV BX ;直接除以10,余数在DX一次输出一个 INC CX PUSH DX CMP AX, 0 ;商存在AX中,接着用来取余数放到DX里面 JNZ P_LOP1 MOV
10、 AH, 2 P_LOP2: POP DX ADD DL, '0' INT 21H LOOP P_LOP2 ;CX自加多少次,就自减多少次,输出整个数 POP DX POP CX POP BX RET3.十六进制转换关键代码HSP PROC FAR;十六进制转换子程序 PUSH BX PUSH CX PUSH DX MOV BX,AX MOV CH,04D;CH初始定义为4 ROTATE: MOV CL,04D;CL初始定义为4 ROL BX,CL;对操作数进行循环左移4次,每执行一次,把最高位移到最低位,同时还把最高位移到CF MOV AL,BL AND AL,0FH;取AL
11、的低四位 ADD AL,30H;加上30H输出 CMP AL,'9'AL与9比较 JBE PRINT2;小于等于就会跳到PRINT2 ADD AL,07H ;大于AL加上07H ,变成字母ABCDEF PRINT2: MOV DL,AL;AL给DL输出出来 MOV AH,2 INT 21H DEC CH;ch自减,不为零继续循环上面代码 JNE ROTATE MOV AH,2 MOV DL,'H' INT 21H POP DX POP CX POP BX RET HSP ENDP4.二进制转换关键代码DSP PROC FAR;二进制转换子程序 PUSH BX P
12、USH CX PUSH DX MOV BX,AX;把数值放到BX保护起来,BX中本身放的就是二进制 MOV CX,16;为循环做准备 T: SHL BX,1 ;把BX的值向左移一位,其高位放在CF标志位里 JC PRINT4 ;如果高位是1就输出1 JNC PRINT5 ;如果高位是0就输出0 PRINT4: MOV DL,31H;把要在屏幕上输出的字符预先放到DL寄存器里,31H表示字符1 MOV AH,2 INT 21H JMP L PRINT5: MOV DL,30H;把要在屏幕上输出的字符预先放到DL寄存器里,31H表示字符0 MOV AH,2 INT 21H L: LOOP T MO
13、V AH,2 MOV DL,'B' INT 21H POP DX POP CX POP BX RET DSP ENDP5. 运行结果截图菜单截图矩阵一矩阵二和相乘后矩阵截图(十进制)矩阵三十六机制和二进制截图四 程序总结(软件完成情况,有哪些收获,存在哪些不足对课程设计有哪些建议)这次课设我完成的主要是矩阵的相乘和输出矩阵的进制转换,以及光标定位,菜单输出等等功能!这次课设的时间有两周,其实主要完成在最后一周,通过这次试验最大的收获就是看程序一定要耐心,虽然程序是我拼凑而成,但是基本上已经读懂整个程序,途中遇见几个问题,非常感谢老师和同学们的帮助,最终完成了这个程序。存在的不足
14、之处就是这两个矩阵是固定格式的,不能任意矩阵相乘,希望以后可以改进,这个课设学习了很多,新的知识主要是BOIS功能的调用,主要集中在字体颜色变化和光标的定位,还学到了矩阵相乘中的嵌套循环,这个对于循环反复操作不同的数非常的重要!另外还了解了进制转换的方法,也是利用了循环移位的操作,本来我觉得汇编是个令人头疼的语言,但是你只要紧紧抓住它其中数的变化就行,能够准确定位数的位置及作用,而且还要了解数的及时清零与更新!往往其中很容易混淆的就是数的位置和作用,之前很容易的辨认错误!这次的实验还是学到了很多东西,主要感谢老师和同学的指导,总体上来说,完成了基本课设要求!希望在以后的学习中,也应该有那种细心
15、钻研的精神!源代码:DATA SEGMENT;=菜单的定义=str1 db '*Menu:*',13,10 mess1 db ' *1:print the first array:*',13,10 mess2 db ' *2:print the second array:*',13,10 mess3 db ' *3:print the Hexadecimal system array:*',13,10 mess4 db ' *4:print the Binary system array:*',13,10 mess
16、5 db ' *5:print the Decimal system array:*',13,10 mess6 db ' *END*',13,10 length1 equ $-str1STR2 db 'please make your choose:',13,10;-array1 DB 'the first array is (4*4):','$'array2 DB 'the second array is (4*1):','$'H DB 'print array1*arra
17、y2(Hexadecimal system):','$'B DB 'print array1*array2(Binary system):','$'D DB 'print array1*array2(Decimal system):','$'-MA DW 11, 12, 13, 14 ;定义4*4矩阵MA DW 21, 22, 23, 24 DW 31, 32, 33, 34 DW 41, 42, 43, 44HA EQU 4 ;行数LA EQU 4 ;列数;-MB DW 12 ;定义4*1矩阵MB DW
18、11 DW 11 DW 11HB EQU 4 LB EQU 1;-MC DW HA * LB DUP(?) ;定义结果矩阵HC EQU HALC EQU LBHH DW ?LL DW ?;=宏的定义=;-光标的初始定义-cursor macro row,rankmov ah,2mov dh,rowmov dl,rankmov bh,0int 10hendm;回车换行hchh macro mov dl, 10mov ah,2int 21hmov dl ,13mov ah,2int 21hendm;字符串输出PRINT macro xmov ah,9lea dx, xint 21hendmDATA
19、 ENDS;* CODE SEGMENT ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX;=光标和菜单字体颜色设置= mov al,3mov ah,00hint 10hmov bp,seg str1mov es,bpmov bp,offset str1mov cx,length1mov dx,0mov bl,05h;菜单红字定义mov al,0cursor 2,15;菜单光标初始定义mov ah,13hint 10h;= ;-菜单跳转选项-hchhcursor 12,0out1:mov ah,1int 21hcmp al,'
20、1'jz L1cmp al,'2'jz L2cmp al,'3'jz L3cmp al,'4'jz L4cmp al,'5'jz L5jmp EXIT;-主程序- L1: PRINT array1 HCHH MOV BX, OFFSET MA ;输出第一个矩阵 MOV CX, LA MOV DX, HA CALL PRINT_M HCHH JMP OUT1 L2: PRINT array2 HCHH MOV BX, OFFSET MB ;输出第二个矩阵 MOV CX, LB MOV DX, HB CALL PRINT_M1
21、 CALL huanhang HCHH JMP OUT1 L3: PRINT D HCHH CALL MUL_AB ;矩阵相乘 MOV BX, OFFSET MC ;结果十进制输出 MOV CX, LC MOV DX, HC CALL PRINT_M2 HCHH JMP OUT1 L4: PRINT H HCHH MOV BX, OFFSET MC ;结果十六进制输出 MOV CX, LC MOV DX, HC CALL PRINT_Z2 HCHH JMP OUT1 L5: PRINT B HCHH MOV BX, OFFSET MC ;结果二进制输出 MOV CX, LC MOV DX, H
22、C CALL PRINT_Z3 EXIT: MOV AH, 4CH INT 21H;* PRINT_M: ;第一个矩阵输出 PUSH CX push ax ;提示文字,并保护寄存器 push dx pop dx pop ax PR2: MOV AX, BX;将BX数给AX CALL PRINT_AX ;直接输出一个数(十进制数) CALL TAB_09 ;输出空格 ADD BX, 2 ;转到下一个数 LOOP PR2 POP CX ;根据列判断一行输入多少数据 CALL huanhang;输出一行的数后立即换行 DEC DX;DX自减 JNZ PRINT_M;DX不为零直接跳到上面继续输出余数
23、 RET;* PRINT_M1: ;第二个矩阵输出 PUSH CX push ax push dx pop dx pop ax PR20: MOV AX, BX CALL PRINT_AX CALL TAB_09 ADD BX, 2 LOOP PR20 POP CX CALL huanhang;输出一列后立即换行 DEC DX JNZ PRINT_M1 RET ;* PRINT_M2: ;相乘矩阵后的输出 PUSH CX push ax push dx pop dx pop ax PR21: MOV AX, BX CALL PRINT_AX CALL TAB_09 ADD BX, 2 LOOP
24、 PR21 POP CX CALL huanhang;输出一列后立即换行 DEC DX JNZ PRINT_M2 RET;* PRINT_AX:;将存在AX中的数按照十进制输出 PUSH BX PUSH CX PUSH DX MOV BX, 10 MOV CX, 0 P_LOP1: MOV DX, 0 DIV BX ;直接除以10,余数在DX一次输出一个 INC CX PUSH DX CMP AX, 0 ;商存在AX中,接着用来取余数放到DX里面 JNZ P_LOP1 MOV AH, 2 P_LOP2: POP DX ADD DL, '0' INT 21H LOOP P_LOP
25、2 ;CX自加多少次,就自减多少次,输出整个数 POP DX POP CX POP BX RET;* huanhang:;段内换行,去掉这个后会陷于死循环! PUSH AX PUSH DX MOV AH, 2 MOV DL, 13 INT 21H MOV DL, 10 INT 21H POP DX POP AX RET;* TAB_09:;TAB功能调用,让矩阵的输出更加规范! PUSH AX PUSH DX MOV AH, 2 MOV DL, 9 INT 21H POP DX POP AX RET;&&&&&&&&&&a
26、mp;&&&&&矩阵相乘&&&&&&&&&&&&&& MUL_AB: ;矩阵相乘 MOV DI, 0 MOV HH, 0;-嵌套循环- MUL_0: MOV LL, 0;- MUL_1: MOV BX, HH;HH为空,BX清零 ADD BX, HH MOV SI, LL;LL为空,SI清零 ADD SI, LL MOV CX, LA;将4传给CX;- MUL_2: MOV AX, MABX;矩阵一的第一个数放进AX MOV DX, MBSI;
27、矩阵二的第一个数放进DX MUL DX;两数相乘 ADD MCDI, AX;结果矩阵第一数先放上AX ADD BX, 2;地址往下移 ADD SI, 2 * LB;地址下移矩阵二列数*2 LOOP MUL_2;- ADD DI, 2;地址往下移 INC LL;列数加1 CMP LL, LB;比较结果矩阵列数与矩阵二的列数 JNZ MUL_1;- ADD HH, LA;结果矩阵行数 CMP HH, HA * LA;比较结果矩阵行数数与矩阵一的行数与列数的乘积 JB MUL_0 RET;%十六进制输出% PRINT_Z2: ;十六进制矩阵输出 PUSH CX push ax push dx pop dx pop ax print1: MOV AX, BX CALL HSP CALL TAB_09 ADD BX, 2 LOOP print1;第一行输出 POP CX CALL huanhang;输出一列后立即换行 DEC DX JNZ PRINT_Z2 RETHSP PROC FAR;十六进制转换子程序 PUSH BX PUSH CX PUSH DX MOV BX,AX MOV CH,04D;CH初始定义为4 ROTATE: MOV CL,04D;CL初始定义为4 ROL BX,CL;对操作数进行循环左移4次,每执行一次,把最高位移到最低位,同时还把最高位移到CF MOV AL,B
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 上海对外经贸大学《小学课程与教学研究》2023-2024学年第二学期期末试卷
- 2025年数字营销基础知识考试题及答案
- 2025年药物经济学考试试卷及答案
- 2025年图书情报专业考研试题及答案
- 四川省遂宁市2025年初三1月月考物理试题试卷含解析
- 丽江文化旅游学院《排水管网系统》2023-2024学年第二学期期末试卷
- 无锡科技职业学院《单片机与接口技术》2023-2024学年第二学期期末试卷
- 天津市津南区市级名校2025届初三中考冲刺第二次考试生物试题试卷含解析
- 内蒙古乌兰察布市重点达标名校2025年初三第一次调研测化学试题含解析
- 高清影视后期特效渲染农场租赁合同模板
- 岁月不负母亲时光留住温情 课件高二下学期母亲节(5月11日)主题班会
- 2025年公共卫生与预防医学考试试卷及答案
- 2024年四川公安厅招聘警务辅助人员笔试真题
- 网站联盟广告专题报告
- 广东入团考试试题及答案
- 2025年四川省成都市高新区中考数学二诊试卷
- 平安人寿代理合同协议
- 贵州烟草专卖局招聘笔试题库2025
- 高考数学总复习第九章概率9.1随机事件的概率
- 中国证券金融股份有限公司招聘笔试真题2024
- 钢琴艺术培训管理制度
评论
0/150
提交评论