汇编语言程序设计-课程设计
- 格式:doc
- 大小:141.00 KB
- 文档页数:13
汇编语言程序设计第四版教学设计一、教学目标本教学设计旨在通过对汇编语言程序设计第四版的学习,使学生能够:1.了解汇编语言的基本概念与原理;2.掌握8086汇编语言的基本语法和指令;3.能够设计并编写简单的汇编程序;4.能够运用汇编语言实现计算机系统底层功能。
二、教学内容和重点2.1 教学内容本课程主要包含以下内容:1.汇编语言的基本概念和原理;2.8086汇编语言的基本语法和指令;3.数据和程序的存储方式,内部和外部寻址方式;4.转移、分支、循环等流程控制语句的编写;5.文件操作、中断处理、延时等操作。
2.2 教学重点本课程的教学重点包括:1.掌握8086汇编语言的基本语法和指令;2.学会编写流程控制语句;3.运用汇编语言实现计算机底层功能。
三、教学方法1.讲授法:教师通过讲解课程内容,结合丰富的实例和编程实践,逐步深入讲解汇编语言的基本概念与原理、8086汇编语言的基本语法和指令、流程控制语句的编写等知识点。
2.实践教学法:通过实际编程实践,加深学生对汇编语言的理解和掌握,提高学生的实际操作能力。
3.讨论教学法:通过课堂上讨论案例、解决问题等形式,激发学生的思考和积极性,提高学生的自主学习能力。
四、教学评价本课程的教学评价主要包括如下几个方面:1.作业考核:布置汇编语言程序设计的作业题目,要求学生独立完成,并提交相应的代码和报告。
2.编程实践评估:针对某些课程实践项目,对学生的编程实践过程进行评估,以评估其对所学知识的掌握情况。
3.学生小组互评:以小组为单位,相互之间进行评价,以此达到优胜劣汰之效,提高学生的自学和团队意识。
五、教学进度安排课时内容第一课时汇编语言基本概念和原理课时内容第二课时8086汇编语言的基本语法和指令第三课时数据和程序的存储方式第四课时内部和外部寻址方式第五课时转移、分支、循环等流程控制语句第六课时文件操作第七课时中断处理第八课时延时操作六、教学资源准备1.教学环境:课程需要用到DOS系统,因此需要提前搭建DOS环境,并为学生提供相应的环境配置和使用指导。
《汇编语言程序设计》课程设计要求完成下面给出的两个设计题目,按要求设计,并上机调试成功,同时按如下格式写出课程设计报告:一.封面包括:[ 题头:] 汇编语言课程设计设计者姓名:班级:指导教师:二.内容包括:1.问题描述:说明要完成的课程设计题目及其功能。
2.数据模型:说明所采用的数据格式及存储方式(数据段说明,要给出变量代表的含义)。
3.程序设计思路及总体结构:一般采用分支、循环及子程序结构。
若为子程序,要写出子程序说明文件。
4.画出程序流程图。
5.编写程序和调试程序期间的问题和解决方法。
6.设计总结(心得)。
7.参考资料三.课程设计题目:1.户从键盘上的输入计算下列表达式:x+1000 (输入为0)y = 5x –2 (输入为1)| x | (输入为其他)设x为双字节带符号数据,并存放在DAX单元,结果放入DAY单元,如果为正,在屏幕上显示一个“+”号,为负,显示一个“-”号,为0显示一个“0”。
2.编制在屏幕上显示九九表的程序。
1×1=11×2=2 2×2=41×3=3 2×3=6 3×3=91×4=4 2×4=8 3×4=12 4×4=161×5=5 2×5=10 3×5=15 4×5=20 5×5=251×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=361×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=491×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=641×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=813.编制在屏幕上显示下述图形的程序。
课程设计报告(本科)课程:汇编语言程序设计学号:姓名:班级:教师:时间:2014.6.3~2014.6.19计算机科学与技术系实验结果与分析:图6 首先运行无错误图7输入1号功能变换图8输入2号功能变换数值图9 产生obj文件图10 输入2号功能实现数制转换图11 输入1号功能实现数制转换附录:源代码十进制与八进制相互转换的程序清单:;DECIOCT;十进制与八进制相互转换;首先选择算法,1为八进制转十进制,2为十进制转八进制;***************************DECioct SEGMENTASSUME CS:DECioct;主程序部分。
main PROC FARstart: MOV DL,3ah ;显示提示附MOV AH,2INT 21hMOV AH,1 ;输入选择数字INT 21hCMP AL,32h ;数字为1时,执行八进制转十进制JE REPEat2 ;数字为2时,执行十进制转八进制REPEat1: CALL octbin ;键盘输入八进制数转为二进制 CALL crlf ;回车并换行CALL binidec ;二进制转十进制CALL crlf ;回车并换行JMP REPEat1 ;重复执行REPEat2: CALL DECibin ;键盘输入十进制数转为二进制CALL crlf ;回车并换行CALL binioct ;二进制转八进制CALL crlf ;回车并换行JMP REPEat2 ;重复执行main ENDP;-----------------------------;十进制转二进制DECibin PROC NEARMOV BX,0 ;将BX清零NEwchar2:MOV AH,1INT 21h ;21号中断输入SUB AL,30h ;ASCII转二进制JL exit2 ;<0则跳转CMP AL,9d ;判断是否>9JG exit2 ;如果大于则不是十进制数 CBW ;字节转为字XCHG AX,BX ;交换寄存器MOV CX,10d ;把10放如CXMUL CX ;AX扩大10倍XCHG AX,BX ;交换寄存器ADD BX,AX ;原数的10倍加上输入数 JMP NEwchar2 ;跳转输入exit2:RETDECibin ENDP;---------------------------------------;二进制转八进制binioct PROC NEARMOV CL,2 ;移位数字2ROL BL,CL ;循环左移2位MOV AL,BL ;把输入的数送入ALAND AL,03h ;将高六位屏蔽ADD AL,30h ;转换为ASCIIMOV DL,AL ;输出ALMOV AH,2INT 21hMOV CH,2 ;剩余显示2位rotate2:MOV CL,3 ;移位数字3ROL BL,CL ;循环左移3位MOV AL,BL ;把输入的数送入ALAND AL,07h ;将高五位屏蔽ADD AL,30h ;转换为ASCIIMOV DL,AL ;输出ALMOV AH,2INT 21hDEC CH ;递减CHJNZ rotate2 ;CH不为0则跳转 RETbinioct ENDP;---------------------------------------;八进制转二进制octbin PROC NEARMOV BX,0 ;BX清零NEwchar1:MOV AH,1 ;输入数字INT 21hSUB AL,30h ;转换为二进制数 JL exit1CMP AL,8d ;如果<8则跳转JL ADD_to1CMP AL,10hJGE exit1ADD_to1:MOV CL,3 ;移位数字3SHL BX,CL ;左移3位MOV AH,0 ;AH清0ADD BX,AX ;把新位移入数字 JMP NEwchar1 ;跳转继续输入exit1:REToctbin ENDP;--------------------------------------;二进制转十进制binidec PROC NEARMOV CX,10000d ;除数为10000 CALL DEC_divMOV CX,1000d ;除数为1000CALL DEC_divMOV CX,100d ;除数为100CALL DEC_divMOV CX,10d ;除数为10CALL DEC_divMOV CX,1d ;除数为1CALL DEC_divRET;---------------------------------------;子程序DEC_div PROC NEARMOV AX,BX ;把二进制数移入AX MOV DX,0 ;DX高八位清零DIV CX ;除数CXMOV BX,DX ;余数移入BXMOV DL,AL ;商移入DLADD DL,30h ;转换为ASCIIMOV AH,2 ;输出十进制数位INT 21hRETDEC_div ENDP;---------------------------------------binidec ENDP;---------------------------------------;回车和换行。
新一代汇编语言程序设计课程设计一、课程设计背景汇编语言作为计算机体系结构的重要组成部分,是计算机组成原理、计算机体系结构等课程的基础教材。
然而,传统的汇编语言已经逐渐失去其实用性,受限于其机器级的特性,很难直接应用于现代计算机的软件开发中。
因此,新一代汇编语言应运而生,它既保留了传统汇编语言的部分特点,又在语言结构、语法规则等方面进行了改进和创新,成为了现代软件开发必不可少的一部分。
课程设计旨在通过实际操作,让学生深入学习新一代汇编语言的特点、语法规则、程序设计方法等,提高学生的程序设计能力和实践能力。
同时,通过课程设计,学生对计算机组成原理、计算机体系结构等课程的知识也能够进行更加深入的理解和掌握。
二、设计目标本课程设计的目标如下:1.掌握新一代汇编语言的特点和语法规则。
2.熟练掌握汇编语言程序设计方法。
3.能够应用新一代汇编语言进行实际软件开发。
4.加深对计算机组成原理、计算机体系结构等课程的理解和掌握。
三、课程内容安排本课程设计共分为三个模块,具体内容安排如下:第一模块:新一代汇编语言语法规则和基本程序设计方法1.新一代汇编语言的特点和语法规则介绍2.汇编语言程序的编写、调试和运行方法3.基本汇编语言程序设计方法4.控制结构和函数的实现第二模块:汇编语言数据结构与算法1.基本数据结构的实现2.常用算法的实现3.高级数据结构和算法的实现第三模块:应用实例和综合设计1.实际应用实例的分析和设计2.综合设计:完整汇编语言系统设计四、实践教学形式本课程设计采用理论教学结合编程实践的形式,以培养学生的实践能力和程序设计能力。
具体实践教学形式如下:1.通过理论讲授汇编语言的语法、程序设计方法等,让学生掌握基本理论知识。
2.通过实例程序的编写和调试,让学生掌握汇编语言程序设计的基本技能。
3.通过独立设计,让学生熟悉应用新一代汇编语言进行实际软件开发的方法。
五、考核方式本课程设计的考核方式包括以下几个方面:1.作业成绩:根据作业完成情况给出成绩,占总成绩的30%。
汇编语言程序设计第二版课程设计背景汇编语言作为一种底层语言,在计算机领域中扮演着重要的角色。
掌握汇编语言可以更好地理解计算机的工作方式和原理,也可以帮助程序员更好地调试和优化高级语言程序。
本文档将介绍汇编语言程序设计第二版课程设计的内容和要求。
设计目标本次课程设计的主要目标是通过设计并实现一个汇编语言程序来提高学生的汇编语言编程能力。
具体目标包括:•加深学生对汇编语言的理解和应用•熟练使用汇编语言编写简单的程序•掌握调试和优化汇编语言程序的方法•提高学生的逻辑思维和问题解决能力设计内容需求说明设计并实现一个汇编语言程序,满足以下需求:•通过输入两个数字,并输出两个数字之间所有奇数的和•程序需要有明确的输入输出功能•程序需要有一定的用户友好性,可以根据用户的操作给予相应的提示信息设计要求•程序需要使用x86汇编语言编写,使用DOSBox模拟环境运行•程序需要具体的注释说明,方便他人理解•程序需要有较好的容错性,对用户的输入进行合理判断,避免程序出现异常•程序需要有一定的模块化结构,便于程序的修改和扩展•程序需要通过多组数据进行测试,保证其正确性和稳定性设计过程设计过程包括以下步骤:1.确定程序的功能需求及输入输出要求2.根据功能需求,设计程序流程和操作步骤3.按照流程,编写汇编语言程序4.进行程序测试,并对程序进行修改和优化5.撰写课程设计报告风险控制在设计和实现程序过程中,可能存在以下风险:•需求不明确或存在歧义•数据异常或输入不合法•程序设计和实现存在问题•模拟环境不稳定为降低风险,需要采取以下措施:•充分沟通,明确需求,并明确输入输出要求•对用户输入进行预处理,并进行合理的异常处理•通过严谨的编程和测试,确保程序的正确性和稳定性•定期备份数据,以免因意外情况数据丢失或损坏成果展示本次课程设计将会展示一个实现了以上需求的汇编语言程序。
下面是使用DOSBox模拟环境运行的程序截图:程序截图程序截图总结通过本次课程设计,我们深入了解了汇编语言的编程思想和方法,并具有了一定的实践经验。
汇编语言课课程设计一、教学目标本课程的教学目标是使学生掌握汇编语言的基本语法、指令集、程序设计方法和相关概念,培养学生运用汇编语言进行程序设计的能力。
具体目标如下:1.知识目标:–掌握汇编语言的基本语法和规则。
–熟悉汇编语言的指令集,包括数据传输、算术运算、逻辑运算、控制流等。
–了解汇编语言与硬件的关系,理解程序执行的过程。
2.技能目标:–能够使用汇编语言编写简单的程序,实现数据的输入输出、计算等功能。
–能够阅读和理解汇编语言程序,进行程序调试和优化。
–能够运用汇编语言进行硬件编程和系统开发。
3.情感态度价值观目标:–培养学生对汇编语言编程的兴趣,提高学生对计算机科学的热爱。
–培养学生解决问题的能力,培养学生的创新精神和团队合作意识。
二、教学内容根据教学目标,本课程的教学内容主要包括以下几个方面:1.汇编语言的基本语法和规则,包括数据类型、寄存器、指令格式等。
2.汇编语言的指令集,包括数据传输指令、算术运算指令、逻辑运算指令、控制流指令等。
3.汇编语言与硬件的关系,包括寄存器文件、程序计数器、栈等硬件部件的工作原理。
4.汇编语言程序的设计方法,包括程序的编写、调试和优化。
5.汇编语言在硬件编程和系统开发中的应用。
三、教学方法为了实现教学目标,本课程将采用多种教学方法,包括:1.讲授法:通过教师的讲解,使学生掌握汇编语言的基本概念和语法规则。
2.案例分析法:通过分析典型的汇编语言程序,使学生理解程序的设计方法和编程技巧。
3.实验法:通过上机实验,使学生亲自动手编写和调试汇编语言程序,提高学生的编程能力。
4.讨论法:通过小组讨论,激发学生的思考,培养学生的团队合作意识和创新能力。
四、教学资源为了支持教学内容和教学方法的实施,本课程将准备以下教学资源:1.教材:选用权威、实用的汇编语言教材,作为学生学习的主要参考资料。
2.参考书:提供相关的汇编语言编程书籍,供学生深入学习和参考。
3.多媒体资料:制作课件、教学视频等多媒体资料,丰富教学手段,提高学生的学习兴趣。
32位汇编语言程序设计课程设计设计背景汇编语言是一种基于机器指令的低级语言,它直接面向计算机硬件,可以更加高效地控制计算机的运行。
而32位汇编语言是一种针对32位操作系统的汇编语言,它能够更好地支持内存管理和多线程操作等功能。
因此,学习和掌握32位汇编语言的程序设计能力对于计算机科学专业的学生来说是非常重要的。
课程设计目标本次课程设计旨在通过对32位汇编语言的学习和实践,提高学生的汇编语言程序设计能力,并让学生了解和掌握汇编语言在计算机底层的实现原理,培养学生针对计算机系统底层编程的能力和兴趣。
课程设计内容实验一:Hello World本次实验旨在让学生掌握汇编语言程序的开发流程和常见的汇编语句以及输出调试。
具体实验要求如下:1.编写一个汇编程序,输出“Hello World!”到屏幕上。
2.使用软件调试器运行并测试程序,检查程序是否能正常输出。
实验二:计算器本次实验旨在让学生学会如何进行汇编语言程序设计中的算数运算,以及如何与用户进行交互。
具体实验要求如下:1.编写一个汇编程序,实现基本的加减乘除运算,并从屏幕上获取用户输入。
2.在屏幕上展示运算结果,并让用户随时可以选择是否继续进行计算。
3.使用软件调试器运行并测试程序,检查程序是否能正常运行。
实验三:数组排序本次实验旨在让学生学会如何在汇编程序中处理数组,并了解常用的排序算法。
具体实验要求如下:1.编写一个汇编程序,实现对一个固定长度的数字数组进行排序。
2.输出排序后的数组。
3.使用软件调试器运行并测试程序,检查程序是否能正常运行。
课程学习方法和建议1.理论学习要和实践相结合,通过实践才能更好地理解和掌握汇编语言程序设计中的各种语句、操作和流程。
2.软件调试器是汇编程序的重要工具,学生需要熟练掌握其使用方法和调试技巧,以方便快速地找到程序的问题并解决。
3.学生可以通过阅读相关的教科书和参考资料,或者通过搜索互联网资源来扩充自己的知识和提高自己的能力。
8086/8088汇编语言程序设计课程设计设计背景汇编语言是计算机科学与技术专业中非常重要的一门课程,它是高级语言之后的一个阶段。
在本课程中,学生需要掌握8086/8088汇编语言的语法和应用。
为了更好地掌握汇编语言的使用,需要进行一定的课程设计练习。
设计目的本课程设计旨在帮助学生深入了解汇编语言的编写和实践操作,从而更好地掌握该技能。
该课程设计的主要目的包括:•加深学生对汇编语言的理解。
•培养学生的编程思维和动手能力。
•通过实践操作,让学生能够在以后的工作和学习中使用汇编语言编写程序。
设计内容本课程设计的主要内容包括以下几个部分:1. 编写程序学生需要使用8086/8088汇编语言编写程序。
编写过程中,需要注意程序的逻辑和语法。
程序可以有选择的使用一些特定的指令进行优化,以达到更高的执行效率。
2. 调试程序学生需要使用调试软件对编写的程序进行调试,以保证程序的正确性。
在调试过程中,需要注意调试工具的使用方法和操作步骤。
3. 撰写实验报告学生需要撰写课程设计实验报告,该报告需要包括以下主要内容:•设计目的和内容简介•程序设计思路和步骤•调试过程和结果分析•程序运行效果展示•总结和反思设计要求为了完成本课程设计任务,需要满足以下要求:1. 完成程序编写完成程序编写的任务,保证程序的正确性和合理性。
程序逻辑要清晰,格式化整齐,运行效率要高。
程序注释要清晰,要有比较好的可读性。
2. 良好的调试过程良好的调试过程是保证程序正确性的基础。
学生需要使用调试工具对程序进行调试,确保程序的正常运行。
在调试过程中,需要注意操作的步骤和方法。
3. 撰写实验报告实验报告需要各个方面都能全面体现学生的工作。
在撰写实验报告时,请注意实验报告的格式和内容要求,注意语言的规范性和格式的整齐性。
报告需要按时上交。
结束语本课程设计是学生在汇编语言学习的过程中,进行实践的重要环节,通过这个过程,学生能够更加全面的掌握汇编语言编程的技能。
汇编语言的课程设计一、课程目标知识目标:1. 理解汇编语言的基本概念和组成,掌握汇编语言的编程规则;2. 掌握汇编语言的常用指令,并能正确运用到程序编写中;3. 了解汇编语言与机器语言的关系,明白汇编语言在计算机体系结构中的作用;4. 学会使用汇编语言进行基本的输入输出操作,以及简单的数据处理。
技能目标:1. 能够独立编写简单的汇编程序,实现基本的功能需求;2. 能够运用汇编语言进行程序调试,找出并修正程序中的错误;3. 能够阅读和理解汇编语言的源代码,分析程序的执行过程;4. 能够通过汇编语言编程,提高对计算机硬件的理解和操作能力。
情感态度价值观目标:1. 培养学生对汇编语言的兴趣,激发他们探索计算机底层原理的热情;2. 培养学生严谨的编程习惯,注重代码质量和程序效率;3. 增强学生的团队合作意识,学会在编程过程中相互交流和分享经验;4. 培养学生面对编程挑战时的耐心和毅力,勇于克服困难,不断进步。
本课程针对高年级学生,具有较强的理论性和实践性。
通过本课程的学习,学生将深入理解计算机硬件与软件的紧密联系,提高编程能力和问题解决能力。
课程要求学生在掌握基本概念和技能的基础上,注重实际应用和创新能力的发展。
教学过程中,教师应关注学生的个体差异,提供针对性的指导和帮助,确保每位学生能够达到预定的学习成果。
二、教学内容本章节教学内容主要包括以下几部分:1. 汇编语言概述:介绍汇编语言的发展历程、特点及在计算机编程中的应用;- 教材章节:第1章 汇编语言基础知识2. 汇编语言基本概念:讲解汇编语言的组成元素,如指令、寄存器、内存单元等;- 教材章节:第2章 汇编语言的基本概念3. 汇编语言编程规则:学习汇编语言的语法、指令系统、伪指令等;- 教材章节:第3章 汇编语言的编程规则4. 汇编语言常用指令:掌握数据传送、算术运算、逻辑运算、控制转移等常用指令;- 教材章节:第4章 常用指令介绍5. 汇编语言程序设计:学习编写简单的汇编程序,进行基本的输入输出操作;- 教材章节:第5章 汇编语言程序设计6. 汇编语言与硬件的关系:探讨汇编语言如何与计算机硬件进行交互;- 教材章节:第6章 汇编语言与硬件的关系7. 汇编语言程序调试与优化:介绍汇编程序的调试方法、技巧以及性能优化;- 教材章节:第7章 程序调试与优化教学内容按照以上安排进行,保证教学进度的科学性和系统性。
《汇编语言程序设计》教案教案:《汇编语言程序设计》教学内容:汇编语言程序设计教学目标:1.掌握汇编语言的基本概念和基本语法;2.熟悉汇编语言的常用指令和编程方法;3.能够使用汇编语言编写简单的程序。
教学重点:1.汇编语言的基本概念和基本语法;2.汇编语言的常用指令和编程方法。
教学难点:1.汇编语言的语法分析和译码;2.汇编语言程序的编写和调试。
教学方法:1.讲授法:通过讲解教材内容,让学生了解汇编语言的基本概念和基本语法;2.案例分析法:通过分析一些典型的汇编语言程序,让学生了解汇编语言的常用指令和编程方法;3.实践法:通过教师的演示和学生的操作,让学生亲自编写和调试汇编语言程序。
教学过程:一、导入新课,引发学生兴趣(10分钟)教师可以通过讲述计算机的发展历史和现代计算机的基本原理,引发学生对汇编语言的兴趣和好奇心。
二、讲解汇编语言的基本概念和基本语法(30分钟)1.汇编语言的概念和作用;2.汇编语言的基本语法:指令、寻址方式、数据表示、程序结构等。
三、教师演示编写汇编语言程序(20分钟)教师可以用一个简单的案例演示如何编写和调试汇编语言程序。
学生可以通过观察和参与,了解汇编语言程序的编写过程和调试方法。
四、案例分析:分析典型的汇编语言程序(30分钟)教师可以选取一些典型的汇编语言程序,进行详细分析,并带领学生一起理解程序的逻辑结构和实现过程。
五、学生互动:学生编写汇编语言程序(30分钟)学生可以自由选择一个简单的题目,编写自己的汇编语言程序,并进行调试。
教师可以在一旁给予指导和帮助。
六、总结和布置作业(10分钟)教师对本节课的重点内容进行总结,并布置作业:学生需要编写一个复杂一些的汇编语言程序,并进行完整的调试和测试。
教学资源:1.教材:《汇编语言程序设计》教材;2.计算机:提供给学生进行实验的计算机;3.笔记本电脑:教师使用笔记本电脑进行演示和讲解。
评估方法:1.学生课后会完成的作业;2.学生课堂参与和学习态度。
一、实验目的1.熟练掌握call、ret的原理及应用2.熟练掌握子程序的框架、进行模块化程序设计3.掌握参数与结果的传递、批量数据传递等问题的解决方法二、实验内容及要求(一)综合程序设计:利用实验10中的三个子程序,将power idea公司的数据按照下图所示的格式在屏幕上显示出来,要求计算人均收入并显示出来。
power idea公司的数据如下:assume cs:codesgdata segmentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983'db '1984','1985','1986','1987','1988','1989','1990','1991','1992'db '1993','1994','1995';年份dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;公司总收入dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800;公司雇员人数data endstable segmentdb 21 dup('year summ ne ??')table ends要求:(1)给出该设计过程或算法(2)在代码中必要的地方给出相应注释(3)最终显示结果。
三、实验解答过程及结果(1)该题目的第一段db型年份数据是以字符串储存的,不适合后续的操作,所以先用ice子程序把年份数据转化为word型数据。
接下来循环开始,先调用dtoc1子程序,把第一年(1975)的word型年份数据转化为字符串储存在es中,再调用show_str函数在屏幕缓冲区显示出来。
接着调用dtoc2子程序和show_str 子程序把第一年的收入在同一行显示出来。
再接着调用dtoc1子程序和show_str 子程序把第一年的雇员数在同一行显示出来,最后计算平均收入,同样调用两个子程序显示出来。
不停地循环,循环21次,把所有的数据都显示出来,输入程序结果,程序完结。
(2)代码及数据如下:assume cs:codesgdata segmentdb'1975','1976','1977','1978','1979','1980','1981','1982','1983'db'1984','1985','1986','1987','1988','1989','1990','1991','1992'db'1993','1994','1995';年份dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 ;公司总收入dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800;公司雇员人数data endstable segmentdb 21 dup('year summ ne ?? ')table endsstack segmentdb 1024 dup(0)stack endscodesg segmentstart:mov ax,datamov ds,axmov es,axmov ax,stackmov ss,axmov sp,1024mov si,0mov bx,0mov dh,5mov ax,1975 ;初始化,dh为输出时的行数mov cx,21so:call icepush axmov ax,ds:[si]call dtoc1pop axpush cxmov dl,1mov cl,00000111bcall show_strpop cx ;这两段输出年份push axpush dxmov ax,ds:[si+84]mov dx,ds:[si+86]call dtoc2pop dxpop axpush cxmov dl,8mov cl,00000111bcall show_strpop cx ;这两段输出收入push axmov ax,ds:[bx+168]call dtoc1pop axpush cxmov dl,18mov cl,00000111bpop cx ;这两段输出雇员数push axpush dxmov ax,[si+84]mov dx,[si+86]div word ptr ds:[bx+168];计算人均收入,结果为16位,保存在ax中call dtoc1pop dxpop axpush cxmov dl,26mov cl,00000111bcall show_strpop cx ;这两段输出平均收入add si,4add bx,2inc dhinc axloop so ;循环21次,增加参数mov ax,4c00hint 21h;名称:ice;功能:在ds:si开始,以“数据”“0”的格式用新数据替换旧数据(即年份字符串);参数:(ax)=word型的数据,es:si指向字符串的首地址;返回:无;说明:把字符串的年份转化为word型数据,并以0结尾,方便dtoc1函数的调用ice:push bxmov ds:[si],axmov bx,0mov ds:[si+2],bxpop bxret;名称:dtoc1;功能:将一个word型数转化为字符串,数应不大于65535;参数:(ax)=word型的数据,es:si指向字符串的首地址;返回:es:[si]放此字符串,以0结尾;说明:因为ds放了数据段,为免混淆,把字符串放在es里,下面的函数也相同dtoc1:push cxpush bxpush dxpush dipush simov di,0cir1:mov cx,10div cxadd dx,30hmov bx,dxpush bxinc dimov dx,0mov cx,axjcxz owjmp short cir1 ow:mov cx,dis:pop bxmov es:[si],bxinc siloop spop sipop dipop dxpop bxpop cx;名称:dtoc2;功能:将一个dword型数转化为字符串,数不应大于FFFFFFFFFFFFFFFF;参数:(ax)=dword型的数据的低16位,(dx)=dword型的数据的高16位,es:si 指向字符串的首地址;返回:es:[si]放此字符串,以0结尾dtoc2:push cxpush bxpush sipush dimov di,0cir2:mov cx,10call divdwadd cx,30hmov bx,cxpush bxinc dimov bx,dxadd bx,axmov cx,bxjcxz oxjmp short cir2ox:mov cx,dis8:pop bxinc siloop s8pop dipop sipop bxpop cxret;名称:divdw;功能:除法,被除数32位,除数16位,商32位,余数16位,不会溢出;参数:(dx)=被除数高16位,(ax)=被除数低16位,(cx)=除数;返回:(dx)=商高16位,(ax)=商低16位,(cx)=余数divdw:push bxpush axmov ax,dxmov dx,0div cxmov bx,axpop axdiv cxmov cx,dxmov dx,bxpop bxret;功能:在指定的位置,用指定的颜色,显示一个用0结束的字符串;参数:(dh)=行号(1~25),(dl)=列号(1~80),(cl)=颜色,es:si指向字符串的首地址;返回:无show_str:push dipush simov di,0push axpush dxdec dhdec dl ;这里采用习惯上的叫法,放在显示缓冲区最开头就是1行1列mov al,160 ;1行80个字符,一个字符2个字节mul dhadd dl,dl ;一个字符2个字节mov dh,0add dx,axadd di,dx ;这几行是为了计算字符串首的偏移地址mov ah,cl ;字符的高位保存属性,低位保存数据push cxchange:mov cl,es:[si]mov ch,0jcxz okmov al,es:[si]push espush axmov ax,0b800h ;显示缓冲区的空间为B8000H~BFFFFHmov es,axpop axmov es:[di],ax ;输出到缓冲区pop esinc siadd di,2jmp short changeok:pop cxpop dxpop axpop sipop diretcodesg endsend start(3)结果如图:四、实验总结通过这次实验,我学会了call和ret指令的用法,学会了编写子程序以及调用各个子程序,组成一个大程序。
我发现,汇编的子程序,就跟c语言的函数差不多。
在实验的过程中,我学会了编写更加复杂的程序,懂得了更多的汇编知识,在汇编语言的学习上又有了新的进步。