语言程序设计课程设计指导书_课程设计任务及指导书

其他范文 时间:2020-02-27 11:09:18 收藏本文下载本文
【www.daodoc.com - 其他范文】

语言程序设计课程设计指导书由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“课程设计任务及指导书”。

汇编语言程序设计课程设计指导书

一、课程设计的目的本课程设计是《汇编语言程序设计》课程的后继教学环节,其宗旨是使学生通过对一个较大型的、综合性的应用程序进行阅读、修改、添加功能等工作,对汇编语言程序设计有更进一步的认识,提高编程技巧和阅读理解复杂程序的能力。

二、课程设计的任务要求

根据所给的“Reader.asm”应用程序框架,在此基础上修改和添加功能。1.基本任务: 

   认真阅读“Reader.asm”源程序,理解程序每一条指令在程序中的作用; 用→、←键在窗口内左右移动文本;

用PgDn,PgUp键上下快速移动文本(每次移半帧); 设计专用键放大、缩小窗口,改变窗口位置。

2.扩展任务:   对文本内的Tab字符(ASCII码09H)进行处理:遇到Tab键,下一个字符显示在下一个表站开始处(每个6个字符一个表站);

设置状态行,显示当前文件名、文本位置(仿垂直滚动条)。

3.自行设计的其它任务:

三、课程设计报告的内容

1.课程设计题目名称、班级号、学号、学生姓名和课程设计起止日期(封面);

2.上海应用技术学院课程设计任务书(下发)3.课程设计目的和要求;

4.课程设计任务内容; 5.详细设计说明; 6.软件使用说明; 7.课程设计总结;

8.附录:1 参考文献 2 程序清单(电子版)。

四、课程设计详细设计说明及其它要求

1.2.3.4.5.6.分析原“Reader.asm”程序结构:每个模块说明,较大模块程序流程图; 对你已经实现的功能做详细的说明,并附上流程图及部分程序清单; 自己对该“文件阅读器”的进一步设想;

对于有设想但最终未实现的功能的大致编程思路的阐述; 论述在设计过程中遇到的并且对你具有启发性的问题; 交课程设计报告手写版,源程序交电子版。

五、评分标准

1.根据平时出勤情况和设计时的工作情况;

2.根据课程设计程序的完成情况,必须有可运行的软件。3.根据课程设计报告的质量。课程设计报告不能抄袭,抄袭判为不及格。4.在题目要求之外附加具有实用性的功能。

六、课程设计工作进度计划

星期一:课程设计介绍,源程序阅读理解,功能设计,程序编写。星期二:功能设计,程序编写。

星期三:程序编写与调试,课程设计报告撰写。星期四:程序编写与调试,课程设计报告撰写。

星期五:程序最终修改,课程设计报告撰写,提交报告并答辩。

七、主要参考资料

[1]杨文显.汇编语言程序设计简明教程.北京:电子工业出版社,2005

八、附录

《文本阅读器》汇编语言源程序清单

;Title: Aemble Program “Reader.asm”

;Read a file from disk, display it‟s contents on screen;Move the content on screen by up/down arrow keys;========================== MYDAT SEGMENT MAXLEN DW 1000;最大行数 INDEX DW 1000 DUP(?);行索引 LENCT DW 0;实际行数 CURLINE DW 0;当前页第一行行数 CCOUNT DW ?;文件总字符数

TOP DB 5;窗口左上角行数 LEFT DB 5;窗口左上角列数 WS DW 60;窗口宽度 HS DW 15;窗口高度 FG DB 17H;文字属性 FGB DB 1FH;窗口边框属性

MSG1 DB 'File:$';输入文件名提示 MSG2 DB 'File open error!$';打开文件出错时提示 MSG3 DB 'File read error!$';读文件出错时提示 FILENA DB 80,?,80 DUP(?);输入文件名缓冲区

;定义功能键和相应的处理程序

;每个功能定义两个数据:扫描码,处理程序入口地址;该数据由DOSUB子程序使用

KEYSUB DW 48H, SUB1 , 50H, SUB2, 0

MYDAT ENDS

;==========================

BUFFER SEGMENT PARA DB 65535 DUP(?);文件缓冲区,文件最大为64K BUFFER ENDS

;==========================

SSEG SEGMENT STACK „STACK‟;堆栈段

DW 100 DUP(?)SSEG ENDS

;==========================

