汇编语言课设大作业
- 格式:docx
- 大小:12.71 KB
- 文档页数:2
汇编语言程序设计教案及习题答案教案章节:一、汇编语言简介1. 汇编语言的概念2. 汇编语言的特点3. 汇编语言的应用领域二、汇编语言的基本语法1. 数据类型及表示2. 指令格式及分类3. 寄存器使用规则三、汇编语言程序设计步骤1. 分析需求,确定程序功能2. 选择合适的汇编语言及开发环境3. 编写汇编代码,调试程序4. 优化程序性能四、常用汇编指令及功能1. 数据传输指令2. 算术运算指令3. 逻辑运算指令4. 控制流指令5. 字符串操作指令6. 中断指令五、汇编语言与C语言的接口编程1. extern声明汇编函数2. 调用汇编函数的方法3. 汇编函数与C函数的数据交换4. 实例分析:汇编语言实现字符串排序习题答案:一、汇编语言简介1. 汇编语言是一种低级编程语言,用于编写计算机程序。
(正确)2. 汇编语言可以直接操作计算机硬件资源。
(正确)3. 汇编语言程序可读性差,不易维护。
(正确)二、汇编语言的基本语法1. 数据类型及表示a. 字节:8位(正确)b. 字:16位(正确)c. 双字:32位(正确)d. 四字:64位(正确)2. 指令格式及分类a. 操作码(正确)b. 操作数(正确)c. 寄存器(正确)d. 标志位(正确)3. 寄存器使用规则a. 通用寄存器:AX, BX, CX, DX(正确)b. 段寄存器:CS, DS, ES, SS(正确)c. 指令指针:IP(正确)d. 状态寄存器:FLAGS(正确)三、汇编语言程序设计步骤1. 分析需求,确定程序功能(正确)2. 选择合适的汇编语言及开发环境(正确)3. 编写汇编代码,调试程序(正确)4. 优化程序性能(正确)四、常用汇编指令及功能1. 数据传输指令a. MOV:数据传送(正确)b. PUSH:压栈(正确)c. POP:出栈(正确)d. XCHG:交换数据(正确)2. 算术运算指令a. ADD:加法(正确)b. SUB:减法(正确)c. MUL:无符号乘法(正确)d. IMUL:有符号乘法(正确)3. 逻辑运算指令a. AND:逻辑与(正确)b. OR:逻辑或(正确)c. XOR:逻辑异或(正确)d. NOT:逻辑非(正确)4. 控制流指令a. JMP:无条件跳转(正确)b. JE:相等跳转(正确)c. JNE:不相等跳转(正确)5. 字符串操作指令a. MOVS:字符串移动(正确)b. CMPS:字符串比较(正确)c. SCAS:字符串扫描(正确)d. LODS:字符串装载(正确)6. 中断指令a. INT:软件中断(正确)b. INTO:中断向量表(正确)五、汇编语言与C语言的接口编程1. extern声明汇编函数(正确)2. 调用汇编函数的方法(正确)3. 汇编函数与C函数的数据交换(正确)4. 实例分析:汇编语言实现字符串排序(正确)汇编语言程序设计教案及习题答案教案章节:六、汇编语言的输入与输出1. 输入输出指令2. 字符串操作指令3. 实例分析:编写一个简单的输入输出程序七、汇编语言的杂项指令1. 杂项指令的概念2. 常用杂项指令及其功能3. 实例分析:杂项指令的应用八、汇编语言的子程序调用1. 子程序调用的概念2. 子程序的定义与调用3. 子程序的返回4. 实例分析:子程序在汇编语言中的应用九、汇编语言的程序举例1. 实例一:计算两个数的和2. 实例二:字符串的复制3. 实例三:数制的转换4. 实例四:文件的读写十、汇编语言程序的调试与优化1. 调试工具的使用2. 调试方法与技巧3. 程序优化的概念4. 程序优化的方法与技巧习题答案:六、汇编语言的输入与输出1. 输入输出指令a. IN:输入指令(正确)b. OUT:输出指令(正确)c. INPUT:输入函数(正确)d. PRINT:输出函数(正确)2. 字符串操作指令a. MOVS:字符串移动(正确)b. CMPS:字符串比较(正确)c. SCAS:字符串扫描(正确)d. LODS:字符串装载(正确)3. 实例分析:编写一个简单的输入输出程序(正确)七、汇编语言的杂项指令1. 杂项指令的概念(正确)2. 常用杂项指令及其功能a. NOP:无操作(正确)b. HLT:停止CPU运行(正确)c. CMC:翻转标志位(正确)d. ARPL:寄存器之间交换(正确)3. 实例分析:杂项指令的应用(正确)八、汇编语言的子程序调用1. 子程序调用的概念(正确)2. 子程序的定义与调用a. 定义子程序(正确)b. 调用子程序(正确)3. 子程序的返回(正确)4. 实例分析:子程序在汇编语言中的应用(正确)九、汇编语言的程序举例1. 实例一:计算两个数的和(正确)2. 实例二:字符串的复制(正确)3. 实例三:数制的转换(正确)4. 实例四:文件的读写(正确)十、汇编语言程序的调试与优化1. 调试工具的使用(正确)2. 调试方法与技巧(正确)3. 程序优化的概念(正确)4. 程序优化的方法与技巧(正确)汇编语言程序设计教案及习题答案教案章节:十一、汇编语言与操作系统1. 操作系统的概念2. 汇编语言在操作系统中的应用3. 实例分析:汇编语言编写简单的操作系统十二、汇编语言与设备驱动程序1. 设备驱动程序的概念2. 汇编语言在设备驱动程序开发中的应用3. 实例分析:汇编语言编写简单的设备驱动程序十三、汇编语言与嵌入式系统1. 嵌入式系统的概念2. 汇编语言在嵌入式系统中的应用3. 实例分析:汇编语言编写简单的嵌入式系统十四、汇编语言与汇编器的使用1. 汇编器的概念2. 汇编器的使用方法3. 实例分析:使用汇编器编写和调试汇编程序十五、汇编语言与汇编语言的未来发展1. 汇编语言的发展趋势2. 汇编语言在未来的应用领域3. 汇编语言学习的方法与建议习题答案:十一、汇编语言与操作系统1. 操作系统的概念(正确)2. 汇编语言在操作系统中的应用(正确)3. 实例分析:汇编语言编写简单的操作系统(正确)十二、汇编语言与设备驱动程序1. 设备驱动程序的概念(正确)2. 汇编语言在设备驱动程序开发中的应用(正确)3. 实例分析:汇编语言编写简单的设备驱动程序(正确)十三、汇编语言与嵌入式系统1. 嵌入式系统的概念(正确)2. 汇编语言在嵌入式系统中的应用(正确)3. 实例分析:汇编语言编写简单的嵌入式系统(正确)十四、汇编语言与汇编器的使用1. 汇编器的概念(正确)2. 汇编器的使用方法(正确)3. 实例分析:使用汇编器编写和调试汇编程序(正确)十五、汇编语言与汇编语言的未来发展1. 汇编语言的发展趋势(正确)2. 汇编语言在未来的应用领域(正确)3. 汇编语言学习的方法与建议(正确)重点和难点解析本文主要介绍了汇编语言程序设计的基础知识和应用领域,通过详细的章节安排,从汇编语言的基本概念、语法规则、程序设计步骤、常用指令及其功能、输入输出操作、杂项指令、子程序调用、程序举例、调试与优化等方面进行了深入讲解。
2009 汇编语言程序设计大型作业题目一、作业题目2009年汇编语言程序设计大型作业给出了4道题目,供大家凭自己的兴趣自由选择其中之一完成。
这4道作业题目如下:1.汉字显示程序2.矩阵乘法程序3.计算器程序(WIN32 ASM编程)4.万年历程序(WIN32 ASM编程)本汇编语言程序设计大型作业题目可以在汇编网站中选择进入“汇编语言教学网站->资料下载”下载。
我们会在该网站论坛上答疑,以帮助大家更好的完成这次程序设计大型作业。
二、交付的文档材料1.程序系统说明书内容包括:(1)程序系统总体的功能模块调用图及模块功能说明。
(2)程序系统的详细框图(每个子程序的流程图)。
(3)程序界面图。
(4)程序清单。
2.设计和实现的技术特点、不足和改进的建议3.课程设计的体会。
4.程序源程序和可执行程序三、评分说明独立完成:60分,雷同或抄袭者不及格;设计技术及技巧使用:25分;文档质量:10分;按时完成:5分。
可以自主扩充功能,有创新加分。
四、参考书1.课本2.《IBM-PC汇编语言程序设计》清华大学出版社五、交付时间:课表安排上机时间结束后的10天内。
题目一汉字显示程序一、题目要求编写一个汉字显示程序,根据字库文件显示汉字。
程序功能:1.从键盘输入汉字区位码;2.从磁盘上读取汉字点阵;3.在屏幕上显示汉字;4.从键盘输入放大倍数,在屏幕上显示放大的汉字。
二、重点考察1.用汇编实现简单的算法。
2.用汇编实现简单的数据结构。
3.INT 21H系统功能调用中有关文件的操作。
4.综合解决问题的能力。
三、参考材料以上网址可下载字库文件chs16.fon。
下面介绍一下相关知识:1.汉字的机内表示根据我国对汉字使用频度的研究,可把汉字划分为高频字(约100个),常用字(约3000个),次常用字(约4000个),罕见字(约8000个)和死字(约45000个)。
也就是说,正在使用的汉字字种达15000多个。
我国于l981年5月1日起实施的《信息交换用汉字编码字符集(基本集)》GB2312—80国家标准中,把高频字、常用字和次常用字归结为汉字基本字符集(共6763个字),再按出现的频度分为一级汉字3755个(按拼音排序)和二级汉字3008个(按汉字部首排序),加上一般符号(西文字母、数字和图形符号等)700个,共8000多个。
学习中心:专业:年级:年春/秋季学号:学生:题目:1.谈谈你对本课程学习过程中心得体会与建议?2.《汇编语言程序设计》课程设计,从如下5个题目中任选其一作答。
《汇编语言程序设计》课程设计注意:从如下5个题目中任选其一作答。
总则:只能使用汇编语言进行编制,不能选用C/C++等高档语言作业提交:大作业上交时文献名写法为:[姓名奥鹏卡号学习中心](如:戴卫东浙江台州奥鹏学习中心[1]VIP)以附件word文档形式上交离线作业(附件大小限制在10M以内),选取已完毕作业(注意命名),点提交即可。
如下图所示。
注意事项:独立完毕作业,不准抄袭其她人或者请人代做,如有雷同作业,成绩以零分计!题目一:进制转换程序要求:(1)撰写一份word文档,里面涉及(算法思路、算法程序框图、重要函数代码、使用指令详细含义)章节。
(2)算法思路:例如可设计二进制转化十六进制算法,简朴简介该算法基本思想,100字左右即可。
(3)算法程序框图:绘制流程图或原理图,从算法开始到结束程序框图。
(4)重要函数代码:列出算法详细代码。
(5)列出算法中使用指令含义,例如解释MOV指令含义,ADD指令含义,至少撰写十个指令。
总则:只能使用汇编语言进行编制,不能选用C/C++等高档语言!题目二:冒泡排序算法要求:(1)撰写一份word文档,里面涉及(算法思路、算法程序框图、重要函数代码、使用指令详细含义)章节。
(2)算法思路:简朴简介冒泡排序算法基本思想,至少100字。
(3)算法程序框图:绘制流程图或原理图,从算法开始到结束程序框图。
(4)重要函数代码:列出算法详细代码,如讲一种首地址为AN字数组,编制程序将该数组中数据按照从大到小排序。
(5)列出算法中使用指令含义,例如解释MOV指令含义,CMP指令含义,至少撰写十个指令。
总则:只能使用汇编语言进行编制,不能选用C/C++等高档语言!题目三:设立标志位算法要求:(1)撰写一份word文档,里面涉及(算法思路、算法程序框图、重要函数代码、使用指令详细含义)章节。
题目一通用进制转换程序一、题目要求实现不同进制之间的相互转换。
(常用进制二、八、十、十六进制)程序功能:1.能通过键盘输入任一种进制,有相应的提示信息。
例如please input a Binary data:2. 输入的数据要有容错检测。
例如:输入的二进制数据为1200,则应该出现错误信息提示。
(因为2在二进制中是不允许的3.输出的数据要有进制选择。
例如:请选择输出数据的进制(0: 二进制,1: 八进制……)二、重点考察1.用汇编实现简单的算法。
2.用汇编实现简单的数据结构。
3.可执行程序的参数使用。
4.INT 21H系统功能调用中有关显示与输出的操作5.综合解决问题的能力。
题目二两位数加减乘除程序一、题目要求实现任意两位数+、-、×、÷运算。
程序功能:1.通过键盘输入一个算式,有相应的提示信息。
例如请输入一个两位数的+-×÷运算算式:2. 输入的数据要有容错检测。
例如:输入的数据为12*500,则应提示“数据超出了两位数”或其它3.计算输入算式的结果并将结果在屏幕上显示。
例如:12/6 = 2二、重点考察1.用汇编实现简单的算法。
2.用汇编实现简单的数据结构。
3.可执行程序的参数使用。
4.INT 21H系统功能调用中有关显示与输出的操作5.综合解决问题的能力。
题目三高精度乘法程序设计一、题目要求实现高精度乘法运算。
程序功能:1.通过键盘输入任意两个正整数,有相应的提示信息。
例如请输入两个任意正整数:2. 输入的数据要有容错检测。
例如:输入的数据为12*500.45,则应提示“数据超出了两位数”或其它3.计算输入算式的结果并将结果在屏幕上显示。
二、重点考察1.用汇编实现简单的算法。
2.用汇编实现简单的数据结构。
3.可执行程序的参数使用。
4.INT 21H系统功能调用中有关显示与输出的操作5.综合解决问题的能力。
汇编语言大作业课程设计一、课程目标知识目标:1. 学生能理解汇编语言的基本概念,掌握汇编指令的使用和程序结构;2. 学生能描述计算机硬件与汇编语言之间的关系,了解汇编语言在计算机科学中的地位;3. 学生掌握汇编语言编程技巧,能阅读和分析简单的汇编程序;4. 学生了解汇编语言在逆向工程和系统底层开发中的应用。
技能目标:1. 学生能运用汇编语言编写简单的程序,实现基本的输入输出、运算和控制流程;2. 学生能通过调试工具对汇编程序进行调试,找出并修正程序中的错误;3. 学生能运用汇编语言解决实际问题,如编写一个简单的系统调用程序。
情感态度价值观目标:1. 学生培养对计算机底层原理的兴趣,激发探究精神,提高自主学习和解决问题的能力;2. 学生认识到汇编语言在计算机科学中的重要作用,增强对计算机科学的热爱;3. 学生通过汇编语言学习,培养团队合作意识,提高沟通表达能力和协作能力。
分析课程性质、学生特点和教学要求,本课程目标旨在使学生在掌握汇编语言基本知识的基础上,提高实际编程能力,培养解决实际问题的能力。
同时,注重培养学生对计算机科学的兴趣和热爱,提高学生的综合素质。
课程目标具体、可衡量,为后续教学设计和评估提供明确依据。
二、教学内容1. 汇编语言基础知识:介绍汇编语言的基本概念、组成元素、指令系统及其功能;- 教材章节:第1章 汇编语言概述- 内容列举:汇编指令、寄存器、内存寻址、数据类型、程序结构等。
2. 汇编指令与程序设计:学习汇编指令的使用,掌握汇编程序设计的基本技巧;- 教材章节:第2章 汇编指令与程序设计- 内容列举:算术运算指令、逻辑运算指令、控制流指令、子程序调用等。
3. 汇编语言与计算机硬件:了解汇编语言与计算机硬件的关系,分析硬件对汇编程序的影响;- 教材章节:第3章 计算机硬件与汇编语言- 内容列举:CPU结构、寄存器组织、内存管理、中断处理等。
4. 汇编语言编程实践:通过实例分析,使学生掌握汇编语言编程方法和技巧;- 教材章节:第4章 汇编语言编程实践- 内容列举:输入输出编程、字符串处理、数值运算、系统调用等。
汇编语言大作业C语言的秘密2014年11月19日目录引言 (5)1. 比较C语言与ASM要素 (5)2. 深入阐述c语言实现 (5)第一章简要描述对应关系 (5)1. 常量 (5)2. 不同类型变量 (5)| 一般数据类型 (5)| 指针 (5)| 字符串 (6)| 多维数组 (6)| 结构体 (6)| 类 (6)3.计算常、变量表达式 (7)| 简单计算 (7)| 位运算 (7)4.宏 (7)5.函数,子程序 (8)6.其他结构的汇编对应 (8)第二章深入阐述C语言的实现 (8)1. 内存的使用 (8)| 程序头 (8)| 代码段 (8)| 部分无法用立即数表示的常量 (8)| 声明注释 (9)| 全局变量,静态变量 (9)| 需求文件,函数,链接库等 (9)| 栈 (10)2.类型 (10)全局变量和局部变量的不同分配 (10)普通变量 (11)字符串 (11)多维数组 (11)指针 (11)结构体 (11)类 (12)3.指针 (14)存储方式 (14)指针取值(*p) (14)指针传递 (14)4.函数 (14)确保堆栈平衡(上层函数) (14)传参数(上层函数) (15)中间层 (15)函数保护主ebp (15)堆栈让出子程序变量空间 (16)执行函数体 (16)准备返回值 (16)5.堆栈框架 (18)6.全局、局部变量 (19)全局变量 (19)局部变量 (19)7.算数运算及表达式计算 (19)常量表达式 (20)简单变量表达式计算 (20)需要存储中间变量的表达式计算 (20)8.C语言编译、连接、装入内存 (21)编译 (21)链接 (21)装入内存 (21)9.C语言IO功能实现 (21)第三章c语言与汇编语言优缺点及适应场合 (21)1.C语言优点,汇编语言的不足 (21)2.汇编语言优点,c语言的不足 (21)3.c语言使用场合 (22)4.汇编语言使用场合 (22)第四章课程收获及想法 (22)1.收获及想法 (22)2.一些建议 (23)引言1.比较C语言与ASM要素具体比较内容为:各种类型-含字符串及多维数组、指针、结构联合-可嵌套、类-可继承等,常量变量及表达式,算术及逻辑运算,宏与子程序-函数,全局变量、局部变量-含静态变量,参数及传递-传值或地址、返回值等。
大连理工大学远程与继续教育学院《汇编语言程序设计》课程设计题目:进制转换程序1.谈谈你对本课程学习过程中的心得体会与建议?汇编语言程序设计是我们计算机专科的一门专业课。
本课程是面向机器的一门编程语言课。
在对汇编语言的学习过程中,可以对计算机组成原理有更深入的了解,同时掌握汇编语言对于某些硬件编程比如单片机开发和嵌入式系统的开发应用也是必不可少的。
汇编语言相比于其他高级语言明显的优点就是运行速度快,而缺点就是需要兼顾机器本身的硬件结构特点进行编程,因此学习本课程要多实践多思考。
通过本课程的学习可以对汇编语言有一个整体的把握和认识。
当我刚开始选择这个题目是因为课本上有一个相近的代码转换,所以感觉这个题目应该很好写。
可是等到真正动手的时候就感到了困难。
首先是对字符串的输入输出的处理,解决不了就改成了字母大小写转换是每次只输入一个字母,然后根据其大小写转换,如大写就转换成小写,否则反之。
然而在随后的进制转换中用遇到了同样的问题,发现这是一个不能不解决的问题,随后查阅了资料才解决。
随后实在数值转换过程中对模块的设计上又出现了问题。
最初的构想是设计六个模块分别对应相应的数值转换功能。
可是在三个写好以后发现了下面要写的代码有很多重复的地方,于是就把这些重复的代码定义成了子函数来使用然后发现将程序按照输入、输出的不同来分模块,以BX作为连接,比原来的程序更为简洁,逻辑上也更加清楚,有种豁然开朗的感觉。
在改进程序的过程中感到非常有成就感。
在编写代码的过程中让我充分感受到了不同编程语言之间的差别。
对与高级语言来说或许是很简单的一个程序或者只需要调用已有的函数库,可是对于汇编来说却要写上几十行甚至更多的代码。
可是更加深刻的了解了寄存器、存储器之间的数据流向,因为每个考虑不周都会导致一大堆的错误出现,常常令人感到一种无力感,想要放弃。
当程序一步步接近完成,看着子函数一个个都运行成功,再组合到一起,那种喜悦是无与伦比,之前所受到的苦楚又是那么的微不足道。
汇编语言程序设计期末大作业一、引言汇编语言是一种低级语言,直接操作计算机硬件。
虽然汇编语言相对于高级语言来说更加底层,编写汇编语言程序可能需要更多的代码和时间,但其执行效率和对硬件的控制程度是高级语言无法比拟的。
本期末大作业旨在通过设计并编写一个汇编语言程序,巩固并应用所学的汇编语言知识。
二、设计目标本次大作业的设计目标为实现一个简单的文件加密和解密程序。
用户可以通过命令行指定需要加密或解密的文件,以及密钥。
程序将读取文件的数据,使用密钥进行加密或解密操作,并将结果保存到相应的加密或解密文件中。
三、功能设计1.加密文件:用户通过命令行参数指定待加密的文件和密钥,程序读取文件的数据,使用密钥对数据进行加密,并将结果保存到加密文件中。
加密算法可以自定,但必须保证加密后的文件无法通过简单方法还原。
2.解密文件:用户通过命令行参数指定待解密的文件和密钥,程序读取文件的数据,使用密钥对数据进行解密,并将结果保存到解密文件中。
解密算法应与加密算法对应,能够正确还原加密的文件。
四、实现思路1.程序入口:使用指令跳转和条件判断实现程序的命令行参数解析,根据用户输入的参数确定是进行加密还是解密操作。
2.文件读取和写入:使用相应的系统调用实现对文件的读取和写入操作。
通过指定的文件路径打开文件并读取文件的数据,然后将加密或解密后的结果写入相应的加密或解密文件。
3.密钥和数据处理:将读取到的文件数据与密钥进行处理(加密或解密),处理的方式可以是异或运算、位移操作等。
具体实现可以参考课程中学习到的汇编指令和技巧。
将处理后的数据写入加密或解密文件中。
五、编程与调试在开始编写程序之前,可以先分析并确定所需的汇编指令和算法。
在编写过程中,要注重代码的可读性和可维护性,使用注释对关键代码进行解释和说明。
编码完成后,应进行逐条指令的调试,可以使用调试器进行单步调试,查看代码的执行情况和计算结果是否正确。
六、参考资料1.操作系统与实验教程2.汇编语言程序设计教材3.汇编语言在线学习资源七、总结通过本次汇编语言程序设计期末大作业,我深入理解了汇编语言的编程思想和机器指令的执行过程。
汇编语言程序设计期末大作业:编写一完整的汇编语言源程序,实现从键盘输入一个班(不少于10人)的学生记录(学号:8位数字、姓名:不多余10个英文字符,语文:0-100的整数、数学:0-100的整数、英语:0-100的整数)后,(1)将输入的记录保存在C盘根目录下名为stuscore.dat的文件中;(2)按照各科成绩总分先高后低的顺序输出全部学生记录和排名顺序;(3)输出总分高于班平均总分的全部学生记录。
要求:元月4日前提交一份纸质报告(班长统一收齐)。
大作业格式:1.标题:汇编语言程序设计期末大作业2.作业题目:(上述)3.算法分析(流程图)4.实现代码(必须含注释)5.实验结果(汇编、连接、运行的截图)6.总结代码实现student struct ;定义结构Snumber db 11,0,11 dup(?)Sname db 11,0,11 dup(?)English db 4,0, 4 dup(?)Chinese db 4,0, 4 dup(?)Math db 4,0, 4 dup(?)Sum db 4,0, 4 dup(?)student ends;数据段data segmentmessMenu db '----------------The Homework of Assembler-----------------$'messMenu1 db '----------Name:TU LIN No:8000110028--------------$'messNext db'--------------------------------------------------------------------------------$'messName db 'Please input the student name(<11):$'messNum db 'Please input the student number(<11):$'messEnglish db 'Please input the English score:$'messChinese db 'Please input the Chinese score:$'messMath db 'Please input the Math score:$'mess1 db 'name:$'mess2 db 'number:$'mess3 db 'English:$'mess4 db 'Chinese:$'mess5 db 'Math:$'messSumScore db 'SumScore:$'MessTab db 09,'$' ;Tab 用于排列对齐StudAddress dw 10 dup(?) ;存各学生的偏移地址EnglishScore db 10 dup(?) ;存学生英语成绩的十进制数ChineseScore db 10 dup(?) ;存学生语文成绩的十进制数MathScore db 10 dup(?) ;存学生数学成绩的十进制数Average dw ?Buf db 6 dup(?)SumScore dw 10 dup(?) ;用于记录每个学生总分NumbersOfStudent db 0Stu student 10 dup(<>)SumRank db 0, 1, 2, 3, 4, 5, 6, 7, 8, 9FName db 'C:\StuScore.dat', 0;文件FileHandle dw ?;文件句柄EndOfFile dw 0ffhOtherLine db 0ah, 0dh, '$'FileSpace db " "data ends;堆栈段stack segmentdb 100h dup(?)stack ends;代码段code segmentassume cs:code,ds:data,ss:stackstart: mov ax,datamov ds,ax ;将数据段首地址传给dsmov ax,stackmov ss,ax ;将堆栈段首地址传给ssmov sp,0call Endlinelea dx,messMenumov ah,09hint 21hcall Endlinelea dx,messMenu1mov ah,09hint 21hcall Endlinelea si,Stu ;取student的首地址给simov cx,10InputStu:call GetStudentlea dx,messNextmov ah,09hint 21hadd si,50loop InputStu ;输出循环结束lea si,Stucall GetEnglishScorecall GetChineseScorecall GetMathScorecall Stop ;程序运行停止一下,按回车键继续执行 call Writetofilecall stopcall SumAveragecall GetSumcall GetAddresscall SortStudentcall Stop ;程序运行暂停一下,按回车键,继续执行call ShowStumov ah,4chint 21h;============================================================;子程序名:GetStudent;功能:录入学生信息;============================================================ GetStudent proc nearpush sipush dxpush axpush cx ;子程序保护现场lea dx,messNamemov ah,9int 21hlea dx,[si].Snamemov ah,0Ahint 21hcall Endlinelea dx,messNummov ah,9int 21hlea dx,[si].Snumbermov ah,0Ahint 21hcall Endlinelea dx,messEnglishmov ah,9int 21hlea dx,[si].Englishmov ah,0Ahint 21hcall Endlinelea dx,messChinesemov ah,9int 21hlea dx,[si].Chinesemov ah,0Ahint 21hcall Endlinelea dx,messMathmov ah,9int 21hlea dx,[si].Mathmov ah,0Ahint 21hcall Endlinepop cxpop axpop dxpop siretGetStudent endp;============================================================ ;子程序名:TureShow;功能辅助子程序ShowStu,用于输出字符串;============================================================ TureShow proc nearpush dx ;保护相关寄存器push cxpush bxpush axmov bx,dx ;将bx指向缓存区的地址xor cx,cxmov cl,[bx+1] ;cl存放了缓存区录入的字符数LoopTS:mov dl,[bx+2] ;从第三个偏移地址开始显示mov ah,2 ;调用单个字符输出中断int 21hinc bxloop LoopTSpop axpop bxpop cxpop dxretTureShow endp;============================================================ ;子程序名:ShowStu;功能:显示学生信息记录;============================================================ ShowStu proc nearpush cxpush axpush dxpush sipush di ;保护现场call Endlinelea di,SumScorelea bx,StudAddressmov cx,10Loop1: mov si,word ptr[bx]lea dx,mess1mov ah,09hint 21hlea dx,[si].Snamecall TureShowcall MessTb ;输出1个Tab 用于排序对齐lea dx,mess2mov ah,09hint 21hlea dx,[si].Snumbercall TureShowcall MessTb ;输出1个Tab 用于排序对齐lea dx,mess3mov ah,09hint 21hlea dx,[si].Englishcall TureShowcall MessTb ;输出1个Tab 用于排序对齐lea dx,mess4mov ah,09hint 21hlea dx,[si].Chinesecall TureShowcall MessTb ;输出1个Tab 用于排序对齐lea dx,mess5mov ah,09hint 21hlea dx,[si].Mathcall TureShowcall MessTb ;输出1个Tab 用于排序对齐lea dx,messSumScoremov ah,09hint 21hmov ax,[di]call Outputcall Endlineadd bx,2add di,2loop Loop1lea dx,messNextmov ah,09hint 21hpop dipop sipop dxpop axpop cxretShowStu endp;============================================================= ;子程序名:Endline;功能:回车换行;============================================================= Endline proc nearpush ax ;保护相关寄存器push dxpush cxmov ah,2 ;回车mov dl,0ahint 21hmov ah,2 ;换行mov dl,0dhint 21hpop cxpop dxpop axretEndline endp;=============================================================;子程序名GetEnglishScores:;功能:将得到的指定个学生的分数以十进制保存到EnglishScore缓冲区中;============================================================= GetEnglishScore proc nearpush di ;保护相关寄存器push sipush dxpush cxpush bxpush axpush bplea si,Stu ;使si指向第一个学生的偏移地lea bp,EnglishScore ;使bp指向以十进制存学生分数的地址mov cx,10 ;共有指定个学生LoopScores0:push cx ;保护外循环的CX值lea bx,[si].English ;使bx指向学生字符分数缓冲区xor di,dixor cx,cxmov cl,[bx+1] ;学生字符分数缓冲区的字符数即使循环次数LoopScore0:mov al,[bx+2] ;从第三个偏移地址开始sub al,30h ;得到一个十进制值xor ah,ahxchg ax,di ;使其暂存到di,且将高位di的值乘10push si ;保护寄存器的原值push dxmov si,10mul si ;将si乘10,乘积低位保存在axpop dxpop sixchg ax,di ;将原来di中低位的值与高位的值ax交换回来add di,ax ;至此又录入一位十进制数inc bxloop LoopScore0mov ax,dimov ds:[bp],al ;将得到的十进制分数存入保存十进制分数缓冲区EnglishScore中add si,50 ;使di指向下一个学生的偏移地址inc bp ;使bp指向下一个保存十进制分数缓冲区的下一个单元,以保存下一个学生的分数pop cx ;弹出外循环的CX值loop LoopScores0pop bppop axpop bxpop cxpop dxpop sipop diretGetEnglishScore endp;=============================================================;子程序名GetChineseScore:;功能:将得到的指定个学生的分数以十进制保存到ChineseScore缓冲区中;============================================================= GetChineseScore proc nearpush di ;保护相关寄存器push sipush dxpush cxpush bxpush axpush bplea si,Stu ;使di指向第一个学生的偏移地lea bp,ChineseScore ;使bp指向以十进制存学生分数的地址mov cx,10 ;共有指定个学生LoopScores1:push cx ;保护外循环的CX值lea bx,[si].Chinese ;使bx指向学生字符分数缓冲区xor di,dixor cx,cxmov cl,[bx+1] ;学生字符分数缓冲区的字符数即使循环次数LoopScore1:mov al,[bx+2] ;从第三个偏移地址开始sub al,30h ;得到一个十进制值xor ah,ahxchg ax,di ;使其暂存到si,且将高位si的值乘10push si ;保护寄存器的原值push dxmov si,10mul si ;将si乘10,乘积低位保存在axpop dxpop sixchg ax,di ;将原来si中低位的值与高位的值ax交换回来add di,ax ;至此又录入一位十进制数inc bxloop LoopScore1mov ax,dimov ds:[bp],al ;将得到的十进制分数存入保存十进制分数缓冲区ChineseScore中add si,50 ;使di指向下一个学生的偏移地址inc bp ;使bp指向下一个保存十进制分数缓冲区的下一个单元,以保存下一个学生的分数pop cx ;弹出外循环的CX值loop LoopScores1pop bppop axpop bxpop cxpop dxpop sipop diretGetChineseScore endp;=============================================================;子程序名GetMathScore:;功能:将得到的指定个学生的数学分数以十进制保存到MathScore缓冲区中;============================================================= GetMathScore proc nearpush di ;保护相关寄存器push sipush dxpush cxpush bxpush axpush bplea si,Stu ;使di指向第一个学生的偏移地lea bp,MathScore ;使bp指向以十进制存学生分数的地址mov cx,10 ;共有指定个学生LoopScores2:push cx ;保护外循环的CX值lea bx,[si].Math ;使bx指向学生字符分数缓冲区xor di,dixor cx,cxmov cl,[bx+1] ;学生字符分数缓冲区的字符数即使循环次数LoopScore2:mov al,[bx+2] ;从第三个偏移地址开始sub al,30h ;得到一个十进制值xor ah,ahxchg ax,di ;使其暂存到si,且将高位si的值乘10push si ;保护寄存器的原值push dxmov si,10mul si ;将si乘10,乘积低位保存在axpop dxpop sixchg ax,di ;将原来si中低位的值与高位的值ax交换回来add di,ax ;至此又录入一位十进制数inc bxloop LoopScore2mov ax,dimov ds:[bp],al ;将得到的十进制分数存入保存十进制分数缓冲区MathScore中add si,50 ;使di指向下一个学生的偏移地址inc bp ;使bp指向下一个保存十进制分数缓冲区的下一个单元,以保存下一个学生的分数pop cx ;弹出外循环的CX值loop LoopScores2pop bppop axpop bxpop cxpop dxpop sipop diretGetMathScore endp;==============================================================;子程序名:Writetofile;功能:用于创建文件并且存储学生信息;============================================================== Buildfile :push axpush cxpush dxmov ah, 3chmov cx, 00lea dx, FNameint 21hjc CreateFileErrormov FileHandle, axjmp CreateFileOkCreateFileError:mov ah, 09hmov dx, offset CreateFileErrorint 21hCreateFileOk:pop dxpop cxpop axretWriteToFile:push axpush bxpush cxpush dxpush dipush silea di, [si].SNamemov dx, diadd dx, 2mov cl, [di+1]mov ch, 0mov bx,FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteSpacelea di, [si].SNumbermov dx, dimov cl, [di+1]mov ch, 0mov bx, FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteSpacelea di, [si].ChineseScore mov dx, diadd dx, 2mov cl, [di+1]mov ch, 0mov bx, FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteSpacelea di, [si].MathScore mov dx, diadd dx, 2mov cl, [di+1]mov ch, 0mov bx, FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteSpacelea di, [si].EnglishScore mov dx, diadd dx, 2mov cl, [di+1]mov ch, 0mov bx, FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteSpacelea di, [si].SumScore mov dx, dimov cl, [di+1]mov ch, 0mov bx, FileHandlemov ah, 40hint 21hjc WriteFileErrorcall WriteEndLinejmp WriteFileOkWriteFileError:lea dx,WriteFileErrormov ah, 09hint 21hWriteFileOk:pop sipop dipop dxpop cxpop bxpop axret;******************************************************************** WriteSpace:mov cx, 2lea dx, FileSpacemov bx, FileHandlemov ah, 40hint 21hret;******************************************************************** WriteEndLine:mov cx, 2lea dx, OtherLinemov bx, FileHandlemov ah, 40hint 21hretCloseFile:mov ah, 40hmov bx, FileHandlemov cx, 2lea dx, EndOfFileint 21hmov ah, 3ehmov bx, FileHandleint 21hret;============================================================== ;子程序名:GetSum;功能:用于计算出每个学生的各科成绩的总分;============================================================== GetSum proc nearpush axpush dipush sipush bxpush cxlea di,EnglishScorelea si,SumScoremov cx,10mov al,0LoopSum:mov ah,0mov al,[di]mov word ptr[si],axinc diadd si,2loop LoopSumlea di,ChineseScorelea si,SumScoremov cx,10mov al,0LoopSum1:mov ah,0mov al,[di]add word ptr[si],axinc diadd si,2loop LoopSum1lea di,MathScorelea si,SumScoremov cx,10mov al,0LoopSum2:mov ah,0mov al,[di]add word ptr[si],axinc diadd si,2loop LoopSum2pop cxpop bxpop sipop dipop axretGetSum endp;============================================================== ;子程序名:SumAverage;功能:用于计算出平均成绩,并输出总分高于平均分的学生记录;============================================================== SumAverage proc nearpush axpush bxpush cxpush dxpush simov cl, NumbersOfStudentmov ch, 0mov bx, cxmov ax, 0mov dx, 0mov si, offset SumScoreAverageLoop:add ax, word ptr [si]adc dx, 0add si, 2loop AverageLoopdiv bxmov Average, ax;输出高于平均成绩的同学mov dx, offset ShowBigThanAveragemov ah, 09hint 21hmov cl, SNumbermov ch, 0mov di, 0mov si, 0ShowBigThanAverage:mov ax, SumScore[si]cmp ax, Averagejl ShowBigOkmov dl, SumRank[di]mov al, type studentmul dlmov bx, axcall Outputadd si, 2inc diloop ShowBigThanAverageShowBigOk:mov dx, offset OtherLinemov ah, 09hint 21hpop sipop dxpop cxpop bxpop axretSumAverage endp;============================================================= ;子程序名:Output;功能:将ax中的二进制以十进制形式输出;============================================================== Output proc nearpush dipush bxpush axpush dxlea di,Bufadd di,6mov byte ptr[di],'$'mov bx,10CHANGE:dec dimov dx,0div bxadd dl,30hmov byte ptr[di],dlcmp ax,0jnz CHANGEmov dx,dimov ah,09hint 21hpop dxpop axpop bxpop diretOutput endp;============================================================= ;子程序名:GetAddress;功能:将指定个学生的偏移地址顺序保存到StudAddress;============================================================= GetAddress proc nearpush si ;保护相关寄存器push bxpush cxlea si,Stu ;使di指向第一个学生的偏移地址lea bx,StudAddress ;使bx指向存学生偏移地址的缓冲区mov cx,10 ;共有指定个学生LoopAdd:mov word ptr[bx],word ptr siadd bx,2 ;使bx指向存学生偏移地址的缓冲区的下一个地址add si,50 ;使di指向下一个学的生偏移地址loop LoopAddpop cxpop bxpop diretGetAddress endp;============================================================= ;子程序名:SortStudent;功能:根据学生分数进行排序;用冒泡法根据学生分数对分数从大到小排序;同时将对应的偏移地址进行排序;============================================================= SortStudent proc nearpush dxpush cxpush bxpush axpush dipush simov cx,10dec cxLoopChange0:push cx ;保护外循环的CX值lea bx,SumScore ; bx指向学生分数偏移地址lea si,StudAddress ;si指向存学生偏移地址的地址LoopChange1: ;将学生分数和下一个学生分数分别送入al,dl并比较大小;若当前学生分数小于下一个分数要交换其分数mov dx,word ptr[bx+2] ;此分数对应的学生的偏移地址mov ax,word ptr[bx]cmp ax,dxja EndExchange ;若大于则转而比较下两个分数值;交换偏移地址mov ax,word ptr [si+2] ;指定向ax中传入2个字节数据mov dx,word ptr [si]mov [si],axmov [si+2],dx;交换分数值mov ax,word ptr[bx+2]mov dx,word ptr[bx]mov word ptr[bx],axmov word ptr[bx+2],dxEndExchange:add si,2 ;指向下一个学生偏移地址的地址add bx,2 ;指向下一个存学生分数的地址loop LoopChange1pop cx ;保护外循环的CX值loop LoopChange0pop sipop dipop axpop bxpop cxpop dxretSortStudent endp;=============================================================;子程序名:MessTb;功能:输出1个Tab键;============================================================= MessTb proc nearpush dx ;保护相关寄存器push axlea dx,MessTab ;指向输出1个Tab键缓冲区mov ah,9 ;调用字符串输出程序int 21hpop axpop dxretMessTb endp;=================================================================== ;子程序名:Stop;功能是让程序停止运行一下,输入回车键继续执行;=================================================================== Stop proc nearpush ax ;保护相关寄存器push dxpush cxmov ah,1 ;回车int 21hpop cxpop dxpop axretStop endpcode endsend start。
题目一通用进制转换程序
一、题目要求
实现不同进制之间的相互转换。
(常用进制二、八、十、十六进制)
程序功能:
1.能通过键盘输入任一种进制,有相应的提示信息。
例如please input a Binary data:
2. 输入的数据要有容错检测。
例如:输入的二进制数据为1200,则应该出现错误信息提示。
(因为2在二进制中是不允许的
3.输出的数据要有进制选择。
例如:请选择输出数据的进制(0: 二进制,1: 八进制……)
二、重点考察
1.用汇编实现简单的算法。
2.用汇编实现简单的数据结构。
3.可执行程序的参数使用。
4.INT 21H系统功能调用中有关显示与输出的操作
5.综合解决问题的能力。
题目二两位数加减乘除程序
一、题目要求
实现任意两位数+、-、×、÷运算。
程序功能:
1.通过键盘输入一个算式,有相应的提示信息。
例如请输入一个两位数的+-×÷运算算式:
2. 输入的数据要有容错检测。
例如:输入的数据为12*500,则应提示“数据超出了两位数”或其它
3.计算输入算式的结果并将结果在屏幕上显示。
例如:12/6 = 2
二、重点考察
1.用汇编实现简单的算法。
2.用汇编实现简单的数据结构。
3.可执行程序的参数使用。
4.INT 21H系统功能调用中有关显示与输出的操作
5.综合解决问题的能力。
题目三高精度乘法程序设计
一、题目要求
实现高精度乘法运算。
程序功能:
1.通过键盘输入任意两个正整数,有相应的提示信息。
例如请输入两个任意正整数:
2. 输入的数据要有容错检测。
例如:输入的数据为12*500.45,则应提示“数据超出了两位数”或其它3.计算输入算式的结果并将结果在屏幕上显示。
二、重点考察
1.用汇编实现简单的算法。
2.用汇编实现简单的数据结构。
3.可执行程序的参数使用。
4.INT 21H系统功能调用中有关显示与输出的操作
5.综合解决问题的能力。