汇编语言成绩统计系统的实现
- 格式:doc
- 大小:145.00 KB
- 文档页数:17
汇编语言程序设计创新实验项目1. 编写一个完整的程序:根据零件的数量和总价格,计算出零件的单价。
主程序MAINPRO允许用户在键盘上输入零件数量和总价格;子程序SUBCONV 把从键盘输入的ASCII 码转化为二进制;子程序SUBCALC 计算出零件的单价;子程序SUBDISP 把二进制表示的单价转化为十进制数并显示出结果。
要求:在程序设计时要求使用顺序、分支、循环、子程序和宏汇编等多种方法解决程序设计问题,对于较大的子程序最好使用子程序嵌套,程序中如有多次重复的代码最好使用重复汇编。
2.编写一个完整的程序,分别输入有一个班学生的百分制成绩,根据学生百分制成绩转换出五级分数制。
如低于60分为E,60-69为D、70-79为C、80-89为B、90-99为A。
并统计该班学生人数。
要求:1、学生成绩从键盘接收;2、本程序可以重复运行,自行设计退出程序的方法;3、程序具有可操作性,如,应该有提示语句和判断非法操作的方法和处理方式。
3. 编写一个完整的程序,在屏幕上显示如图所示数字拼成的形状。
01234567891234567890234567890134567890124567890123567890123467890123457890123456890123456790123456784、按要求编写一个完整的程序。
要求:1、自BUFFER开始的内存单元中,存有一个ASCII码字符串。
查找已知字符串中含有多少个子字符串‘AB’的个数,将统计结果以十进制形式显示输出。
2、在查找到子字符串‘AB’后添加空格字符。
5、按要求编写一个完整的程序。
要求:1、编写子程序SORT,将内存中10个无符号字数据由小到大排序。
2、编写子程序FIND,在上述已排好的数据区里查找某一个数,若找到,显示其在数据区的位置,否则显示‘N’字符。
3、编写调用程序,完成排序及检索任务。
6、试编写一程序,要求根据用户键入的月份在终端上显示该月的英文缩写名。
实验四循环结构程序设计上机实验
一、实验目的:
1、掌握循环结构程序设计的基本方法。
2、掌握用masm for Windows编辑、编译、连接汇编语言源程序的基本方法。
3、掌握DEBUG调试程序的U、D、R、T、G、Q常用命令的用法。
二、实验步骤:
1、用ASM masm for Windows将源程序输入,其扩展名为.ASM。
2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。
若汇编时提示有错,则修改源程序后重新汇编,直至通过。
3、用LINK将.OBJ文件连接成可执行的.EXE文件。
4、用DEBUG调试程序并分析结果。
三、实验内容:
1. 在数据段中从变量DA1开始有N个带符号数。
把其中的正数、负数(设没有0)依次存入DA2、DA3开始的单元中并分别统计正、负数的个数存入DA4、DA5字节单元之中。
试编写程序。
将本例中的DEC指令修改为LOOP指令来实现循环程序的设计。
在修改过程中还应修改哪能些指令,请自己分析,为什么?
四、综合练习:
1.编写求100个正整数的和的程序。
如果和不超过16位字的范围(即65535),则将其和保存到WORDSUM单元中,若超过则显示OVERFLOW。
2.设有N个数,连续存放在以BUF为首址的字存储区中,试编写程序,统计其中最高的6位全1的数个数并将统计结果送入寄存器DX中。
五、实验报告(注意:将报告正反两面打印后用手写)附件如下:
实验四循环程序设计实验报告学号姓名成绩。
汇编语言程序设计实验指导【实验提要】以下列举的10个实验,都是以Intel的8086及后续系列微处理器的指令系统为核心,采用宏汇编工具MASM6. X以及调试工具DEBUG或DEBUG32,针对本教材所述内容进行相关的上机实践。
旨在帮助学生加深认识和理解理论教学知识,通过大量的上机实验熟悉8086 CPU的指令功能、用途和使用技巧,进而提高汇编语言程序设计的能力。
(带*号的为选作内容)实验一调试工具DEBUG的应用实验目的通过实验掌握下列知识:1、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG的功能;2、DEBUG命令: A,D,E,F,H,R,T,U的使用;3、BCD码、ASCII码及用十六进制数表示二进制码的方法;4、寄存器: AX,BX,CX,DX,FLAGS,IP。
内容及步骤注:本次实验可以参照教材上关于DEBUG的叙述内容进行。
一、DEBUG 命令使用1、开机后,切换到命令提示符窗口下,出现提示符后键入命令DEBUG, 进入调试环境,显示提示符 '- '。
2、用命令 F 200 220 'AB' 将'AB'的两个ASCII码循环填入内存。
注:第一个参数200是当前段的起始偏移地址,第二个参数220是终了偏移地址,第三个参数‘AB’是被填入的数值,若不给出第二个参数则填入128(8行)个字节。
3、用命令 D200 观察内存中的十六进制码及屏幕右边的ASCII字符。
4、用命令 F230 23F 12 重复上二项实验,观察结果并比较。
5、用命令 E200 41 42 43 44 45将A-E的ASCII码写入地址为200开始的内存单元中,再用D命令观察结果,看键入的十六进制数和ASCII码的对应关系。
6、用H命令检查下列各组十六进制数的和与差(补码表示):(1)56H,34H (2)23H,45H (3)AB,3045H注:输入 H 12 34 则在下一行显示0046 FFDE,即二者的补码和与差。
一.选择题(30)1.在一个8位二进制的机器中,-1的补码是AA.0FFH B.0FEH C.80H D.81H2.指令寄存器(IP)存放的是:____D____A.操作数B.操作码C.指令D.指令地址3.8088CPU的地址总线和数据总线分别是DA.16根和8根B.20根和16根C.16根和20根.D. 20根和8根4、5、6.用ASCII码(七位)表示字符5和7是__(1)_D_;按对应的ASCII值来比较__(2)_B; 二进制的十进制编码是___(3)_A.(1) A.1100101和1100111 B.10100011和01110111C.1000101和1100011D.0110101和0110111(2) A.“a”比“b”大 B。
“f”比“Q”大C.空格比逗号大 D。
“H”比“R”大(3)A.BCD码 B。
ASCII码 C。
机内码 D。
二进制编码7.在下列指令中,不影响堆栈内容的指令是__C_____A.PUSHB.RETC.JMPD.CALL8.中断向量地址是_B_____A.子程序入口地址B.中断服务子程序入口地址C.中断服务子程序入口地址指示器D. 剩余程序入口地址9.8088/8086工作于最大模式,是因为 CA.可以扩展内存空间B.可以扩大I/O空间C.可以构成多处理系统D.可以提高CPU主频10. 8088/8086 CPU要处理“1”号中断,其中断向量的地址在___D______A.00000H---00003HB.00001H-----00004HC.FFFF0HD.00004H----00007H11.执行串操作指令,MOVSB命令实行的操作是___B____A. (AX)←(BX)B.(DI)←(SI)C.(BX)←(BP)D.(BX)←(CX)12.汇编语言程序中的伪指令的功能是_____C___A.解释指令符号B.控制程序的执行C.控制汇编的执行D.仅给标号赋值13.可以直接存取64K字节内存的CPU地址线需要 AA.16 B。
《微机原理与接口技术》课程设计(学年论文)说明书课题名称:学生课程成绩统计程序设计(A1 难度系数1)学生学号:专业班级:学生姓名:学生成绩:指导教师:课题工作时间:2013-6-13 至2013-6-18填写说明:1. 一、二、三项由指导教师在课程设计(学年论文)开始前填写并交由学生保管;2. 第五项由学生在完成课程设计后填写,并将此表与课程设计一同装订成册交给指导教师;3. 成绩评定由指导教师按评定标准评分。
4. 此表格填写好后与正文一同装订成册。
课程设计评审标准(指导教师用)学生课程成绩统计程序设计说明书1、方案论证(1)汇编程序设计步骤、要点(2)DOS系统调用2、程序设计(1)总体设计设计分析与思路说明总体框图(框图中每一个模块的功能说明)(2)程序设计流程图程序代码及注释3、程序调试步骤与结果(1)编辑源程序(2)汇编源程序(3)连接程序(4)在TD中调试程序(5)程序运行结果截屏图片结果说明4、结论用结果说明设计成功之处,对某些问题进行分析、展望。
1.方案论证(1)汇编程序设计步骤、要点1 引言汇编语言能充分利用计算机所有的硬件特性并对硬件进行直接控制,汇编语言编制的程序比使用其它语言编制的程序执行速度快、资源占用少,所以,汇编语言在工业自动化控制和智能化产品的生产上有着十分广泛的用途。
但是,汇编语言是一种低级符号语言,与机器指令有着一一对应的关系,与高级语言相比不太符合人的思维习惯,它向寄存器、内存单元,必须通过一种具体的计算机来学习,同时要求初学者应具有一定的硬件基础,真正掌握起来有一定的难度。
2 汇编语言程序设计技巧808618088汇编语言程序设计中一般说来遵循以下几个步骤:首先分析题意,确定解题算法。
然后根据算法由粗到精画程序流程图,最后编写程序。
3 寻址方式的准确使用程序设计的目的是将输入数据加工处理转换成输出数据,获取正确的数据是保证程序处理正确的前提,而获取正确的数据又与正确地使用寻址方式关系密切,所以有必要先从寻址方式谈起。
第一章绪论自1946 年人类第一台计算机(ENIAC)问世以来,50 多年过去了,计算机的软硬件发展日新月异,突飞猛进。
以个人电脑为例,硬件方面,以CPU、内存、硬盘为代表,CPU 已发展到当今的P4 2.8GHZ,PⅢ和PⅡ已淡出历史舞台,成为昨日黄花;256M DDR 内存,80G 以上的7200 转硬盘已成为标准配置。
如此高性能的配置,就是和 5 年之前相比,也不知高出了多少倍。
软件方面,已经从当初晦涩难懂的机器语言、汇编语言过渡到今天的第四代语言甚至第五代语言,第四代语言(4GL)是完全非过程化的语言,这种语言只要求用户指明将要干什么,而无需指明怎么干,如何做这一工作,则完全交给软件模块来自动处理,大大提高了软件的开发效率和软件质量,使软件开发人员从繁重的脑力、体力劳动中解脱出来。
伴随着计算机软硬件技术的发展,计算机的技术和应用获得了突飞猛进的发展,计算机已经在大致如下的领域得到广泛的应用:1、科学计算:如在天文学、生物学、空气动力学、核物理学、地质勘探、新材料的研制和天气预报等领域中。
2、数据处理:与科学计算不同,数据处理涉及的数据量大,但计算方法较简单。
3、过程控制:指由计算机通过传感器及时采集数据,根据采集的数据和预先设定的要求,由计算机处理后,产生控制信号并通过控制系统对受控对象进行控制或调整。
4、计算机模拟:用计算机程序及相应的设备代替或模拟实物或实际环境,用于实验、测试、特殊训练等。
5、计算机辅助系统:包括计算机辅助设计,计算机辅助制造、计算机辅助教育等。
6、人工智能:指用计算机模拟人的思维和行为,包括推理,学习,模拟人的感知等。
现在在机器人、专家系统、虚拟现实等方面已经获得了实际的应用。
7、办公自动化:可分为事务型、管理型和决策型三个层次。
事务型主要处理日常的办公事务。
管理型办公自动化系统又称为管理信息系统。
决策型办公自动化系统是在上述两个系统的基础上增加决策支持系统构成的。
一.选择题(30)1.在一个8位二进制的机器中,-1的补码是AA.0FFH B.0FEH C.80H D.81H2.指令寄存器(IP)存放的是:____D____A.操作数B.操作码C.指令D.指令地址3.8088CPU的地址总线和数据总线分别是DA.16根和8根B.20根和16根C.16根和20根.D. 20根和8根4、5、6.用ASCII码(七位)表示字符5和7是__(1)_D_;按对应的ASCII值来比较__(2)_B; 二进制的十进制编码是___(3)_A.(1) A.1100101和1100111 B.10100011和01110111C.1000101和1100011D.0110101和0110111(2) A.“a”比“b”大 B。
“f”比“Q”大C.空格比逗号大 D。
“H”比“R”大(3)A.BCD码 B。
ASCII码 C。
机内码 D。
二进制编码7.在下列指令中,不影响堆栈内容的指令是__C_____A.PUSHB.RETC.JMPD.CALL8.中断向量地址是_B_____A.子程序入口地址B.中断服务子程序入口地址C.中断服务子程序入口地址指示器D. 剩余程序入口地址9.8088/8086工作于最大模式,是因为 CA.可以扩展内存空间B.可以扩大I/O空间C.可以构成多处理系统D.可以提高CPU主频10. 8088/8086 CPU要处理“1”号中断,其中断向量的地址在___D______A.00000H---00003HB.00001H-----00004HC.FFFF0HD.00004H----00007H11.执行串操作指令,MOVSB命令实行的操作是___B____A. (AX)←(BX)B.(DI)←(SI)C.(BX)←(BP)D.(BX)←(CX)12.汇编语言程序中的伪指令的功能是_____C___A.解释指令符号B.控制程序的执行C.控制汇编的执行D.仅给标号赋值13.可以直接存取64K字节内存的CPU地址线需要 AA.16 B。
湖北科技学院计算机学院汇编语言课程设计课题题目:显示学生名次表学生姓名:学号:班级:2013年12 月26日一、实验目的进行汇编语言程序设计应用的综合性训练。
综合运用汇编语言循环程序和子程序编程方法,巩固提高汇编语言程序设计能力应用水平。
二、设备与环境PC兼容机、Windows操作系统、汇编程序masm for windows 2010三、实验内容实验内容:编制一程序,要求接收从键盘输入的一个班的学生成绩和学号,对学生的成绩进行排序,再按学号顺序和学生名次顺序分别把学生成绩显示出来。
四、实验结果及分析实验功能:从键盘输入学生姓名和成绩,按照成绩的高低排名显示输出。
程序中设定的名字是英文的,需要小于9位字母,学生人数为3个。
程序思路:1、本程序包括一个主程序和五个子程序。
子程序包括INPUT键盘输入、COPY数据转存、CHANGE十进制数ASCII码转二进制、SORT按成绩排序和PRINT打印班级名单。
2、用变量p控制输入的学生的个数。
本程序中,p=3。
3、姓名和成绩输入分别用DOS中被调用的10号功能实现字符串输入。
在输入最后字符后,要将回车符改为0,以便输出时直接用9号功能显示姓名和成绩。
4、用buffer1和buffer2作为键入的姓名和成绩的缓存区,然后将所有人名和成绩用串传送指令转到smane和score1中保存,打印输出是可以使用。
5、将score1中成绩的十进制数ASCII码转换为二进制数score2.6、将score2中的成绩排序,同时将保存在mingci中的输入次序号也一换,以次序号作为排序指针,在smane和score1中查找相应的人名和成绩。
7、打印排序名单时,从mingci中取出次序号作为位移量,到smane和score1中取出姓名和对应的成绩用9号功能显示。
排序后mingci中先取出的次序号一定是成绩最高的人的,其他类推。
程序代码、代码解析及流程图主程序:流程图:→START:main proc farMOV AX,DATASMOV DS,AXmov es,axmov bx,0mov cx,0call input call sortcall printmov ah,4ch int 21h main endp数据段定义:DATAS SEGMENT 主程序开始初始化CALL INPUTCALL PRINT CALL SORT结束infor0 db 0ah,0dh,'sort= $'infor1 db 0ah,0dh,'input name: $'infor2 db 0ah,0dh,'input score:$'n equ 15 ;姓名长度m equ 4 ;成绩长度(3位+回车) p equ 4 ;输入的人数(4个q equ 3 ;成绩位数buff1 db n,?,n dup(0),'$';姓名缓冲区,加$以便输出buff2 db n,?,n dup(0),'$';成绩缓冲区sname db p dup(n+1 dup(0)) ;保存姓名score1 dw p dup(m+1 dup(0)) ;保存成绩score2 dw p dup(m+1 dup(0))mingci db p dup(0) ;名次x dw?sign1 dw 0sign2 dw 0cont db'1';计数DATAS ENDS子程序(INPUT) 1:输入姓名、成绩input procinc bx ;输入次数统计cmp bx,p ;输入次数ja exitlea dx,infor1 ;显示提示1mov ah,9int 21hlea dx,buff1 ;输入姓名mov ah,10int 21hmov al,buff1+1 ;实际输入个数,aladd al,2 ;+2,包含buffer1的0,1号单元mov ah,0mov si,ax ;回车od所在位置,跟在最后一个字符后mov buff1[si],0 ;将od换为0,便于输出显示lea dx,infor2 ;显示提示2mov ah,9int 21hlea dx,buff2 ;输入成绩mov ah,10int 21hmov al,buff2+1 ;实际输入个数add al,2 ;个数+2,包含0,1单元找到odmov ah,0mov si,axmov buff2[si],0 ;将od换为0,便于输出显示mov mingci[bx-1],bl ;bx为输入次数,保存输入次序cmp bx,1 ;第一次输入转let1jz let1add sign1,n+1 ;姓名间隔为n+1add sign2,q ;成绩间隔为qlet1:call copy ;子程序嵌套jmp inputexit:ret input endp流程图:→子程序INPUTBX+1BX>p ?输入姓名输入成绩保存输入次序CALL COPY RET 返回主程序N Y子程序INPUTBX+1BX>p ?输入姓名输入成绩保存输入次序CALL COPYRET 返回主程序N Y子程序2(COPY):数据转存copy procmov cx,n+1 ;姓名长度+1(包含$)lea si,buff1+2lea di,sname ;姓名传送到snameadd di,sign1 ;加上间隔值cldrep movsbmov cx,nmov ax,'$';用$覆盖姓名区,清除已输入的姓名lea di,buff1+2rep stosbmov cx,m+1 ;成绩位数+1(包含s)lea si,buff2+2lea di,score1 ;成绩传送到scoreladd di,sign2 ;加上间隔值cldrep movsblea si,buff2+2mov di,sign2call change ;二进制成绩,scorel2retcopy endp流程图:→子程序COPYCX=n+1姓名传送到sname成绩传送到scorelCALL CHANGERET返回子程序3(CHANGE):十进制数ASCII码→二进制change procmov x,0mov cx,[si-1] ;成绩的位数,cx and cx,000fh ;保留低4位rept2:mov al,[si] ;按位取出成绩cmp al,30h ;是否在0~9之间 jl exit1cmp al,39h子程序CHANGECX ←成绩的位数从buffer2取出一数→AL在0~9之间?去掉ASCII 码扩大10倍与X 相加循环结束?score2←二进制成绩xRET 返回YYNNjg exit1and ax,000fh ;去掉ASCII 码 xchg ax,xmov dx,10 ;将ax 中前一次形成的数扩大10倍mul dxadd x,ax ;保存到x inc si loop rept2mov ax,x ;按十进制形成的成绩以二进制保存mov score2[di],ax ;二进制成绩送入score2 mov x,0add sign2,2 ;下一个成绩单exit1: ret change endp流程图→子程序SORTCX ←人数-1保存外循环次数AI ←score2AI ≥AI+1score2中成绩互换mingci 中名字互换I=I+1内循环结束?恢复外循环次数外循环结束?RET 返回NYY YNN子程序4(SPORT ):按成绩排序 sort procmov cx,p ;数组长度 dec cxloop1:push cx ;保存外循环次数 mov bx,0 mov si,0loop2:mov ax,score2[bx]cmp ax,score2[bx+m+1] ;m+1=5 jge next ;降序 xchg ax,score2[bx+m+1];交换成绩 mov score2[bx],ax mov al,mingci[si]xchg al,mingci[si+1] ;交换成绩 mov mingci[si],alnext:add bx,m +1 ;下一个成绩 inc si loop loop2pop cx ;恢复外循环次数 loop loop1 ret sort endp子程序→子程序5(PRINT):打印排序名单print proclea dx,infor0 ;显示结果提示mov ah,9int 21hmov cx,pmov bx,0mov ax,0mov di,0rept3:mov dl,0ah ;回车换行mov ah,2int 21hmov dl,0dhint 21hmov dl,cont ;显示名次序号mov ah,2int 21hinc contmov dl,0ah ;回车换行mov ah,2int 21hmov dl,0dhint 21hmov ax,0mov al,mingci[di] ;取名次dec al ;位置-1,因为地址从0开始mov bl,9 ;姓名位置=al×9(包含$) mul bllea dx,snameadd dx,ax ;偏移地址+姓名位移量mov ah,9 ;显示名字int 21hmov dl,0ah ;回车换行mov ah,2int 21hmov dl,0dhint 21hmov ax,0mov bx,0mov al,mingci[di] ;取名次dec al ;地址从0开始mov bl,5 ;成绩位移量=al×5(包含$)mul bllea dx,score1add dx,ax ;显示成绩mov ah,9int 21hinc diloop rept3retprint endpcodes endsEND START子程序PRINTCX←人数显示人数流程图→从mingci中取出一数→AL计算姓名单元位移量N显示姓名计算成绩单元位移量显示成绩修改地址值循环结束?RET返回运行结果:实验体会:在复杂的程序设计中,采用模块化结构可以划分功能、分界程序,使得程序有复杂变简单,变清晰。
题目1一个完整的计算机系统应当包括______。
a. 硬件系统与软件系统正确b. 计算机与外设c. 主机、键盘与显示器d. 系统硬件与系统软件正确答案是:硬件系统与软件系统题目2能把汇编语言源程序翻译成目标程序的程序,称为______。
a. 汇编程序正确b. 编辑程序c. 编译程序d. 解释程序正确答案是:汇编程序题目3成绩统计属于计算机应用中的______。
a. 过程控制领域b. 数据处理领域正确c. 辅助设计领域d. 科学和工程计算领域正确答案是:数据处理领域题目48位二进制数组成1个______。
a. 卷b. 字节正确c. 字d. 块正确答案是:字节题目5CPU不能直接访问的存储器是______。
a. 外存储器正确b. RAMc. Cached. ROM正确答案是:外存储器题目6计算机可分为数字计算机、模拟计算机和混合计算机,这种分类是依据______。
a. 处理数据的方式正确b. 使用范围c. 性能和规律d. 功能和用途正确答案是:处理数据的方式题目7常用的微机输入设备通常包括______。
a. 键盘和显示器不正确b. 键盘和鼠标c. 软盘和硬盘d. 键盘和软盘正确答案是:键盘和鼠标题目8微型计算机的内存储器______。
a. 按十进制位编址b. 按字长编址c. 按二进制位编址不正确d. 按字节编址正确答案是:按字节编址题目9微型计算机又被称为______。
a. 小型机b. 个人电脑正确c. 中型机d. 工作站正确答案是:个人电脑题目10同一台计算机,安装不同的应用软件或连接到不同的设备,就可完成不同的任务,这是指计算机具有______。
a. 自动控制能力b. 高速运算能力c. 逻辑判断能力不正确d. 通用性正确答案是:通用性题目11计算机软件分系统软件和应用软件两大类,其中系统软件的核心是______。
a. 数据库管理系统b. 程序语言系统c. 操作系统正确d. 财务管理系统正确答案是:操作系统题目12十进制数269转换为十六进制数为______。
第4章汇编语言程序设计1.已知在BUF的起始处保存有N个字符的ASCII码,编写汇编语言程序实现,将这组字符串传送到缓冲区BUFR中,并且使字符串的顺序与原来的顺序相反。
解:BUF DB "BONJOUR_BELLE"BUFR DB 100 DUP(?)MOV CX, NLEA SI, BUFLEA DI, BUFRADD DI,CXDEC DIL1:MOV AL,[SI]MOV [DI],ALINC SIDEC DILOOP L12.利用移位、传送和相加指令实现AX的内容扩大10倍。
解:将扩大后的结果放在DX:AX中,注意到10×AX=8×AX+2×AX。
XOR DX,DXSHL AX, 1RCL DX, 1MOV BX,AXMOV CX,DXSHL AX, 1RCL DX, 1SHL AX, 1RCL DX, 1ADD AX, BXADC DX, CX3.在缓冲区V AR中连续存放着3个16位的无符号数,编写程序实现将其按递增关系排列;如果V AR中保存的为有符号数,则再编写程序实现将其按递减关系排列。
解:V AR DW 1236,-432,3900XOR SI,,SIMOV AX,V AR[SI]CMP AX, V AR[SI+2]JAE L1XCHG AX, V AR[SI+2]L1:CMP AX, V AR[SI+4]JAE L2XCHG AX, V AR[SI+4]L2:MOV V AR[SI], AXMOV AX,V AR[SI+2]CMP AX, V AR[SI+4]JAE L3XCHG AX, V AR[SI+4]L3:MOV V AR[SI+2], AX4.编写程序段实现将AL和BL中的每一位依次交叉,得到的16位字保存在DX中,例如(AL)=01100101B,(BL)=11011010B,则得到的(DX)=10110110 10011001B。
《C语言程序设计》课程设计说明书班级:08计算机应用技术<1>班学号:A083GZ*********姓名:陈****:***2009.12前言从C语言产生到现在,它已经成为最重要和最流行的编程语言之一。
C语言具有高级语言的强大功能,却又有很多直接操作计算机硬件的功能(这些都是汇编语言的功能),因此,C语言通常又被称为中级语言。
学习和掌握C语言,既可以增进对于计算机底层工作机制的了解,又为进一步学习其他高级语言打下了坚实的基础。
在各种流行编程语言中,都能看到C语言的影子,如Java的语法与C语言基本相同。
学习、掌握C语言是每一个计算机技术人员的基本功之。
在这次的课程设计中,我学到了很多东西,比如课堂上老师所教授的仅是基础的基础,是编程的前提,正所谓“师父领进门,修行靠个人”。
老师把我们带进C的世界,让我们不再“哇!”的羡慕别人的程序设计,这是信心与兴趣的培养。
学习任何程序设计语言,都要认识几件事情。
首先,要学的东西很多,但是掌握了它们之后,你会有极大的成就感。
其次,学习的过程很有趣,你将体会到这一点。
第三,你只有通过动手实践才能学会程序设计。
最后,学习程序设计语言比你想象的容易得多,所以你肯定能掌握它。
要理解在特定背景中的程序设计方法,需要理解应用独立语言元素的机理。
该程序应用了本书学习的知识。
书上的程序可帮助你获得开发程序的能力和信心,了解如何综合运用各种语言元素。
最重要的是,它们能让你了解设计真实程序时会遇到的问题以及如何管理实际的代码。
如果第一次读复杂的程序没有完全理解,不必担心。
第一次难免会觉得难以理解,因为它们通常都是把你所学的知识应用到了相当复杂的问题中。
如果你真的不能理解,书是非常有用的资源,那可得要多看书多请教老师咯,然后再回头研究这些程序。
这也是学习程序设计语言的一个重要部分。
尝试修改程序,看看还能让它们做什么,这是很有趣的。
不要害怕尝试,如果不明白某一点如何使用,输入几种变体,看看会出现哪些情况。
实验指导一.上机实验的一般步骤和要求:1.上机前对选定的实验题应有所了解,并写好程序。
2.上机过程中对重要方法和步骤、问题和结果应有记录。
3.所有程序原则上都要通过调试手段运行。
4.实验后进行分析和总结,给出实验报告。
二.实验报告的内容一般有:1.实验题的内容及要求。
2.思路和方法、算法描述及有注释和说明的程序清单。
3.程序调试和运行的重要步骤、问题和结果。
4.分析和总结。
三.实验环境的建立参看第二章第一节。
通常在WINDOWS XP系统下。
如果其他操作系统(如WIN 7),不支持汇编程序工作,可安装Masm for Windows集成实验环境asm20125(支持Win2000、WinXP、WinVISTA、WIN7等操作系统)。
/实验1 上机过程及程序调试实验目的:1.通过第二章两个简单实例认识汇编语言程序,初步了解程序格式;段定义;标号;DOS系统功能;操作数;指令;说明语句等作用。
2.掌握汇编语言程序从设计到形成可执行程序文件的方法和步骤。
即编辑、汇编、连接。
了解汇编语言的系统工作文件和工作环境。
理解汇编程序和连接程序的作用。
理解列表文件内容。
3.初步了解程序的运行和调试方法。
学会使用DEBUG主要命令和常用的DOS命令。
实验内容:【1】编辑第二章两个简单实例,通过汇编、连接。
【2】用DEBUG对hello程序进行调试。
问题:(1) 该程序在内存中的起始地址是多少?结束地址是多少?共占几个字节?(2) 0B63:0008表示什么意思?(3) 程序中定义的串‘HELLO, WORLD !$’在内存中的起始地址是多少?请用DEBUG命令显示该串。
(4) 如果用带有断点的G命令运行该程序,写出命令。
(5) 用P命令单步执行程序。
(6) 用T命令跟踪程序,在跟踪执行INT 21时出现什么问题?(7) 用A命令在偏移地址100H处建立该段程序,并运行。
(8) 用W命令把该段程序写成文件,再调入。
实验2 算术及位串处理程序实验目的:掌握多数位的算术运算、移位操作、字符串操作等程序的设计,学习使用分支与循环等基本编程方法,熟练使用DEBUG。
《汇编语言》期末试题(A卷)计算机科学技术、网络工程专业一、单选题(每小题2 分,共30 分)1.用DEBUG调试汇编语言程序时,显示数据的地址是5000:0400,此时数据的物理地址是()A.50400HB.5040HC.54000HD.5400H2.设ES=1100H,(12000H)=90H,(12001H)=20H,(12002H)=30H,执行MOV BX,ES:[1000H]则BX=( )A.90HB. 2090HC. 9020HD. 3020H3.8086中下列四条指令中错误的是( )A.MUL AX, BLB.MOV AX, [DI]C.DEC AXD.ADD AL,[SI]4. 指令ADD AL,[BX+SI]中源操作数是()寻址方式。
A. 寄存器B.直接C. 基址变址D. 相对基址变址5.指令MOV AX,0A5B6H MOV CL,4 ROL AX,CL 执行后,AX=( )A.0A5B6HB.0B6A5HC.00A5HD.5B6AH6.当执行指令CMP AX,BX后,若ZF=1,下面的叙述正确的是()。
A 表示AX和BX内容不相同B 表示AX和BX内容相同C 表示AX内容大于BXD 表示AX内容小于BX7.定义宏的伪指令是( )A.PROC和ENDPB.SEGMENT和ENDSC.EQU和ENDD.MACRO和ENDM8. 完成同指令LEA AX,BUF 相同功能的指令是( )A. MOV AX, BUFB. LDS AX,BUFC. MOV AX,SEG BUFD. MOV AX,OFFSET BUF9. 循环指令LOOP NEXT,终止循环操作的条件是( )A. CX=0且ZF=0B. CX=0C. CX=0 且ZF=1D. CX=0 或ZF=110.有数据定义NUM DB 2 DUP ( 1,2,3,4,5) ,NUM占有( )字节存储单元。
A.4B.5C.6D.1011.在8086/8088系统中,用于确定堆栈栈顶地址的寄存器有( )A.CS:IPB.SS:SPC.DS:SID.DS:DI12. IN AX, 20H指令中的20H是( )。
一、软件背景介绍学生成绩管理系统设计与实现学生成绩管理系统设计与实现摘要学生成绩管理系统是学校不可或缺的一个组成部分,随着计算机技术的逐渐发展,计算机在教育系统中的应用得到了巨大的发展。
教务管理正在逐步迈向管理信息现代化。
但是我国的教务管理信息化水平还处在初级阶段,主要表现在对学生的成绩管理、学生的课程管理还是采用原有的人工管理方式。
学校的规模不断扩大,学生数量急剧增加,有关学生的各种数据也成倍增长。
面对庞大的信息量,这时的人工管理几乎无法实现,在这种情况下用数据库进行管理变的尤为必要,这可以发挥计算机的优势,就需要有教务管理系统来提高学生成绩管理工作的效率.通过这样的系统,可以做到信息的规范管理,科学统计和快速的查询,从而减少管理方面的工作量和减少人为的错误。
进行数据库设计首先必须准确了解也分析用户需求(包括数据和处理)。
目的是为学生成绩管理数据库系统的设计打下牢牢的基础,是数据库开发的重要文件依据,主要为数据库设计人员使用,是用户和系统分析员的项目依据文件。
作为“地基”的需求分析是否做得充分与准确,它决定了在其上构建数据库大厦的速度和质量。
需求分析做得不好,甚至会导致整个数据库设计返工重做。
成绩管理系统是针对高等院校的学生学籍管理,因此此系统的用户应包括系统管理员和学生。
主要涉及系部信息、班级信息、学生信息、课程信息和成绩等多种数据信息。
经走访调查得出教务员有以下要求:(1)管理员、教师和学生登录后可以改自己的密码;(2)管理员、教师和学生可以查询课程信息;(3)管理员可以删除学生信息、教师信息、登录用户信息,还可以查询和删除学生成绩,添加、删除课程信息;(4)管理员批量导入、导出数据;(5)教师可以录入、修改成绩,批量导出数据;(6)学生可以查询成绩。
不过此次我做的系统只针对学生成绩管理实现的对学生成绩的统计,主要运用汇编语言来完成各个模块的应用,先以内存存储单元中读取数据(假设的学生成绩数据),将成绩及姓名放在两个存储单元,然后通过循环,地址的的增加,实现姓名与成绩的对应输出,其中有冒泡排序的实现及十进制显示输出,还有ABCDE等级的统计及附加功能等级的判断。
实现的功能略显逊色,但应用了很多技术,主要实现的功能如下:(1)显示学生成绩;(2)对成绩的等级划分;(3)对学生成绩进行排序;(4)输入新的学生姓名及成绩,并将其入库;(5)输入新的成绩显示出此成绩的等级;(6)清屏;(7)退出系统。
1、成绩统计管理系统运行的功能主菜单如下:图1主菜单功能图2、一号显示预存姓名及分数功能,运行时功能图如下:图2一号功能运行显示图二、核心算法思想先以内存存储单元中读取数据(假设的学生成绩数据),将成绩及姓名放在两个存储单元,然后通过循环,地址的的增加,实现姓名与成绩的对应输出。
统计可以设计个子程序SORT,直接调用统计出ABCDE等级的人数。
然后用冒泡法对成绩排序,再调用2-10进制显示转换的子程序显示结果。
增强功能输入数据存在内存中后,其显示及统计的实现和基本功能的方法是一样的。
在输入数据的时候,要符合自己定义的类型。
要体现统计和10进制输出的实现采用预存多组数据在内存单元中,这样一方面在运行时避免输入大量数据,而可以直接输出,检验结果;另一方面,可以防止写入的类型不对而卡住,而影响实现其他后续功能。
其次是考虑到程序的可行性问题。
当进入提示用户输入错误信息时如(当输入非1-7),系统不会必需要有报错及异常中断情况,否则进入死循环。
所以在程序设计时必须加对用户输入选项数据进行判断的分支或子程序。
在冒泡排序的实现上要注意是字还是字节,否则会无法达到每个都参与排序的目的。
在增强功能的实现中要特别主义审题, 即学生姓名及成绩根据屏幕提示由键盘录入再存入数据存储单元,要在程序代码功能中显示出来,开始对题审的不够清楚,所以才会有由键盘录入存入数据存储单元后显示及判断成绩等级的分支程序.而后申请题后加了4号选项功能,输入几组数后输出,输出对应的姓名及分数,如果还要实现对其统计,只需调用前面的2号选项的子程序即可。
三、核心算法流程图图3 程序主流程图2、在成绩统计管理程序中,三号功能运用冒泡法实现了对已输入的学生成绩的排序,其流程图如下:图4 三号功能流程图3、排序后十进制显示和顺序十进制显示调用的子程序,其流程图如下:图5 十进制显示算法流程图四、下面是成绩统计成绩系统的源代码:stack segment stackdb 200 dup (0)stack endsDATA SEGMENT PARA 'DA TA'menu DB ' ******************************* ',0dh,0ah ;主菜单列表DB ' * main menu * ',0dh,0ahDB ' * * ',0dh,0ahDB ' * 1.output all student score * ',0dh,0ah;输出所有学生的成绩DB ' * 2.statistics score(ABCED) * ',0dh,0ah;显示每个成绩段的学生人数DB ' * 3.sort score * ',0dh,0ah;学生成绩的排序DB ' * 4.intput five names and scores * ',0dh,0ah;任意添加五个学生的姓名与成绩DB ' * 5.intput one name and score * ',0dh,0ah;任意输入一个学生的姓名与成绩,会显示出其成绩的等级DB ' * 6.clear screen * ',0dh,0ah;清屏DB ' * 7.exit * ',0dh,0ah;退出DB ' ************************ ',0dh,0ahPlase DB'plasechoose:(1-7): ',0dh,'$' ;选择1-7err db ' the data error$'put0 db 'plase intput one name and score',0dh,'$'put db 'plase intput five names and scores',0dh,'$'bye db '***************thank you to use*********************',0dh,'$'score dw 64,71,66,61,78,80,83,89,79,96n1 =($-score)/2;score的长度scoreadd DB 3; 增加的分数存入指定单元DB ?DB 3 DUP(0)db '$'scoreadd2 DB 3; 增加的分数存入指定单元DB ?DB 3 DUP(0)db '$'scoreadd3 DB 3; 增加的分数存入指定单元DB ?DB 3 DUP(0)db '$'scoreadd4 DB 3; 增加的分数存入指定单元DB ?DB 3 DUP(0)db '$'scoreadd5 DB 3; 增加的分数存入指定单元DB ?DB 3 DUP(0)db '$'score1 db 15 dup(0)mes1 DB 'THE NUMBER OF E(0---59):$'; 显示E等级的人数的界面,对应V1mes2 DB 'THE NUMBER OF D(60--69):$'; 显示D等级的人数的界面,对应V2mes3 DB 'THE NUMBER OF C(70--79):$'; 显示C等级的人数的界面,对应V3mes4 DB 'THE NUMBER OF B(80--89):$'; 显示B等级的人数的界面,对应V4mes5 DB 'THE NUMBER OF A(90-100):$'; 显示A等级的人数的界面,对应V5mes6 DB ' $'; 12字节空格使显示分数及对应名字相隔mes7 db 'name: score:',0ah,0dh,'$'mes8 db 'name:',0ah,0dh,'$'; 提示输入姓名mes9 db 'score:',0ah,0dh,'$'; 提示输入分数bo1 DB 'you input the score of student is A$'; 判断输入的数据的等级后显示对应级别A bo2 DB 'you input the score of student is B$';判断输入的数据的等级后显示对应级别B bo3 DB 'you input the score of student is C$'; 判断输入的数据的等级后显示对应级别C bo4 DB 'you input the score of student is D$';判断输入的数据的等级后显示对应级别D bo5 DB 'you input the score of student is E$'; 判断输入的数据的等级后显示对应级别E bo6 DB ' 1.output all student score 2.statistics score(ABCED) ' DB ' 3.sort score 4.intput five names and scores 'DB ' 5.intput one name and score 6.clear screen 7.exit ',0dh,'$' ;清屏后提示v1 db ? ;0---59段人数计数器v2 db ? ;60--69段人数计数器v3 db ? ;70--79段人数计数器v4 db ? ;80--89段人数计数器v5 db ? ;90-100段人数计数器nam1 DB 'chen bo$';学生姓名已存入指定数据存储单元NAM(1-10)nam2 DB 'chenhin$'nam3 DB 'chenhun$'nam4 DB 'huanwei$'nam5 DB 'tanghui$'nam6 DB 'chenfan$'nam7 DB 'mao yun$'nam8 DB 'zhanjun$'nam9 DB 'zhanhua$'nam10 DB 'chenlin$'nam11 DB 8; 增加的名字存入指定单元DB ?DB 8 DUP(0)nam12 DB 8DB ?DB 8 DUP(0)nam13 DB 8DB ?DB 8 DUP(0)nam14 DB 8DB ?DB 8 DUP(0)nam15 DB 8DB ?DB 8 DUP(0);NUM DB 21,22,23,24,25,26,27,28,29,30;***********显示***************show macro mlea dx,mmov ah,9int 21hendm;***********输入******************input macro flea dx,fmov ah,10int 21HendmDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART PROCMOV AX,DA TAmov ds,AXshow menuchen:show plasemov ah,1;选择菜单项int 21hcall adcmp al,'7'ja error ;当输入非法数据时,报错cmp AL,'1'jb error; 当输入非法数据时,报错CMP AL,'1'JE one; 当输入1时,转入分支程序,实现输出分数及名字功能CMP AL,'2'JE two; 当输入2时,转入TWO分支程序,实现统计功能CMP AL,'3'JE three; 当输入3时,转入THREE分支程序,实现排序功能cmp AL,'4'JE fo; 当输入4时,转入FO分支程序,实现键盘输入功能及输出cmp AL,'5'je fiv; 当输入5时,转入FO分支程序,实现键盘输入功能能及等级判断cmp al,'6'je six;当输入6时,转入SIX分支程序,实现清屏CMP AL,'7'jmp byebye; 当输入7时,转入BYEBYE分支程序,退出error: ;分支程序,当输入非法数据时,报错show errcall adjmp chenquit: ; 分支程序,退出mov ah,4chint 21hbyebye:show byejmp quit;******************** 1显示所有成绩************** one: ; ONE分支程序,实现输出分数及名字功能mov cx,n1lea di,scoreshow mes7mov bp,offset nam1chen1:;*********以下显示姓名**************mov dx,bpmov ah,9int 21hadd bp,8show mes6;*********以下显示分数**************mov ax,[di]mov bx,10lea si,score1call radixmov [si],byte ptr 0dhmov [si+1],byte ptr 0ahmov [si+2],byte ptr '$'lea dx,score1mov ah,9int 21h;以上是2-10进制转换及显示add di,2;*********以上显示分数**************dec cxjnz chen1jmp chen;***********2-10***************radix proc;2-10进制转换push cx;(cx)=10push dx; mov cx,0;P进制入站时的计数器L1:MOV DX,0DIV BX;商置ax,push dx;inc cxor ax,axjne L1l2:pop ax;出栈cmp al,10;比较jb next;跳入下一个add al,7;进行加法运算next:add al,30hmov [si],alinc sidec cxjnz l2pop dx;出栈pop cx;出栈retradix endp; *****************2号统计各分段人数****************** two:lea si,scoremov cx,n1call count ;统计各分段人数call adjmp chen; ********************3号顺序分数排序*************** three:lea bx,scoremov cx,n1call sort;排序并存放在score为首址的单元中;************显示所有成绩************mov cx,n1lea di,scorechen2:mov ax,[di]mov bx,10lea si,score1call radixmov [si],byte ptr 0dhmov [si+1],byte ptr 0ahmov [si+2],byte ptr '$'lea dx,score1mov ah,9int 21h;以上是2-10进制转换及显示add di,2dec cxjnz chen2jmp chen;***********冒泡排序子程序*************** sort proc;P128排序push ax;入栈push dx;入栈push si;入栈push di ;入栈mov dx,cxsub dx,2mov si,2lopi:mov di,siadd di,2mov ax,[bx+si-2]lopj:cmp ax,[bx+di-2]jbe lopkxchg [bx+di-2],axmov [bx+si-2],axlopk:add di,2cmp di,20jbe lopjadd si,2cmp si,18;比较jbe lopipop dipop si;出栈pop dx ;出栈pop ax;出栈ret;返回sort endp; ******************4输出输入成绩******************* fo:show put;显示call adshow mes8;显示信息input nam11;输入姓名call adshow mes9;显示信息input scoreadd;输入call ad;调动程序show mes8;显示信息input nam12call adshow mes9;显示信息input scoreadd2call ad;调动程序show mes8;显示信息input nam13call ad;调动程序show mes9;显示信息input scoreadd3call ad;调动程序show mes8input nam14call adshow mes9input scoreadd4call ad;**************显示对应名字分数************show mes7;显示对应名字分数; call adshow nam11+2;显示nameshow mes6show scoreadd+2;显示scorecall adshow nam12+2;显示nameshow scoreadd2+2;显示scorecall adshow nam13+2;显示nameshow mes6show scoreadd3+2;显示scorecall adshow nam14+2;显示nameshow mes6show scoreadd4+2;显示scorecall adshow nam15+2;显示nameshow mes6show scoreadd5+2;显示scorecall adjmp chenfiv:show putcall adshow mes8;显示信息input nam11;输入姓名call ad;调用show mes9;显示信息input scoreaddcall adshow mes7;显示对应名字分数show nam11+2;显示nameshow mes6show scoreadd+2;显示scorecall adlea bx,scoreadd+2call abcdecall adjmp chen; *******************6清屏程序************* six:call clrshow bo6show put0call adshow mes8input nam11;输入姓名call adshow mes9;显示信息input scoreadd;输入分数call ad;*************判断ABCDE子程序************* abcde procpush ax;入栈mov ax,0lea bx,scoreadd+2mov ah,[bx]inc bxmov al,[bx];把bx中所存地址包含的内容移动到al b1:cmp ax,'59';与59进行比较jg b2;>show bo5;0-59call adjmp chen;跳到chen:执行程序b2:cmp ax,'69';与69进行比较jg b3 ;60-69 >show bo4call adjmp chen;跳到chen:执行程序b3:cmp ax,'79';与79进行比较jg b4 ;70-79 >show bo3call adjmp chen;跳到chen:执行程序b4:cmp ax,'89';与89进行比较jg b5 ;80-89>show bo2call adjmp chen;跳到chen:执行程序b5:call adjmp chenpop axabcde endp; ***********统计成绩子程序****************** count procm1:mov bx,[si]add si,2cmp bx,59jg m2;>inc v1 ; 0---59段人数计数器jmp m6 ;0-59m2:cmp bx,69jg m3 ;60-69 >inc v2 ; 60--69段人数计数器jmp m6m3:cmp bx,79jg m4 ;70-79 >inc v3 ; 70--79段人数计数器jmp m6m4:cmp bx,89jg m5 ;80-89>inc v4 ; 80-89段人数计数器jmp m6m5:inc v5 ; 90-99段人数计数器m6:loop m1mov dx,offset mes1mov ah,09hint 21hmov dl,v1add dl,30hmov ah,02hint 21hcall admov dx,offset mes2int 21hmov dl,v2add dl,30h;相加mov ah,02h ;将02h中的内容移到ah中int 21hcall admov dx,offset mes3 ;移动mov ah,09h ;将09h中的内容移到ah中int 21hmov dl,v3add dl,30h ;将30h中的内容移到d1中mov ah,02h ;将02h中的内容移到ah中int 21hcall admov dx,offset mes4 ;偏移地址mov ah,09hint 21hmov dl,v4add dl,30hmov ah,02hint 21hcall admov dx,offset mes5mov ah,09hint 21hmov dl,v5add dl,30hmov ah,02hint 21hretcount endp; ****************清屏子程序*********** CLR PROCMOV AH,2MOV BH,0MOV DX,0INT 10HMOV AH,0AHMOV AL,' 'MOV BH,0MOV CX,2000INT 10HretCLR endp; ************回车换行子程序*******ad procpush ax;压入栈push dx;压入栈mov dl,0ahmov ah,2int 21hmov dl,0dhmov ah,2int 21hpop dx;出栈pop ax;出栈retad endp;*********************************START ENDPcode endsend START;结束程序五、心得体会通过这次学生成绩课设,我发现有很多东西,很多细节没注意,如循环中的循环次数的设计应特别注意,宏调用及子程序调用的区别与便捷性等等,真正自己动手做了才发现了自己的理论知识是如此的不扎实,字符窜的输入及输出要注意结束符等等。