;宏定义 DISPINIT: 设置显示器显示方式 DISPINIT MACRO MOV AX,0003H;文本方式 25x80 INT 10H ENDM;----------;宏定义 PROMPT: 显示字符串 PROMPT MACRO OUTMSG LEA DX, OUTMSG MOV AH, 09H;INT 21H;ENDM;--------;宏定义KRYIN: 从键盘读入一个字符 KEYIN MACRO MOV AH,0;读键

INT 16H;AH中为扫描码

ENDM;==========================;代码段开始 CODE SEGMENT

ASSUME CS: CODE, DS: MYDAT, ES: BUFFER, SS: SSEG

START: MOV AX, MYDAT;装载DS,ES MOV DS, AX MOV AX, BUFFER MOV ES, AX

DISPINIT;显示方式初始化

CALL READFILE;读入文件

JC DONE

CALL CLIST;初始化索引行

CALL CLSCREEN;清屏

CALL CREWIN;创建窗口

CALL SHOWCUR;显示当前页

NEXT: KEYIN;进入主程序: 读键盘

CALL COMMAND;命令分析与处理

JNC NEXT;非x键继续循环

DONE: CALL CLSCREEN;清屏

MOV AX, 4C00H INT 21H;退出

;-------;子程序READFILE: 提示并读入文件名,将文件读入缓冲区 READFILE PROC PROMPT MSG1;CALL SIN;读入文件名

MOV AX, 3D00H MOV DX, OFFSET FILENA+2 INT 21H;打开文件(读)JC GETERR1;打开文件出错转GETERR1 PUSH DS PUSH ES POP DS;将DS指向文件缓冲区段

MOV BX, AX;BX=文件号

MOV AH, 3FH;读文件 MOV CX, 0FFFFH;读入最多64K-1 MOV DX, 0;DS: DX指向文件缓冲区

INT 21H POP DS JC GETERR2;读入文件出错转GETERR2 MOV CCOUNT, AX;实际读入字符数存入CCOUNT中

CLC JMP GETFILEXIT

GETERR1: PROMPT MSG2;读入文件出错处理

KEYIN STC JMP GETFILEXIT;

GETERR2: PROMPT MSG3;打开文件出错处理

KEYIN STC

GETFILEXIT: RET

READFILE ENDP;-------;输入文件名子程序 SIN PROC MOV AH, 0AH MOV DX, OFFSET FILENA INT 21H;输入文件名

XOR CH, CH MOV CL, FILENA+1;取文件名长度

LEA BX, FILENA+2 ADD BX, CX;计算字符串结尾地址

MOV BYTE PTR [BX], 0;在字符串尾部加0 RET SIN ENDP;-------;索引行初始化子程序 CLIST PROC MOV CX, CCOUNT JCXZ CSTX;文件为空结束

MOV SI,0;文件缓冲区字符指针

MOV DI,0;索引行指针

MOV DX,0;行数计数

MOV INDEX[DI], 0 INC DX;假设文件至少有一行 CST1: CMP WORD PTR ES:[SI], 0A0DH;判断是否为回车换行符

JNZ CST2;不是行结束,转CST2 INC DX;行数加一

ADD SI, 2;跳过回车换行符

ADD DI, 2;索引行指针加一

MOV INDEX[DI], SI;指向本行开始地址

CMP DX, MAXLEN JNC CST4;是否超过最大行,超过转CST4,结束

JMP CST3;CST2: INC SI;文件缓冲区字符指针指向下一字符 CST3: LOOP CST1;CST4: MOV LENCT, DX;保存行数到LENCT中 CSTX: RET CLIST ENDP;-------;清屏子程序

CLSCREEN PROC MOV AX, 0600H;清屏

MOV CX, 0 MOV DH, 50 MOV DL, 79 MOV BH, 07H INT 10H RET CLSCREEN ENDP;------;显示当前页子程序 SHOWCUR PROC MOV DH, 0;窗口最顶行

MOV SI, CURLINE;取当前页第一行行数

MOV CX, HS;窗口的第一行和最后一行为边框,SUB CX, 2;所以能够显示内容的高度为窗口高度减二 SC1:

CALL SHOWLINE;显示一行

INC DH;窗口下一行

INC SI;文件下一行

MOV AX, LENCT;CMP SI, AX;文件是否显示完

JNC SC2;显示完则转SC2 LOOP SC1 JMP SC1X SC2: JCXZ SC1X;该页显示满则结束

