1、成绩 中国农业大学 课程设计报告 (2015-2016学年夏季学期) 设计题目: DOS下屏保程序设计实现 课程名称: 汇编语言课程设计 任课教师: 班 级: 计算机141 学 号: 姓 名: 目 录 一、 要求与需求分析 1 1. 题目重述: 1 2. 需求分析: 1 二、 程序设计分析: 1 1. 屏保绘制模块 1 1.1、 图形录入: 1 1.2、 动画绘制
2、 2 2. 非工作状态计时模块 2 2.1、 计时功能: 2 2.2、 判断是否处于工作状态 2 3. 检测键盘输入模块 3 4. 中断设置及内存驻留程序 3 三、 程序流程图 3 1. 装载程序: 3 2. 定时器中断处理程序: 4 3. 键盘中断处理程序: 4 4. 屏幕保护程序: 5 四、 核心模块功能介绍 5 1. 装载程序(INSTALL): 5 2. 更改后的计时器中断(FUNCTIMER): 5 3. 更改后的键盘中断(INT9): 6 4. 屏保程序(SCREENSAVER): 6 5. 屏保绘制模块(PRINT): 6 6. 贴图函数(ON
3、EBITMAP/ZEROBITMAP): 6 7. 延时处理函数(ONEBITMAP/ZEROBITMAP): 6 8. 清屏宏(CLRSCREEN): 6 五、 程序运行步骤 6 六、 设计过程中遇到的主要技术难点及解决方案 7 1. 中断设置及驻留: 7 2. 工作状态的判断: 7 3. 动画的绘制: 7 4. 恢复原本工作状态: 7 七、 个人体会 7 八、 参考文献 8 九、 程序清单 8 DOS下屏幕保护程序的设计与实现 一、 要求与需求分析 1. 题目重述: 编写一个DOS下的屏幕保护程序(也可以是windows下的屏保)。该程序具有以下功能:在一
4、段时间内(如1分钟)没有任何键键入时,程序自动进入屏保(一个图画一直在不断的移动显示,图案任意),直到按任意键结束。 2. 需求分析: 在未启动屏幕保护程序的情况下,当长时间不使用电脑的时显示器屏幕的显示换面长时间不变,这将使屏幕发光器件疲劳、变色、甚至烧毁,最终使屏幕某个区域偏色或变暗。因此一个合格的屏幕保护程序应满足条件: 1. 图案动态且在屏幕上的分布尽量均匀 2. 当停止工作后一段时间内才进入屏保 3. 一旦按键后结束屏幕保护程序的绘制并恢复之前工作的内容 二、 程序设计分析: 针对上述对于需求的分析,可将目标程序分为三个功能模块,即:屏保绘制模块、非工作状态计时模块、检
5、测键盘输入模块。同时为了各个模块正常工作,还需使用DOS功能设置中断及将各功能模块在内存中驻留。 1. 屏保绘制模块 1.1、 图形录入: ROM BIOS显示例程支持多种文本方式和图形方式。在不同的显示方式下屏幕显示的像素分辨率、字符分辨率、颜色数等都不同。为更细致的展现动画细节,本程序调用INT10的0号子功能,选择320*200分别率图形16色显示模式;并基于此模式将要显示的像素图转化为相应的显存矩阵,每个像素点占用一个字节存储颜色及亮度信息,存储图片共占用27*35 Byte。在图形显示时调用INT10的5号子功能将图片置入显存的相应内存区间。 1.2、 动画绘制: 本程序在
6、绘制动画时考虑到动画的连贯性,使用了两个显存页。一个显存页作为显示页,另一个显存页作为后台页,绘制图像时仅仅对后台页执行像素操作,显示显存页。动画通过改变图案的绘制位置实现,当图案绘制触及屏幕边缘时改变绘图方向,且绘制图案鹿的方向与动画运动方向同向。动画绘制过程涉及以下变量作为参数:当前绘制页数(后台页)RECENTPAGE、上一次绘制页数(显示页)LASTPAGE、当前绘图的顶点坐标CURSORX, CURSORY;上一次的绘制坐标LASTX,LASTY;横向绘图方向DIRECX;纵向绘图方向DIRECY;常量的水平绘制速度和垂直绘制速度VX,VY。下面将详细介绍动画绘制的过程。 1.
7、 通过交换RECENTPAGE与LASTPAGE的值,完成对后台页与显示页的页码的交换; 2. 根据DIRECX判断绘图方向,选择调用贴图函数ONEBITMAP或ZEROBITMAP在后台页上以CURSORX, CURSORY为顶点绘制图案。其中ONEBITMAP为每列从左到右向显存录入像素,ZEROBITMAP为每列从右到左向显存录入数据; 3. 显示绘制完成的后台页并将调用宏CLRSCREEN把原显示页清屏; 4. 保存绘制坐标CURSORX, CURSORY到LASTX,LASTY,判断图片是否绘制到屏幕边缘。如是,改变绘图方向DIRECX、DIRECY; 5. 计算下次绘图的坐
8、标,根据方向选择顶点坐标加绘制速度VX,VY或减VX,VY。 2. 非工作状态计时模块 2.1、 计时功能: 由于计算机的8259A可编程中断控制器以18.2HZ的频率产生中断信号,每次8259A产生中断信号时CPU将处理1CH号中断向量所指向的终端处理程序。本程序通过改变1CH号中断处理程序实现计时功能。 在每次1CH号中断发生时,若判断运行标志FLAG得屏保绘制程序未运行,将定时计数变量CLKCNT减一,若CLKCNT归零,则调用屏幕保护函数进入屏保绘制过程。 2.2、 判断是否处于工作状态 在DOS环境下,可认为当无字符输入时为非工作状态。因此本程序通过改变键盘中断处理程序实
9、现非工作状态的计时。具体实现方法为每次有键盘输入时将定时计数变量CLKCNT复位,对非工作状态重新计时并调用原键盘中断处理函数。 3. 检测键盘输入模块 该模块功能为当屏保绘制时若有按键输入,则结束屏保绘制并返回原工作界面。在具体实现上调用INT16H 的1号子功能读键盘缓冲区字符,若缓存区存在字符,结束屏保的绘制,返回文字显示方式并显示原工作页的缓存。 4. 中断设置及内存驻留程序 该程序作用为设置中断及把上述所有模块在内存中驻留,即装载程序。调用INT 21H的35H号子功能保存键盘中断的原中断向量到SAVINT9,调用INT 21H的25H号子功能将非计时器中断及键盘中断重置为工
10、作状态计时模块中的相应程序。利用宏操作PROLEN EQU $-FUNCTIMER计算屏保程序占用内存的字节数,调用INT 21H的31H号子功能完成内存驻留。 三、 程序流程图 1. 装载程序: 2. 定时器中断处理程序: 3. 键盘中断处理程序: 4. 屏幕保护程序: 四、 核心模块功能介绍 1. 装载程序(INSTALL): 完成修改中断计时器(FUNCTIMER)和键盘(INT9)的中断向量,改变中断屏蔽,实现屏保程序的驻留。 2. 更改后的计时器中断(FUNCTIMER): 对非工作状态计时;调用屏保程序(SCREENS
11、AVER)。 3. 更改后的键盘中断(INT9): 若回到工作状态,将计时器变量复位。继承了原键盘中断的其他功能。 4. 屏保程序(SCREENSAVER): 设置初始值,控制整个屏保绘制过程。 5. 屏保绘制模块(PRINT): 确定图片像素信息写入显存位置,计算每次贴图的顶点位置,实现动画的产生。 6. 贴图函数(ONEBITMAP/ZEROBITMAP): 屏保绘制模块(PRINT)的子函数,根据获取的顶点位置进行贴图。ONEBITMAP与ZEROBITMAP的区别为贴图的横向方向不同。 7. 延时处理函数(ONEBITMAP/ZEROBITMAP): 屏保绘制模块(
12、PRINT)的子函数,起到延时贴图的作用,让动画能流畅显现。 8. 清屏宏(CLRSCREEN): 清除将要绘制的页码上的像素。 五、 程序运行步骤 1. 在DOS环境下运行装载程序,将程序驻留在内存中; 2. 若在五秒内没有任何键键入时,程序自动进入屏保,绘制一只跳动的小鹿; 3. 在屏保绘制状态下任何键键入时返回原工作状态。 六、 设计过程中遇到的主要技术难点及解决方案 1. 中断设置及驻留: 使用宏操作PROLEN EQU $-FUNCTIMER(FUNCTIMER为驻留区的首地址, PROLEN在程序末尾)计算屏保程序占用内存的字节数,调用INT 21H的31H号子功
13、能完成内存驻留。其中屏保程序中所用到的所有数据及变量等一并写入代码段,而非数据段,以实现同步驻留。 2. 工作状态的判断: 更改键盘中断,使键盘每次发生中断时(即触发按键)都对非工作状态的计时复位。 3. 动画的绘制: 为消除动画设计时的图像闪烁的,本程序使用多页动画技术。多页动画是通过使用页切换技术实现的。页切换改变显示页以绘制出给定动画序列的相邻帧。由于图像通常绘制在不同的页上(不是当前可见页),用户不会看到图像被绘制或擦除,从而产生高质量的动画而没有图像闪烁。 4. 恢复原本工作状态: 本问题暂未解决。设想中的解决方案是将原本的文本显存页保存起来,动画绘制操作选择其他的页面进
14、行,在结束绘制后调用INT 10H的0号子功能重新显示原文本页。但在实际实验后发现页面仍会被清空。 七、 个人体会 我在课程学习阶段对中断向量的驻留理解不够深刻,经过这一周对屏幕保护程序的研究,我对中断向量的驻留及图形处理有了较深刻的了解、认识。我在动画绘制函数中遇到了一些特别奇怪的错误,总不能得到正确的图像浪费了很多时间。后来在排查时,发现所有变量前都忘记添加跨越段前缀CS:XX,这让我想到作为计算机系的学生,正因为我们所有的工作容错性都很低,所以更需要加倍得细心,每一个细节都可能会成为限制我们发展上限的潜在敌人。通过这一周的汇编课程设计,我也克服了对汇编程序的恐惧,在合理分块的前提下,
15、哪怕是汇编程序这样低级、灵活的语言,也能一步步实现所有设计的功能;而且正是因为没有太多功能复杂的语句,只要实现进行充分的思考和妥善的设计,程序在逻辑上出错的几率非常小,排错并没有高级语言这么难(当然要建立在熟练掌握每种语句的用法的基础上)。 八、 参考文献 [1]. 沈美明, 温冬婵. IBM-PC汇编语言程序设计(第二版)[M].北京.清华大学出版社: 2014 [2]. 黄向明. 多页动画技术[J]. 微电脑世界,1996,07:71. 九、 程序清单 ;清屏宏 CLRSCREEN MACRO LOCAL LOOPR,LOOPC MOV DX,CS:LASTY
16、MOV BX,35 LOOPR: PUSH BX MOV AX,27 MOV CX,CS:LASTX LOOPC: PUSH AX MOV AH,0CH MOV AL,0 MOV BH,CS:LASTPAGE INT 10H INC SI INC CX POP AX DEC AX CMP AX,0 JNZ LOOPC INC DX POP BX DEC BX CMP BX,0 JNZ LOOPR ENDM CODES SEGMENT ;安装中断及中断驻留函数(入口) INSTALL PR
17、OC FAR ASSUME CS:CODES START: ; 设置定时器中断向量 MOV DX,OFFSET FUNCTIMER MOV AX,SEG FUNCTIMER MOV DS,AX MOV AL,1CH MOV AH,25H INT 21H ; 保存INT9的键盘中断 MOV AL,09H MOV AH,35H INT 21H MOV WORD PTR CS:SAVINT9,BX MOV WORD PTR CS:SAVINT9+2,ES ; 设置键盘中断向量 MOV DX,OFFSET INT9 MOV A
18、X,SEG INT9 MOV DS,AX MOV AL,09H MOV AH,25H INT 21H ; 中断屏蔽设定 IN AL,21H AND AL,0FDH ;11111100B OUT 21H,AL STI ; 中断驻留 MOV AH,31H MOV AL,0 MOV DX,PROLEN INT 21H ; 结束安装程序 MOV AH,4CH INT 21H INSTALL ENDP ;计时器中断 FUNCTIMER PROC FAR STI ; 置EOI位为1,允许外部中断 MOV AL,20
19、H OUT 20H,AL CMP CS:FLAG,0 JNZ EXIT DEC CS:CLKCNT JNZ EXIT MOV FLAG,1 CALL SCREENSAVER EXIT: CLI IRET FUNCTIMER ENDP ;更改后的键盘中断 INT9 PROC FAR STI MOV CS:CLKCNT,100 MOV AL,20H OUT 20H,AL PUSHF PUSHF POP AX AND AH,11111100B PUSH AX POPF CALL DWORD PTR CS:SA
20、VINT9 IRET INT9 ENDP ;屏保程序 SCREENSAVER PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX ; 初始化 MOV CS:CURSORX,0 MOV CS:CURSORY,0 MOV CS:DIRECX,0 MOV CS:DIRECY,0 MOV AL,1 MOV AH,05H INT 10H MOV AH,00H MOV AL,0DH INT 10H ; 屏保绘制循环 NEXTGRA: CALL PRINT MOV AH,01H INT 1
21、6H JNZ PRESSED JMP NEXTGRA ;按键后跳出屏保程序 PRESSED: MOV AH,00H MOV AL,03H INT 10H MOV AL,0 MOV AH,05H INT 10H MOV CS:CLKCNT,100 MOV CS:FLAG,0 POP DX POP CX POP BX POP AX ;终止屏保程序 RET SCREENSAVER ENDP ;屏保绘制程序 PRINT PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX ;
22、 设置两页动画,分别为后台和前台 MOV AH,CS:LASTPAGE MOV AL,CS:RECENTPAGE MOV CS:RECENTPAGE,AH MOV CS:LASTPAGE,AL ; 根据方向选择贴图 CMP CS:DIRECX,0 JZ BMP CALL ONEBITMAP JMP NNNN BMP: CALL ZEROBITMAP NNNN: ; 更换显示页面 MOV AL,CS:RECENTPAGE MOV AH,05H INT 10H CLRSCREEN ; 将光标位置保存 MOV AX,CS:CURSOR
23、X MOV CS:LASTX,AX MOV AX,CS:CURSORY MOV CS:LASTY,AX CALL FUNCWAIT ; 若图片到达边缘,改变运动方向 CMP CS:CURSORX,0 JZ CHANGX CMP CS:CURSORX,290 JBE CMPY CHANGX: MOV AL,CS:DIRECX XOR AL,1 MOV CS:DIRECX,AL CMPY: CMP CS:CURSORY,0 JZ CHANGY CMP CS:CURSORY,160 JBE OUT1 CHANGY: MOV
24、AL,CS:DIRECY XOR AL,1 MOV CS:DIRECY,AL ; 根据运动方向确定下次贴图坐标 OUT1: CMP CS:DIRECX,0 JZ SUBX ADD CS:CURSORX,VX JMP CULY SUBX: SUB CS:CURSORX,VX CULY: CMP CS:DIRECY,0 JZ SUBY ADD CS:CURSORY,VY JMP PRIEND SUBY: SUB CS:CURSORY,VY PRIEND: POP DX POP CX POP BX POP AX R
25、ET PRINT ENDP ;向左贴图 ONEBITMAP PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX MOV DX,CS:CURSORY LEA SI,CS:GRAPH MOV BX,35 LOOPR1: PUSH BX MOV AX,27 MOV CX,CS:CURSORX LOOPC1: PUSH AX ; 设置像素 MOV AH,0CH MOV AL,CS:[SI] MOV BH,CS:RECENTPAGE INT 10H INC SI INC CX PO
26、P AX DEC AX CMP AX,0 JNZ LOOPC1 INC DX POP BX DEC BX CMP BX,0 JNZ LOOPR1 POP DX POP CX POP BX POP AX RET ONEBITMAP ENDP ;向右贴图 ZEROBITMAP PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX MOV DX,CS:CURSORY LEA SI,CS:GRAPH MOV BX,35 LOOPR0: PUSH BX MOV
27、AX,27 MOV CX,CS:CURSORX ADD CX,AX LOOPC0: PUSH AX ; 设置像素 MOV AH,0CH MOV AL,CS:[SI] MOV BH,CS:RECENTPAGE INT 10H INC SI DEC CX POP AX DEC AX CMP AX,0 JNZ LOOPC0 INC DX POP BX DEC BX CMP BX,0 JNZ LOOPR0 POP DX POP CX POP BX POP AX RET ZEROBITMAP E
28、NDP ;延时处理函数 FUNCWAIT PROC NEAR PUSH AX PUSH CX ; 空循环 MOV CX,0FFFFH DELY: MOV AL,0 MOV AH,0 SUB AL,AH LOOP DELY POP CX POP AX RET FUNCWAIT ENDP ;在CODE SEGMENT中定义的数据段 SAVINT9 DW ?,? LASTPAGE DB 1 ;保存上一次绘制的页数 RECENTPAGE DB 2 ;保存当前动画绘制的页数 LASTX DW 0 ;保存上一
29、次绘图的坐标 LASTY DW 0 FLAG DB 0 ;用于判断屏保程序是否已运行 CURSORX DW 0 ;保存当前绘图的光标位置X CURSORY DW 0 ;保存当前绘图的光标位置Y DIRECX DB 0 ;横向绘图方向 DIRECY DB 0 ;纵向绘图方向 CLKCNT DB 100 ;进入屏保的时间 ;位图像素信息 GRAPH DB 0,0,2,0,0,0,0,0,0,0,0FH,0,0FH,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,2,0,2,0,0,0,0,0,
30、0,0FH,0,0FH,0,0,0,0FH,0,0,0,0,0,0,0,0,0,0 DB 0,0,2,0,0,0,0,0,0,0,0,0FH,0,0,0,0,0FH,0,0FH,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0FH,0,0,0,0FH,0,0,0,0,0,0FH,0,0,0,0,0,2,0,0,0 DB 0,0,0,0,0,0,0,0FH,0,0,0,0FH,0,0,0,0,0,0FH,0,0,0,0,2,0,2,0,0 DB 0,0,0,0,0,0,0,0FH,0,0,0,0FH,0,0,0,0,0,0FH,0,0,0,0,0,2,0,0,
31、0 DB 0,0,0,0,0,0,0,0,0FH,0,0,0,0,0FH,0FH,0FH,0,0,0FH,0FH,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0FH,0,0,0,0,0,0,0FH,0FH,0,0,0,0,0,0,0,0,0 DB 0,0,0,0,0,2,0,0,0,0,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0,0,0,0,0,0,0,0 DB 0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0FH,0FH,0,0FH,0FH,0FH,0,0,0,0,0,0 DB 0,0,0,0,0,2
32、0,0,0,0,0,0,0,0,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0,0,0,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0FH,0FH,0FH,0FH,0FH,0FH,0,0,0,0,0,0 DB 0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0FH,0FH,0FH,0,0,0,0,0,0,0,0,0 DB 0,2,0,2,0,0,0,0,0,2,0,2,0,0,0,0FH,0FH,0FH,0FH,0,0,0,0,0,2,0,0 DB 0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0FH
33、0FH,0FH,0FH,0,0,0,0,2,0,2,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0FH,0FH,0FH,0FH,0FH,0,0,0,0,2,0,0 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0,0,0,0,0,0 DB 0,0,0,0,0,0FH,0,0,0,0,0,0,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0,0,0,0,0,0 DB 0,0,0,0,0,0FH,0,0,0,0FH,0FH,0FH,0FH,0FH,0FH,0
34、FH,0FH,0FH,0FH,0FH,0FH,0,0,0,0,0,0 DB 0,0,0,0,0,0FH,0FH,0,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0,0,0,0,0,0 DB 0,0,0,0,0,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0,0,0,0,0,0,0 DB 0,0,0,0,0,0,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0FH,0,0FH,0FH,0FH,0FH,0,0,0,0,0,0,0
35、DB 0,0,0,0,0,0,0FH,0FH,0FH,0FH,0,0FH,0FH,0FH,0FH,0FH,0,0FH,0FH,0FH,0FH,0FH,0FH,0,0,0,0 DB 0,0,0,0,0,0,0FH,0FH,0FH,0FH,0FH,0,0FH,0FH,0,0,0,0,0,0,0,0,0FH,0FH,0,0,0 DB 0,0,0,0,0,0,0FH,0FH,0FH,0FH,0,0,0,0,0,0,0,0,0,0,0,0FH,0,0FH,0,0,0 DB 0,0,0,0,0,0,0FH,0FH,0FH,0,0,0,0,0,0,0,0,0,0,0,0,0FH,0,0FH,0,
36、0,0 DB 0,0,0,0,0,0FH,0FH,0FH,0,0,0,0,0,0,0,0,0,0,0,0,0FH,0,0,0FH,0,0,0 DB 0,0,0,0,0FH,0FH,0FH,0,0FH,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0FH,0,0,0 DB 0,0,0,0FH,0FH,0FH,0,0FH,0,0,0,0,0,2,0,2,0,0,0,0,0,0,0FH,0,0,0,0 DB 0,0,0,0FH,0FH,0,0FH,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0,0FH,0,0FH,0,0
37、0,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0 DB 0,0,0FH,0FH,0,0FH,0,0,0,0,0,0,0,0,0,0,0,0,2,0,2,0,0,0,0,0,0 DB 0,0,0FH,0,0,0FH,0,0,0,0,0,2,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0 DB 0,0,0FH,0,0,0FH,0,0,0,0,2,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0 DB 0,0,0FH,0FH,0,0FH,0FH,0,0,0,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 VX
38、 EQU 5 ;每次绘制水平方向移动五个像素点 VY EQU 2 ;每次绘制垂直方向移动两个像素点 PROLEN EQU $-FUNCTIMER CODES ENDS END START目 录 第一章 总论 5 1.1项目概要 5 1.2可行性研究报告编制依据 8 1.3综合评价 8 第二章 项目背景及必要性 11 2.1项目建设背景 11 2.2项目建设的必要性 13 第三章 建设条件 16 3.1项目区概况 16 3.2项目建设条件优劣势分析 21 第四章 市场分析与销售方案 26 4.1市场分析 26 4.2销售策略
39、营销方案和模式 29 4.3风险分析 30 第五章 项目建设方案 32 5.1建设任务和规模 32 5.2建设规划和布局 32 5.3工艺(技术)方案 32 5.4建设内容 35 5.5实施进度安排 36 第六章 环境影响评价 38 6.1环境影响 38 6.2环境保护与治理措施 38 第七章 项目组织与管理 40 7.1组织机构与职能划分 40 7.2劳动定员 40 7.3经营管理模式 41 7.4经营管理措施 41 7.5技术培训 42 7.6劳动保护、安全卫生与消防 42 第八章 投资概算与资金来源 44 8.1投资概算依据 44 8.2投资概算 44 8.3资金来源 46 第九章 财务评价 47 9.1财务评价依据 47 9.2销售收入、销售税金和附加估算 47 9.3总成本及经营成本估算 48 9.4财务效益分析 49 9.5不确定性分析 50 9.6财务评价结论 51 第十章 社会效益评价 52 10.1社会评价基本结论 52 10.2农业产业化经营 52 10.3农民增收、农业增效评价 54 10.4其它社会影响 55 第十一章 可行性研究结论与建议 56 11.1可行性研究结论 56 11.2问题与建议 56 17






