版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.华 北 科 技 学 院课程设计说明书班级 :姓名 :学号 :课程名称 :汇编语言课程设计课设时间 :2006-12-05 至2006-12-16成绩评定 :1、工作量:2、难易度:a (),b(), c(),d() ,f( )a(),b(), c(),d(),f( )3、答辩情况:基本操作:代码理解:4、报告规范度:5、学习态度:a(),b(),c(),d(),f( )a(),b(),c(),d(),f( )a(),b(),c(),d(),f( )a(),b(),c(),d(),f( )总评成绩 :指导教师 :.一课程设计的目的、任务1.课程设计的目的:使学生综合使用所学过的汇编语言程序设计
2、知识, 掌握结构化程序设计的基本思路和方法,利用所学的基本知识和技能, 发挥自学能力和查找资料的能力, 解决稍微复杂的结构化程序设计问题, 加深对所学知识的理解与掌握, 增强学生利用自己所学知识解决实际问题的能力,为以后的程序开发打下基础。课程设计的目的和要求:( 1)使学生巩固和加强汇编语言课程的理论知识。( 2)使学生掌握汇编语言的基本概念、语法、语义和数据类型的使用特点。( 3)使学生掌握汇编语言程序设计的方法及编程技巧,能正确使用汇编语言编写程序。(3)进一步理解与运用结构化程序设计的思想和方法;学会利用流程图或n-s 图表示算法。( 4) 使学生掌握调试程序的基本方法及上机操作方法。
3、( 5)掌握书写程设计开发文档的能力, 使学生学会撰写课程设计总结报告。课程设计的思想和方法还可以作为学生做毕业论文时的参考资料。( 6)通过查阅手册和文献资料,培养学生独立分析问题和解决问题的能力。为学生做毕业设计打好基础。( 7)初步掌握开发一个小型实用系统的基本方法:结合实际应用的要求,使课程设计既覆盖知识点,又接近工程实际需要。通过激发学习兴趣,调动学生主动学习的积极性,并引导他们根据实际编程要求,训练自己实际分析问题的能力及编程能力,并养成良好的编程习惯。( 8)培养学生的创新能力和创新思维。学生可以根据指导书和相关文献上的参考算法,自己设计出相应的应用程序。( 9)培养学生良好的程
4、序设计风格。在实际编程中,为了提高编程质量,对空行、空格和注释均有要求。 学生在课程设计书写代码时, 应该严格按要求处理, 以便建立良好的程序设计风格。.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 中
7、一个数除以 10,商放在 ax ,余数放在dx循环左移四位nax=0 ?取出 al 低四位加上30h 输出y余数的出栈输出ncx=0 ?y结束十进制矩阵输出开始获得 ax 中一个数逻辑左移一位nal9 ?y加上 07h 变成 a-fn输出一个数ch=0 ?y结束十六进制矩阵输出是否进位?nyn输出 1输出 0cx=0 ?y开始二进制矩阵输出.开始行循环数初始赋值列循环数初始赋值重新定义偏移量和cx边相乘边存储yncx=0 ?y第二矩阵是否有第二列?n行循环数加一是否有下一行?n开始.y三程序实现说明 (介绍程序实现过程, 包括关键代码分析 (注意:应该限制代码的数量).1.矩阵相乘关键代码mu
8、l_ab:;矩阵相乘mov di, 0mov hh, 0;- 嵌套循环 -mul_0:mov ll, 0;-mul_1:mov bx, hh;hh 为空, bx 清零add bx, hhmov si, ll;ll 为空, si清零add si, llmov cx, la;将 4传给 cx;-mul_2:mov ax, mabx;矩阵一的第一个数放进axmov dx, mbsi;矩阵二的第一个数放进dxmul dx;两数相乘add mcdi, ax;结果矩阵第一数先放上axadd bx, 2;地址往下移add si, 2 * lb;地址下移矩阵二列数*2loop mul_2;-add di, 2
9、;地址往下移inc ll;列数加 1cmp ll, lb;比较结果矩阵列数与矩阵二的列数jnz mul_1;-add hh, la;结果矩阵行数cmp hh, ha * la;比较结果矩阵行数数与矩阵一的行数与列数的乘积jb mul_0ret2.十进制转换关键代码print_ax:;将存在 ax 中的数按照十进制输出push bxpush cxpush dxmov bx, 10mov cx, 0p_lop1:mov dx, 0.div bx;直接除以 10,余数在dx 一次输出一个inc cxpush dxcmp ax, 0;商存在 ax 中,接着用来取余数放到dx 里面jnz p_lop1m
10、ov ah, 2p_lop2:pop dxadd dl, 0int 21hloop p_lop2;cx 自加多少次,就自减多少次,输出整个数pop dxpop cxpop bxret3.十六进制转换关键代码hsp proc far;十六进制转换子程序push bxpush cxpush dxmov bx,axmov ch,04d;ch初始定义为 4rotate:mov cl,04d;cl 初始定义为 4rol bx,cl;对操作数进行循环左移4次,每执行一次,把最高位移到最低位,同时还把最高位移到cfmov al,bland al,0fh;取 al 的低四位add al,30h;加上 30h输
11、出cmp al,9;al 与 9比较jbeprint2;小于等于就会跳到print2add al,07h;大于 al 加上 07h ,变成字母 abcdefprint2:mov dl,al;al 给 dl 输出出来mov ah,2int 21hdec ch;ch自减,不为零继续循环上面代码jne rotatemov ah,2mov dl,hint 21hpop dxpop cx.pop bxrethsp endp4.二进制转换关键代码dsp proc far;二进制转换子程序push bxpush cxpush dxmov bx,ax;把数值放到 bx 保护起来, bx 中本身放的就是二进制m
12、ov cx,16;为循环做准备t:shl bx,1;把 bx 的值向左移一位,其高位放在cf标志位里jc print4;如果高位是 1就输出 1jnc print5;如果高位是 0就输出 0print4:mov dl,31h;把要在屏幕上输出的字符预先放到dl 寄存器里, 31h表示字符 1mov ah,2int 21hjmp lprint5:mov dl,30h;把要在屏幕上输出的字符预先放到dl 寄存器里, 31h表示字符 0mov ah,2int 21hl:loop tmov ah,2mov dl,bint 21hpop dxpop cxpop bxretdsp endp5. 运行结果截
13、图菜单截图.矩阵一矩阵二和相乘后矩阵截图(十进制)矩阵三十六机制和二进制截图.四程序总结( 软件完成情况,有哪些收获,存在哪些不足对课程设计有哪些建议)这次课设我完成的主要是矩阵的相乘和输出矩阵的进制转换,以及光标定位,菜单输出等等功能!这次课设的时间有两周,其实主要完成在最后一周,通过这次试验最大的收获就是看程序一定要耐心, 虽然程序是我拼凑而成, 但是基本上已经读懂整个程序,途中遇见几个问题,非常感谢老师和同学们的帮助,最终完成了这个程序。存在的不足之处就是这两个矩阵是固定格式的,不能任意矩阵相乘,希望以后可以改进,这个课设学习了很多,新的知识主要是 bois 功能的调用,主要集中在字体颜
14、色变化和光标的定位,还学到了矩阵相乘中的嵌套循环,这个对于循环反复操作不同的数非常的重要!另外还了解了进制转换的方法,也是利用了循环移位的操作,本来我觉得汇编是个令人头疼的语言,但是你只要紧紧抓住它其中数的变化就行,能够准确定位数的位置及作用,而且还要了解数的及时清零与更新!往往其中很容易混淆的就是数的位置和作用,之前很容易的辨认错误!这次的实验还是学到了很多东西,主要感谢老师和同学的指导,总体上来说, 完成了基本课设要求!希望在以后的学习中,也应该有那种细心钻研的精神!源代码:data segment;=菜单的定义 =str1db *menu:*,13,10mess1 db *1:print
15、 the firstarray:*,13,10mess2 db *2:print the secondarray:*,13,10mess3 db *3:print the hexadecimal systemarray:*,13,10mess4 db *4:print the binary systemarray:*,13,10mess5 db *5:print the decimal systemarray:*,13,10.mess6 db *end*,13,10length1 equ $-str1str2db please make your choose:,13,10;-array1db
16、 the first array is (4*4):,$array2db the second array is (4*1):,$h db print array1*array2(hexadecimal system):,$bdb print array1*array2(binary system):,$ddb print array1*array2(decimal system):,$;-ma dw 11, 12, 13, 14;定义 4*4 矩阵 madw 21, 22, 23, 24dw 31, 32, 33, 34dw 41, 42, 43, 44ha equ 4;行数la equ 4
17、;列数;-mb dw 12;定义 4*1 矩阵 mbdw 11dw 11dw 11hb equ 4lb 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 macromov dl, 10mov ah,2int 21hmov dl ,13mov ah,2int 21hendm; 字符串输出print macro xmov
18、ah,9lea dx, xint 21hendmdata ends;*code segmentassume cs:code, ds:datastart:.mov ax, datamov 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:mo
19、v ah,1int 21hcmp al,1jz l1cmp al,2jz l2cmp al,3jz l3.cmp al,4jz l4cmp al,5jz l5jmp exit;-主程序 -l1: print array1hchhmov bx, offset ma ;输出第一个矩阵mov cx, lamov dx, hacall print_mhchhjmp out1l2: print array2hchhmov bx, offset mb ;输出第二个矩阵mov cx, lbmov dx, hbcall print_m1call huanhanghchhjmp out1l3: print dh
20、chhcall mul_ab;矩阵相乘mov bx, offset mc ;结果十进制输出.mov cx, lcmov dx, hccall print_m2hchhjmp out1l4: print hhchhmov bx, offset mc ;结果十六进制输出mov cx, lcmov dx, hccall print_z2hchhjmp out1l5: print bhchhmov bx, offset mc ;结果二进制输出mov cx, lcmov dx, hccall print_z3exit:mov ah, 4chint 21h;*print_m:; 第一个矩阵输出push c
21、xpush ax; 提示文字,并保护寄存器push dx.pop dxpop axpr2:mov ax, bx; 将 bx数给 axcall print_ax; 直接输出一个数(十进制数)call tab_09; 输出空格add bx, 2; 转到下一个数loop pr2pop cx; 根据列判断一行输入多少数据call huanhang; 输出一行的数后立即换行dec dx;dx 自减jnz print_m;dx 不为零直接跳到上面继续输出余数ret;*print_m1:; 第二个矩阵输出push cxpush axpush dxpop dxpop axpr20:mov ax, bxcall
22、 print_axcall tab_09add bx, 2loop pr20pop cxcall huanhang; 输出一列后立即换行dec dx.jnz print_m1ret;*print_m2:; 相乘矩阵后的输出push cxpush axpush dxpop dxpop axpr21:mov ax, bxcall print_axcall tab_09add bx, 2loop pr21pop cxcall huanhang; 输出一列后立即换行dec dxjnz print_m2ret;*print_ax:; 将存在 ax 中的数按照十进制输出push bxpush cxpush
23、 dxmov bx, 10mov cx, 0p_lop1:mov dx, 0.div bx; 直接除以10,余数在dx一次输出一个inc cxpush dxcmp ax, 0; 商存在 ax 中 , 接着用来取余数放到dx里面jnz p_lop1mov ah, 2p_lop2:pop dxadd dl, 0int 21hloop p_lop2;cx 自加多少次,就自减多少次,输出整个数pop dxpop cxpop bxret;*huanhang:; 段内换行,去掉这个后会陷于死循环!push axpush dxmov ah, 2mov dl, 13int 21hmov dl, 10int 2
24、1hpop dxpop axret;*tab_09:;tab 功能调用,让矩阵的输出更加规范!.push axpush dxmov ah, 2mov dl, 9int 21hpop dxpop axret;&矩阵相乘 &mul_ab:; 矩阵相乘mov di, 0mov hh, 0;-嵌套循环 -mul_0:mov ll, 0;-mul_1:mov bx, hh;hh 为空, bx 清零add bx, hhmov si, ll;ll 为空, si 清零add si, llmov cx, la; 将 4 传给 cx;-mul_2:mov ax, mabx; 矩阵一的第一个数放进axmov dx,
25、 mbsi; 矩阵二的第一个数放进dxmul dx; 两数相乘add mcdi, ax; 结果矩阵第一数先放上axadd bx, 2; 地址往下移.add si, 2 * lb; 地址下移矩阵二列数*2loop mul_2;-add di, 2; 地址往下移inc ll; 列数加 1cmp ll, lb; 比较结果矩阵列数与矩阵二的列数jnz mul_1;-add hh, la; 结果矩阵行数cmp hh, ha * la; 比较结果矩阵行数数与矩阵一的行数与列数的乘积jb mul_0ret;%十六进制输出 %print_z2:; 十六进制矩阵输出push cxpush axpush dxpo
26、p dxpop axprint1:mov ax, bxcall hspcall tab_09add bx, 2loop print1; 第一行输出pop cxcall huanhang; 输出一列后立即换行dec dxjnz print_z2ret.hsp proc far; 十六进制转换子程序push bxpush cxpush dxmov bx,axmov ch,04d;ch 初始定义为4rotate:mov cl,04d;cl 初始定义为4rol bx,cl; 对操作数进行循环左移4 次,每执行一次,把最高位移到最低位,同时还把最高位移到cfmov al,bland al,0fh; 取 al
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中物理 第三章 万有引力定律及其应用 第1节 万有引力定律教学设计 粤教版必修2
- 新教材高中物理 第2章 抛体运动 第4节 生活中的抛体运动教案2 鲁科版必修第二册
- 幼儿园卫生保健消毒培训模板
- 正压接头操作规程与留置针配用
- 人教版八年级上册语文第13课《与朱元思书》说课稿(25秋新教材)
- 人教版第十二章五、六年级体育与健康教学经验交流教学设计
- 神经外科护理工作计划
- 新教材高中生物 第二章 基因和染色体的关系 第1节 第2课时 受精作用教案 新人教版必修第二册
- 花城版歌曲《库斯克邮车》教学设计
- 2026上海电气春季校园招聘300人易考易错模拟试题(共500题)试卷后附参考答案
- 2026新教材语文 4《冀中地道战》第一课时 教学课件
- 2026秋人教版初中英语七年级上册(新教材)教学计划含进度表
- 喷砂工考试题及答案
- 《石材加工企业职业病危害风险分级管控体系实施指南》
- 2026重庆科瑞南海制药有限责任公司招聘15人笔试备考题库及答案详解
- 2026年秋季学期小学三年级信息科技教学计划(人教版2024上册)
- 2026-2030改性塑料产业市场发展分析及发展趋势与投资战略研究报告
- 5.1《从小爱劳动》课件 统编版道德与法治三年级下册
- 九年级生命生态安全教案(完整版)
- 竞选大学心理委员ppt模板
- 矿山供电技术ch1.1矿山供电系统课件
评论
0/150
提交评论