;该页没有显示满,则用空行填满该页 SC3: PUSH CX PUSH DX CALL SHOWSPLINE;显示空行

POP DX POP CX INC DH LOOP SC3 SC1X: RET SHOWCUR ENDP;------;显示一行子程序

;输入:SI=显示行行号;DH=窗口中的行号 SHOWLINE PROC PUSH CX PUSH SI PUSH DX PUSH AX

ADD DH, TOP;INC DH;实际行数=窗口左上角行数+DI+1 MOV DL, LEFT;INC DL;实际列数=窗口左上角列数+1 CALL VADD;

MOV CX, WS;窗口的第一列和最后一列是边框,SUB CX, 2;所以能够显示内容的宽度为窗口宽度减二

SHL SI, 1;行索引为字类型,所以乘二

MOV SI, INDEX[SI];取该行第一个字符在文件缓冲区的地址

PUSH DS MOV AX, 0B800H MOV DS, AX;DS指向显示缓冲区段地址 SL1: MOV AX, ES:[SI] CMP AX, 0A0DH JZ SL2;如果是回车换行,则该行结束

MOV DS: [DI], AL;显示一个字符 ADD DI, 2;INC SI;取下一个字符

LOOP SL1;JCXZ SLX;该行正好显示完,则结束,否则用空格填满

SL2: MOV BYTE PTR DS:[DI], ' ';该行没有显示满,则用空格填满

ADD DI, 2 LOOP SL2

SLX: POP DS

POP AX POP DX POP SI POP CX

RET SHOWLINE ENDP;--------;显示空行子程序

;输入:DI=窗口中的行号 SHOWSPLINE PROC;

MOV AX, HS;SUB AX, 2;CMP DH, AL;显示的空行是否超出最低行

JNC SSLX;如果是,则转SSLX ADD DH, TOP;INC DH;实际行数=窗口左上角行数+DI+1 MOV DL, LEFT;INC DL;实际列数=窗口左上角列数+1 CALL VADD;

MOV CX, WS;窗口的第一列和最后一列是边框,SUB CX, 2;所以能够显示内容的宽度为窗口宽度减二

PUSH DS MOV AX, 0B800H MOV DS, AX SSL1: MOV BYTE PTR DS:[DI], ' ' ADD DI, 2 LOOP SSL1 POP DS SSLX: RET SHOWSPLINE ENDP;-------;创建窗口子程序 CREWIN PROC PUSH ES MOV AX, 0B800H;显示缓冲区地址为B800:0 MOV ES, AX;

MOV DH, TOP MOV DL, LEFT;窗口左上角行列数

MOV CX, HS;窗口高度(行数)CW1: PUSH DX;CALL VADD;计算地址

PUSH CX;MOV CX, WS;窗口宽度(列数)

MOV AL, FG;取属性 CW2: MOV BYTE PTR ES:[DI], ' ';送空白字符

INC DI;MOV BYTE PTR ES:[DI], AL;送属性

INC DI;LOOP CW2;

POP CX POP DX INC DH;行数加一

LOOP CW1

CALL DRAWB;画边框

POP ES RET CREWIN ENDP;-;画边框子程序 DRAWB PROC PUSH DX PUSH CX PUSH BX PUSH AX MOV BL, FGB MOV DH, TOP MOV DL, LEFT CALL VADD

;画左上角角框

MOV BYTE PTR ES:[DI], 0C9H INC DI MOV BYTE PTR ES:[DI], BL INC DI

;画第一行边框

MOV CX, WS SUB CX,2 DB1: MOV BYTE PTR ES:[DI], 0CDH INC DI MOV BYTE PTR ES:[DI], BL INC DI LOOP DB1

;画右上角角框

MOV BYTE PTR ES:[DI], 0BBH INC DI MOV BYTE PTR ES:[DI], BL

;画第二行到倒数二行左右边框

MOV DH, TOP MOV DL, LEFT INC DH MOV CX, HS SUB CX, 2 DB2: PUSH DX CALL VADD MOV BYTE PTR ES:[DI], 0BAH INC DI MOV BYTE PTR ES:[DI], BL DEC DI MOV AX, WS DEC AX SHL AX, 1 ADD DI, AX MOV BYTE PTR ES:[DI], 0BAH INC DI MOV BYTE PTR ES:[DI], BL POP DX INC DH LOOP DB2;取边框属性;窗口左上角行列数;计算地址;角框╔;因为去掉了左右角框,所以宽度减二;上下边框═;角框╗;从第二行开始;第一行和最后一行没有左右边框,;所以高度减二;;计算左边框地址;左右边框║;;;;计算右边框地址;;下一行;

