1、2022-12-81/41第第6章章微型计算机的程序设计微型计算机的程序设计6.1程序设计步骤程序设计步骤6.2简单程序简单程序6.3分支程序分支程序6.4循环程序循环程序6.5子程序子程序6.6查表程序查表程序习题习题2022-12-82/416.1 程序设计步骤程序设计步骤 汇编语言程序设计步骤:汇编语言程序设计步骤:(1)分析问题分析问题:已知条件、要解决的问题、功能:已知条件、要解决的问题、功能/性能要求等。性能要求等。(2)建立数学模型建立数学模型:把问题数学化、公式化,便于计算机处理。:把问题数学化、公式化,便于计算机处理。(3)确定算法确定算法:简单、速度快、精度高、代码量小、编
2、程容易。:简单、速度快、精度高、代码量小、编程容易。(4)绘制程序流程图绘制程序流程图:用箭头、框图、菱形图等表示程序结构。:用箭头、框图、菱形图等表示程序结构。(5)内存空间分配内存空间分配:为程序或数据分配内存空间。:为程序或数据分配内存空间。(6)编制程序与静态检查编制程序与静态检查:程序结构层次简单、清楚、易懂。:程序结构层次简单、清楚、易懂。(7)程序调试程序调试:利用调试软件:利用调试软件DEBUG进行调试。进行调试。2022-12-83/41汇编语言程序设计的特点:汇编语言程序设计的特点:(1)(1)算法要分解至算法要分解至指令级指令级;高级语言为;高级语言为语句级语句级。(2)
3、(2)要详细考虑要详细考虑内存空间分配内存空间分配问题:任何一个变量、一条问题:任何一个变量、一条指令都要明确其存储位置。指令都要明确其存储位置。2022-12-84/416.2 简单程序简单程序 这种程序的形式最简单,计算机执行程序的方式是这种程序的形式最简单,计算机执行程序的方式是“从头到从头到尾尾”,逐条执行指令语句,直到程序结束。逐条执行指令语句,直到程序结束。这类简单程序不用这类简单程序不用按上述按上述7个步骤,可直接对给出的题目写出助记符程序清单。个步骤,可直接对给出的题目写出助记符程序清单。【例例6.1】用数据运算指令,对两个用数据运算指令,对两个16位数做加法运算。这两个数位数
4、做加法运算。这两个数从地址从地址10050H开始连续存放,低位在小地址一端,结果放在这开始连续存放,低位在小地址一端,结果放在这两个数之后。两个数之后。(1)分析题目:它是一个分析题目:它是一个16位数相加的问题。在用加法指令时,必位数相加的问题。在用加法指令时,必须要考虑低须要考虑低8位和低位和低8位相加后产生的进位问题。位相加后产生的进位问题。2022-12-85/41(2)根据根据86系列指令系统,可以直接系列指令系统,可以直接对累加器对累加器AX做字操作,但在低位做字操作,但在低位相加后,会影响标志寄存器的进相加后,会影响标志寄存器的进位位位位CF,所以所以,要用带进位的加法要用带进位
5、的加法指令。指令。(3)绘制程序流程图,如右图所示。绘制程序流程图,如右图所示。图图6.2 简单程序框图简单程序框图(双字节相加双字节相加)2022-12-86/41(4)内存空间分配:被加数、加数及和在内存的空间分配见下表内存空间分配:被加数、加数及和在内存的空间分配见下表内存地址内存地址内内 容容10050H被加数低被加数低8位位10051H被加数高被加数高8位位10052H加数低加数低8位位10053H加数高加数高8位位10054H和的低和的低8位位10055H和的高和的高8位位表表6-1 双字节相加时的内存分配双字节相加时的内存分配2022-12-87/4150H51H52H53H54
6、H55H12H34HA1HBDHAX 00H 10H50H51H52H53H54H55HAX 12H 34HAX B3H F1HDIA1HBDH+=内存地址内存地址存储内容存储内容MOV AX,1000HMOV DS,AX MOV SI,50H MOV DI,52H MOV BX,54HSIDIBX50H51H52H53H54H55H12H34HA1HBDHB3HF1HBX B3H F1H低位在前,高位在后低位在前,高位在后CLC XOR AX,AX MOV AX,SI ADC AX,DI MOV BX,AX HLT设设SI=3412H DI=BDA1H内存分配示意内存分配示意程序详细注释见下
7、页程序详细注释见下页 2022-12-88/41(5)编制的程序如下:编制的程序如下:MOVAX,1000HMOVDS,AX ;DS1000HMOVSI,50H ;被加数指针被加数指针SI50HMOVDI,52H ;加数指针加数指针DI52HMOVBX,54H ;和的指针和的指针BX54HCLC ;清清CFXORAX,AX ;清清AXMOVAX,SI ;取一个字到取一个字到AXADCAX,DI ;AXAX+DI+CFMOVBX,AX ;存一个字到存一个字到BXHLT ;暂停暂停 问题:该程序能否简化?如何简化?问题:该程序能否简化?如何简化?2022-12-89/41 简化的程序:简化的程序:
8、MOVAX,1000HMOVDS,AX ;DS1000HMOVAX,50H ;取被加数到取被加数到AXADDAX,52H ;AX被加数被加数+加数加数MOV54H,AX ;存和数到存和数到54HHLT ;暂停暂停2022-12-810/41【例例6.2】将内存将内存(10050)单元的内容拆成两段,每段单元的内容拆成两段,每段4位,并位,并将它们分别存入内存将它们分别存入内存(10051)和和(10052)单元。即单元。即(10050)单元单元中的低中的低4位放入位放入(10051)的低的低4位,位,(10050)单元中的高单元中的高4位放入位放入(10052)的低的低4位,而位,而(1005
9、1)和和(10052)的高的高4位均为零。位均为零。(1)分析题目:这个题目提出的任务在十六进制显示及二、十分析题目:这个题目提出的任务在十六进制显示及二、十进制计算中常遇到的进制计算中常遇到的.现在假设内存现在假设内存(10050)中放着中放着7AH,则,则题目要求就是把题目要求就是把7AH拆成拆成07H和和0AH两部分,并把两部分,并把0AH放在放在(10051)单元,单元,07H放在放在(10052)单元。单元。2022-12-811/41 在拆字时,想取得一个数的前在拆字时,想取得一个数的前4位和后位和后4位可以用移位指令的位可以用移位指令的方法,也可以用逻辑与一个方法,也可以用逻辑与
10、一个0F0H(二进制为二进制为11110000)和逻辑和逻辑与一个与一个0FH(二进制为二进制为00001111)的办法。的办法。(2)根据指令系统中含有的指令,先取出该数用逻辑指令与上根据指令系统中含有的指令,先取出该数用逻辑指令与上一个一个 0FH,得到低,得到低4位,存入内存。再取出该数用移位指令位,存入内存。再取出该数用移位指令逻辑右移逻辑右移SHR(见图见图5.10(c)4次,取得高次,取得高4位,存入内存即可位,存入内存即可.图图5.10(c)2022-12-812/41(3)绘制程序流程图,如图绘制程序流程图,如图6.3所示。所示。(4)内存空间分配:把内存空间分配:把7AH拆成
11、拆成07H和和0AH两部分,它们在内存空间两部分,它们在内存空间的分配情况见下页表的分配情况见下页表6.2。图图6.3拆拆字字程程序序框框图图2022-12-813/41内存分配示意图内存分配示意图10050H7AH7HAH0H10051H0H10052H拆开拆开AH7AHAH7AHAH7AHAH7H内存地址内存地址内容内容10050H7AH10051H0AH10052H07H表表6-2 拆字程序的内存分配拆字程序的内存分配2022-12-814/41(5)编制的程序如下:编制的程序如下:MOV AX,1000HMOV DS,AX ;DS=1000HMOV SI,50H ;需拆字节的指针;需拆
12、字节的指针SI=50HMOV AL,SI ;取一个字节到;取一个字节到AL中中AND AL,0FH ;把;把AL的前的前4位清位清0MOV SI+1,AL ;把得到的后;把得到的后4位放到位放到(10051)单元单元MOV AL,SI ;再取出需拆字节放到;再取出需拆字节放到AL中中MOV CL,4 SHR AL,CL ;逻辑右移四次,前;逻辑右移四次,前4位补位补0MOV SI+2,AL ;放入;放入(10052)单元单元2022-12-815/41编程计算编程计算 1+2+3+4。MOV AX,0 ADD AX,1 ADD AX,2 ADD AX,3 ADD AX,4初始化初始化:AX 0
13、开始开始 AX AX+1 AX AX+2结束结束 AX AX+3 AX AX+4分析分析:需要有一个暂存空间存放累加和,需要有一个暂存空间存放累加和,初值设置为初值设置为0,之后依次累加。,之后依次累加。2022-12-816/416.3 分支程序分支程序 分支程序是利用分支程序是利用条件转移指令条件转移指令实现实现程序执行次序改变程序执行次序改变的一种程的一种程序结构形式,即当程序执行到某一指令后,根据某个条件是否序结构形式,即当程序执行到某一指令后,根据某个条件是否满足,分别执行不同的指令序列满足,分别执行不同的指令序列。一般来说,分支程序经常是先用一般来说,分支程序经常是先用比较指令比较
14、指令或或数据操作数据操作及及位检测位检测指令指令等来等来改变改变标志寄存器各个标志寄存器各个标志位标志位。然后用条件转移指令进。然后用条件转移指令进行分支。行分支。分支程序执行完后可以立即结束,也可以转到公共点结束,如分支程序执行完后可以立即结束,也可以转到公共点结束,如下图所示。下图所示。分支程序可以分支程序可以再分支再分支。程序框图:在绘制程序流程图时,需用菱形判断框程序框图:在绘制程序流程图时,需用菱形判断框,表示判定条表示判定条件。在绘制好流程图编写助记符程序时,建议先按上下流程线件。在绘制好流程图编写助记符程序时,建议先按上下流程线写写,写完上下流程线上的各框环节后,再写分支部分里的
15、框框。写完上下流程线上的各框环节后,再写分支部分里的框框。2022-12-817/41【例例6.3】求求AX累加器和累加器和BX寄存器中两个无符号数之差的绝寄存器中两个无符号数之差的绝对值,结果放在内存对值,结果放在内存(2800)单元中。单元中。(1)分析题目:此题目中,分析题目:此题目中,AX累加器和累加器和BX寄存器中的数是不寄存器中的数是不知道的。对两个不知大小的数相减并求绝对值,显然应该知道的。对两个不知大小的数相减并求绝对值,显然应该先解决哪一个值稍大些,然后再用大数减小数的方法,才先解决哪一个值稍大些,然后再用大数减小数的方法,才可求得绝对值。可求得绝对值。2022-12-818
16、/41(2)根据指令系统中的比较指令,编出判断大小的环节,即可解决根据指令系统中的比较指令,编出判断大小的环节,即可解决问题,图问题,图6.5即为该例题的程序流程图。即为该例题的程序流程图。图图6.5求求绝绝对对值值程程序序流流程程图图2022-12-819/41(3)根据流程图编制程序如下:根据流程图编制程序如下:CLC ;清除清除CFSUBAX,BX ;AXAX-BXJCAA ;CF转转AA去执行去执行(即即AXBX时转移时转移)MOVDI,2800H ;结果指针结果指针DI2800HMOVDI,AX ;结果送到结果送到2800H和和2801H单元单元HLT ;暂停暂停AA:SUB BX,
17、AX ;BXBX-AXMOVDI,2800HMOVDI,BXHLT2022-12-820/41【例例6.4】编一个程序,从外设编一个程序,从外设71H号中取一个数号中取一个数M,判断其,判断其值是否在值是否在10和和20之间,即之间,即10M20。如果。如果M20H,则送,则送0FFH给外设给外设73H;如果;如果M10,则送,则送00H给外设给外设73H;如果;如果10M20,则送,则送88H给外设给外设73H。(1)分析题目:根据题意,这是一个需要两次判断分析题目:根据题意,这是一个需要两次判断M大小的问大小的问题。先判题。先判M是否大于是否大于10,再判,再判M是否大于是否大于20。20
18、22-12-821/41(2)根据解决问题的思路,先根据解决问题的思路,先画出程序流程图,如图画出程序流程图,如图6.6.从图从图6.6的程序流程图看,两的程序流程图看,两个分支都要个分支都要“回归回归”原程序。原程序。图图6.6判断判断M的的两分支两分支流程图流程图2022-12-822/41(3)编制的程序如下:编制的程序如下:START:INAL,71H;将将71H端口的字节读入端口的字节读入AL CLC ;清除清除CFCMPAL,10;将将AL的内容和的内容和10相比较相比较JCLP1 ;小于小于10转转LP1CMPAL,20;将将AL的内容和的内容和20相比较相比较JCLP2 ;10
19、AL20转转LP2MOVBL,0FFH;将将0FFH送入送入BL寄存器寄存器LP3:OUT73H,BL ;将将0FFH输出到输出到73H端口端口HLT ;暂停暂停LP1:MOVBL,00 JMPLP3LP2:MOVBL,88H JMPLP32022-12-823/41编一程序段,完成符号函数:编一程序段,完成符号函数:1X0 (-128X127)Y=0X=0-1X0 假设假设X的值存放在的值存放在DATA1中,中,Y的值存放在的值存放在DATA2中。中。练习练习2022-12-824/41练习题程序如下:练习题程序如下:START:MOV AL,DATA1 AND AL,AL JGE BIGR
20、 MOV AL,0FFH MOV DATA2,AL;X0,-1送送DATA2 HLTBIGR:JE EQUL MOV AL,1 MOV DATA2,AL;X0,+1送送DATA2 HLTEQUL:MOV DATA2,AL ;X=0,0送送DATA2 HLT2022-12-825/41读程序,问:本段程序的执行结果是什么读程序,问:本段程序的执行结果是什么?BEGIN:INAL,5FH TESTAL,80H JZBRCH1 MOVAH,0 JMPSTOPBRCH1:MOVAH,0FFHSTOP:HLT;将将5FH端口的字节读入端口的字节读入AL;如果如果AL的最高位为的最高位为1,则,则ZF=0
21、,否则,否则ZF=1;当结果为零当结果为零(即即ZF=1)时,跳转至时,跳转至BRCH1;将立即数零送将立即数零送AH;无条件转移至无条件转移至STOP;将将0FFH送送AH;暂停暂停当当AL的最高位为的最高位为1时,时,AH=0;当当AL的最高位为的最高位为0时,时,AH=0FFH。2022-12-826/41双分支程序设计双分支程序设计 实现双分支程序设计要完成以下几项工作:实现双分支程序设计要完成以下几项工作:1 产生条件:主要用产生条件:主要用“比较比较”、“测试测试”等指令产生条件;等指令产生条件;2 测试条件、定向转移:用条件转移指令完成;测试条件、定向转移:用条件转移指令完成;3
22、 设置执行标志设置执行标志(标号标号):给执行程序段定义地址标号。:给执行程序段定义地址标号。2022-12-827/416.4 循环程序循环程序循环程序是循环程序是强制强制CPUCPU重复执行某一指令序列重复执行某一指令序列(程序段程序段)的一种程序的一种程序结构形式。结构形式。循环结构程序循环结构程序缩短了程序的长度、减少了占用的内存空间缩短了程序的长度、减少了占用的内存空间。循环程序循环程序并不简化程序执行过程并不简化程序执行过程,相反,由于增加了一些循环,相反,由于增加了一些循环控制等环节,控制等环节,总的程序执行语句和时间会有所增加总的程序执行语句和时间会有所增加。循环程序一般由循环
23、程序一般由4 4部分组成:部分组成:初始化、循环体、循环控制和循环初始化、循环体、循环控制和循环结束处理结束处理。循环程序分为循环程序分为单循环单循环和和多重循环多重循环,两重以上循环称为多重循环。两重以上循环称为多重循环。内外循环不能交叉。内外循环不能交叉。2022-12-828/416.4 6.4 循环程序循环程序循环程序各部分的内容循环程序各部分的内容(1)初始化初始化建立建立循环次数计数器循环次数计数器,设定设定变量和存放数据的变量和存放数据的内存地址指针内存地址指针(常用间常用间址方式址方式)的的初值初值等。等。(2)循环体循环体实现程序实现程序功能功能的、被的、被重重复执行复执行的
24、指令序列。的指令序列。(3)循环控制循环控制修改修改变量变量和地址和地址指针指针,为下一次循环做准备;为下一次循环做准备;修改循环修改循环计数器计数器或者判或者判断断循环条件循环条件是否满足,是否满足,满足则继续循环,否则满足则继续循环,否则结束循环。结束循环。(4)结束处理结束处理它主要用来分析和存放它主要用来分析和存放程序的结果。程序的结果。2022-12-829/41循环控制方式有多种,如循环控制方式有多种,如计数控制计数控制、条件控制条件控制等。计数控制事等。计数控制事先已知循环次数,每次循环加或减计数,通过对循环次数的判先已知循环次数,每次循环加或减计数,通过对循环次数的判定来达到控
25、制循环的目的;条件控制事先不知循环次数,通过定来达到控制循环的目的;条件控制事先不知循环次数,通过判定某种条件的真假来达到控制循环的目的。判定某种条件的真假来达到控制循环的目的。不管哪一种控制循环方式,最终都是要达到控制循环的目的。不管哪一种控制循环方式,最终都是要达到控制循环的目的。若考虑不周,会造成死循环若考虑不周,会造成死循环,对这一点要注意。,对这一点要注意。循环可以用跳转语句实现循环可以用跳转语句实现,如如JMP,JZ等等;也可以用专用循环控制也可以用专用循环控制语句实现语句实现,如如LOOP、LOOPE/LOOPZ、LOOPNE/LOOPNZ。2022-12-830/41【例例6.
26、5】求两个多字节数之和。这两个数求两个多字节数之和。这两个数在在10050H地址开始的内存单元中,连续地址开始的内存单元中,连续存放,低位在小地址一端,结果放在这存放,低位在小地址一端,结果放在这两个数之后。设这两个多字节数均为两个数之后。设这两个多字节数均为8个字节长。个字节长。(2)程序流程图如右图程序流程图如右图6.10所示。所示。2022-12-831/41(1)分析题目:这是一个重分析题目:这是一个重复累加内存单元中数的复累加内存单元中数的问题,因此可以用循环问题,因此可以用循环程序形式解决。因为程序形式解决。因为86系列指令系统可以系列指令系统可以16位位处理,所以,循环次数处理,
27、所以,循环次数是是4次。次。12574341存储器存储器SI10050DI10058+BX100605598单击单击2022-12-832/41(3)编制的程序如下:编制的程序如下:START:MOVAX,1000HMOVDS,AX;DS1000HMOVSI,50H;第一个数指针第一个数指针SI50HMOVDI,58H;第二个数指针第二个数指针DI58HMOVBX,60H ;结果指针结果指针BX60HMOVCX,4 ;循环次数循环次数CX4CLC ;清进位清进位CF0AA:MOVAX,SI;取一个字到取一个字到AX下页续下页续2022-12-833/41 ADCAX,DI;AXAX+DI+CF
28、 MOVBX,AX;存一个字到存一个字到BX PUSHF;保护进位保护进位CFADDSI,2;修改第一个数的地址指针修改第一个数的地址指针SISI+2ADDDI,2;修改第二个数的地址指针修改第二个数的地址指针DIDI+2ADDBX,2;修改结果指针修改结果指针BXBX+2POPF;恢复标志寄存器恢复标志寄存器LOOPAA;CXCX-1,若,若CX0转转AAHLT;CX0,暂停,暂停结束结束2022-12-834/41【例例6.6】要求设计一个软件延时程序,延时时间约要求设计一个软件延时程序,延时时间约1ms左右左右。(1)分析题目分析题目:此题是想让计算机做一些无用的操作,来拖延时间。此题是
29、想让计算机做一些无用的操作,来拖延时间。从指令手册中查得各条指令所需的时间节拍,但一般一条指令执从指令手册中查得各条指令所需的时间节拍,但一般一条指令执行时间只有几个时钟周期,亦即只有几个微秒,为了能用较少的行时间只有几个时钟周期,亦即只有几个微秒,为了能用较少的指令来编较长时间的延时,采用循环程序结构指令来编较长时间的延时,采用循环程序结构.2022-12-835/41(2)程序流程图如图程序流程图如图6.11所示。延时的时间主要取决于循环体所示。延时的时间主要取决于循环体及循环次数。及循环次数。PUSHF和和POPF指令分别为指令分别为10和和8个时钟节拍,个时钟节拍,LOOP BX指令为
30、指令为3.4个时钟节拍,即此循环体需要用个时钟节拍,即此循环体需要用10+8+3.421.4拍,而每个时钟节拍是根据此系统的晶振频拍,而每个时钟节拍是根据此系统的晶振频率而定的。假设此系统用的是率而定的。假设此系统用的是8MHz的晶振,则每个时钟节的晶振,则每个时钟节拍需要拍需要0.125s,因此可以根据下列公式算出循环次数:,因此可以根据下列公式算出循环次数:X延时时间延时时间/一次循环时间一次循环时间1ms/21.40.125s374次次 换算成十六进制数为换算成十六进制数为176H。2022-12-836/41图图6.11 延时延时1ms的程序流程图的程序流程图图图6.12 延时延时1m
31、s的程序流程图的程序流程图2022-12-837/41(3)编制的程序如下:编制的程序如下:START:MOVCX,176H;初始化,设定循环次数;初始化,设定循环次数CX374LP1:PUSHF ;循环体循环体 POPF LOOPLP1 ;CXCX-1,若,若CX0转转LP1 HLT ;暂停暂停 对于上例,如果想再延长对于上例,如果想再延长1000倍时间倍时间(即延时即延时1s),可以采用双循,可以采用双循环的方法,如图环的方法,如图6.12所示的程序流程图。所示的程序流程图。对应的程序如下:对应的程序如下:2022-12-838/41 MOVBX,3E8H;BX1000LP2:MOVCX,
32、176HLP1:PUSHF POPF延时延时1ms程序段程序段 LOOP LP1 DECBX ;BXBX-1 JNZLP2;ZF0时,转至时,转至LP2,即,即BX0时转时转 HLT ;暂停暂停 此程序中内循环是此程序中内循环是1ms时间,而在外循环中的两条控制指令时间,而在外循环中的两条控制指令DEC和和JNZ所对应的时钟节拍分别为所对应的时钟节拍分别为2个和个和4个个,一共只需,一共只需0.75s,与,与1ms比较极短,比较极短,所以在外循环里忽略不计了,外循环的循环初值仍设为所以在外循环里忽略不计了,外循环的循环初值仍设为1000次,对应的次,对应的十六进制为十六进制为3E8H。2022
33、-12-839/41例例 设设AX寄存器中有一个寄存器中有一个16位二进制数,编一程序,统计位二进制数,编一程序,统计AX中中1的个数,统计结果送的个数,统计结果送CX中。中。该程序可用固定次数循环和条件判断两种方法实现。该程序可用固定次数循环和条件判断两种方法实现。条件判断法编制程序如下:条件判断法编制程序如下:START:MOV CX,0LOOP:SUB AX,0 JZSTP SAL AX,1 JNC NOD INC CXNOD:JMP LOOPSTP:HLT固定次数循环法,循环次数为固定次数循环法,循环次数为16次,程序如下:次,程序如下:其中其中:CX中存放循环次数,中存放循环次数,B
34、X中存放中存放“”的个数的个数 MOV CX,16 MOV BX,0 AA:SHL AX,1 JC YY JMP PP YY:INC BX PP:LOOP AA HLT 2022-12-840/41例例:计算计算S=1+2+3+100的和值并将其存入数据段的和值并将其存入数据段2000H单元单元.程序如下:程序如下:MOV CX,64H MOV AL,0 MOV BL,1AA:ADD AL,BL INC BL LOOP AA MOV 2000H,AL HLT2022-12-841/41例例:读程序读程序,(1)本程序实现什么功能本程序实现什么功能?(2)结果在哪里结果在哪里?START:INA
35、L,20HMOVBL,ALINAL,30HMOVCL,ALMOVAX,0ADLOP:ADDAL,BL ADCAH,0 DECCL JNZADLOP HLT;将将20H端口端口 的字节读入的字节读入AL;AL中的中的8位字节送位字节送 BL;将将30H端口端口 的字节读入的字节读入AL;AL中的中的8位字节送位字节送 CL;立即数立即数0送送 AX;AL与与BL的内容相加,结果放的内容相加,结果放AL;AH的内容与立即数的内容与立即数0以及以及CF相加相加;CL内容减内容减1,结果放,结果放CL;当结果不为零时,执行当结果不为零时,执行ADLOP;暂停暂停20H与与30H端口的内容端口的内容相乘,结果放在相乘,结果放在AX中中人有了知识,就会具备各种分析能力,明辨是非的能力。所以我们要勤恳读书,广泛阅读,古人说“书中自有黄金屋。”通过阅读科技书籍,我们能丰富知识,培养逻辑思维能力;通过阅读文学作品,我们能提高文学鉴赏水平,培养文学情趣;通过阅读报刊,我们能增长见识,扩大自己的知识面。有许多书籍还能培养我们的道德情操,给我们巨大的精神力量,鼓舞我们前进。