;画左下角角框

MOV DH, TOP;MOV DL, LEFT;MOV AX, HS;DEC AX;ADD DH, AL;左下角行数=右上角行数+窗口高度-1 CALL VADD MOV BYTE PTR ES:[DI], 0C8H;角框╚

INC DI MOV BYTE PTR ES:[DI], BL INC DI

;画最低行边框

MOV CX, WS;SUB CX, 2;因为去掉了左右角框,所以宽度减二 DB3: MOV BYTE PTR ES:[DI], 0CDH;上下边框═

INC DI MOV BYTE PTR ES:[DI], BL INC DI LOOP DB3

;画右下角角框

MOV BYTE PTR ES:[DI], 0BCH;角框╝

INC DI MOV BYTE PTR ES:[DI], BL

POP AX POP BX POP CX POP DX

RET DRAWB ENDP;------;计算窗口内某行列位置对应显存地址;输入:DH=行 DL=列;输出:DI为显存地址 VADD PROC MOV AL, 80;MUL DH;XOR DH, DH;ADD AX, DX;行数×80+列数

SHL AX, 1;乘2,因为每个字符占两个字节

MOV DI, AX RET VADD ENDP;--------;命令分析子程序 COMMAND PROC CMP AH, 2DH;2DH为x键的扫描码

JNZ COM1;不是x键,转COM1 STC;值x键标志

RET COM1: CALL DOSUB;转命令散转子程序

CLC RET COMMAND ENDP;--;命令散转子程序 DOSUB PROC MOV AL, AH MOV AH, 0;将键扫描码放入AX中

MOV BX, OFFSET KEYSUB;BX指向KEYSUB DOSUB1: CMP WORD PTR [BX], 0 JZ DOSUBX;KEYSUB表查完,即没有找到转DOSUBX CMP AX, [BX] JZ DOSUB2;找到扫描码转DOSUB2 ADD BX, 4 JMP DOSUB1;DOSUB2: ADD BX, 2 MOV BX, [BX];取处理程序入口地址

JMP BX;转处理程序 DOSUBX: RET

;SUB1和SUB2均为功能键处理程序;处理完后应使用JMP DOSSUBX结束

;上箭头键处理程序 SUB1: CMP CURLINE, 0 JZ SUB1X;已到第一行,结束

DEC CURLINE;向上一行

CALL SHOWCUR;显示当前页 SUB1X: JMP DOSUBX

;下箭头键处理程序 SUB2: MOV AX, LENCT DEC AX DEC AX;至少显示一行

CMP AX, CURLINE;已到最后一行

JZ SUB2X INC CURLINE;向下一行

CALL SHOWCUR;显示当前页 SUB2X: JMP DOSUBX

DOSUB ENDP;--------

CODE ENDS

;========================= END START

C语言程序设计课程设计指导书

课程设计指导书课程名称: C语言程序设计 班次: 自动化2016-01,02,03班 设计任务:整个课程设计一共提供了10个题目,编号为1~10。按学号尾数进行选题设计。 课程设计目的1、进一......

WEB程序设计课程设计指导书

WEB课程设计指导书设计课题:广东海洋大学寸金学院micro blog信息系统设计目的:1。综合应用java程序设计、WEB程序设计、数据库应用、计算机网络等知识设计和实现我校Micro Blo......

可视化程序设计课程设计指导书

可视化程序设计课程设计指导书一、课程设计的目的与要求:1.掌握C++语言中面向对象的概念,并能在程序中熟练运用。2.了解面向对象程序设计(C++)的基本概念以及运用面向对象技术进......

C语言程序设计课程设计任务书

C语言程序设计课程设计任务书项目4:高校工资管理系统一、课程设计项目:高校工资管理系统二、目的与要求:1、目的:(1)要求学生达到熟练掌握C++语言的基本知识和技能; (2)基本掌握面向......

《高级语言程序设计》课程设计大纲

《高级语言程序设计》课程设计教学大纲课程名称:高级语言程序设计课程设计课程总学时:32 适用专业:广播电视工程、电子信息工程、电子科学与技术课程类别:必修一、课程设计任务......

下载语言程序设计课程设计指导书word格式文档
下载语言程序设计课程设计指导书.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

热门文章
点击下载本文