D幻灯片定稿第4章MCS-51汇编语言程序设计_第1页
D幻灯片定稿第4章MCS-51汇编语言程序设计_第2页
D幻灯片定稿第4章MCS-51汇编语言程序设计_第3页
D幻灯片定稿第4章MCS-51汇编语言程序设计_第4页
D幻灯片定稿第4章MCS-51汇编语言程序设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MCS-51汇编语言程序设计第4章·单片机原理与应用课程Contents本章内容概览汇编语言程序设计从基础到实战的完整知识体系01汇编语言程序设计基础02伪指令系统与源程序汇编03基本程序结构详解04实用程序设计技术05综合编程实例与实战CHAPTER01汇编语言程序设计基础理解编程语言的层次体系与汇编语言的核心特征PROGRAMMINGLANGUAGES编程语言的三个层次MCS-51程序设计涉及机器语言、汇编语言和高级语言三个层次。汇编语言以助记符替代二进制码,兼顾可读性与硬件控制力,在需要直接管理中断、存储器和I/O接口的嵌入式场景中具有不可替代的优势。机器语言由二进制代码直接表示指令与数据,CPU可直接执行无需翻译,但人类难以阅读和记忆,编写效率极低且极易出错。如RET指令对应机器码22H,MOVA,#0FH对应74H0FH,程序员需记住每条指令的二进制编码。二进制汇编语言采用英文助记符(MOV、ADD、DJNZ),与机器指令一一对应,经汇编程序翻译后执行。面向特定硬件架构,能直接管理中断、访问存储器和I/O接口,程序效率高、占用空间小。不同架构不兼容,需深入了解MCS-51硬件结构才能编写有效程序。助记符高级语言(C51)不受具体机器限制,使用数学公式和习惯用语,通用性强、直观易懂,适合科学计算和复杂逻辑开发。MCS-51开发中常用C51语言,开发效率高但代码体积较大,对硬件的直接控制能力不如汇编。C51MCS-51ASSEMBLY汇编语言语句格式与分类MCS-51汇编语言采用标号、操作码、操作数、注释四段式格式,语句分为生成机器码的指令语句(111条)和不生成机器码的伪指令语句两类。掌握格式规范是编写正确汇编程序的前提。四段式格式[标号:]操作码[操作数][;注释],操作码必填,标号后须加冒号,操作数逗号分隔FORMAT指令语句共111条,汇编后产生机器代码,如MOVA,#00H生成74H00H,CPU可直接执行111条伪指令语句为汇编过程服务,不产生机器码,用于定义起始地址、分配存储空间等ORG·DB·EQU汇编过程.ASM源程序→汇编→.OBJ目标→链接→可执行文件→写入单片机ROM运行.ASM→ROM书写规则不区分大小写,标号禁用指令助记符或寄存器名,同程序标号不可重复RULESCHAPTER02伪指令系统与源程序汇编掌握程序定位、数据定义和空间分配的核心工具PseudoInstructions核心伪指令:ORG、END、EQUORG、END、EQU是MCS-51汇编语言中最基础的三个伪指令,分别承担程序地址定位、汇编终止标记和符号常量定义的职责,是构建规范化汇编程序的基石。ORG—起始地址伪指令格式为ORGnn(nn为16位地址),指定其后程序代码在ROM中的存放起始地址,如ORG0000H用于复位向量入口0000HEND—程序结束伪指令放在整个源程序的最后一行,通知汇编器源程序到此结束,END之后的任何内容都将被汇编器忽略不予处理终止标记EQU—等值伪指令格式为'符号名EQU表达式',将表达式值赋给符号名,如LED_PORTEQUP1,后续可用LED_PORT代替P1端口符号替换ASSEMBLYDIRECTIVES数据定义伪指令:DB、DW、DSDB、DW、DS三个伪指令分别用于定义字节数据、字数据和预留存储空间,是汇编程序中管理ROM数据表和RAM缓冲区的核心手段。DB—定义字节数据格式为[标号:]DB字节数据表,从当前地址开始连续存放8位数据,如DB01H,02H,03H依次在ROM中存放三个字节。支持字符串定义,如DB'HELLO'会将5个字符的ASCII码依次存入ROM,在LED显示和串口通信编程中经常使用。8-bit·ROMDW—定义字数据格式为[标号:]DW字数据表,每个数据占16位(2字节),按高字节在前、低字节在后的顺序存放,如DW1234H存入12H和34H。常用于存放16位地址指针或较大的常量数据,在地址跳转表和中断向量表定义中广泛使用。16-bit·PointerDS—预留存储空间格式为[标号:]DS表达式,从当前地址开始预留指定数量的字节空间,如BUFFER:DS20预留20字节缓冲区。预留空间在汇编时填充00H,运行时可由程序写入数据,常用于定义数据缓冲区、堆栈空间或临时变量区域。Buffer·RAMMCS-51汇编伪指令位地址与字节地址伪指令BIT和DATA伪指令分别用于MCS-51独特的位地址空间和字节地址空间的符号化命名,使位操作和RAM变量访问的代码更具可读性和可维护性,体现了MCS-51位处理能力的编程优势。01BIT伪指令格式为"符号名BIT位地址",如MOTOR_ONBITP1.0,将引脚定义为符号名,便于位操作指令直接引用。02DATA伪指令格式为"符号名DATA表达式",专用于内部RAM字节地址定义,如TEMPDATA33H定义温度变量存放于33H单元。03位地址空间范围:直接位地址00H–7FH(对应20H–2FH字节),以及可位寻址的SFR寄存器,BIT伪指令仅用于这些区域。04编程实践建议:将所有地址常量、端口定义、标志位用EQU/BIT/DATA统一命名,集中在程序头部定义,便于后续修改和维护。单片机教学实验箱·位操作与字节寻址硬件环境Chapter03基本程序结构详解掌握顺序、分支、循环与子程序四大核心结构ProgramControlFlow顺序结构与分支结构顺序结构按地址递增逐条执行指令,适合线性处理流程;分支结构通过条件转移指令实现程序流向的动态选择,是汇编语言中实现逻辑判断的核心机制,两者共同构成程序控制流的基础。顺序结构逐条执行:程序从起始地址按存储顺序逐条执行,无跳转指令,指令流向单一确定典型应用:数据传送、简单算术运算、I/O端口顺序读写操作编程要点:合理安排指令顺序减少寄存器占用,利用累加器A暂存中间结果分支结构MCS-51程序设计循环结构程序设计循环结构通过DJNZ等控制指令实现代码段的重复执行,是数据块处理、延时生成和批量运算的基础。MCS-51支持单层和多层嵌套循环,循环次数由8位寄存器控制(最大255次),超大循环需通过嵌套实现。01DJNZ指令是MCS-51循环控制的核心:先对工作寄存器或直接地址减1,若结果不为零则跳转到目标标号,形成循环。02循环三要素:初始化(设置循环变量初值和指针)→循环体(执行重复操作并修改计数器)→循环控制(DJNZ判断是否继续)。03单层循环示例:将内部RAM30H~3FH共16个单元清零,用R0作指针、R7作计数器,DJNZR7,LOOP控制16次循环。04嵌套循环:当循环次数超过255次时需使用双层或多层嵌套,如延时程序中R4控制外层、R5控制内层,总延时=外层次数×内层延时。05循环优化:优先使用DJNZ而非CJNE(节省一条指令),循环体内减少不必要的寄存器压栈操作,将不变量提到循环外部。单片机晶振元件·振荡频率决定定时与延时的精度基准MCS-51汇编语言子程序设计与调用机制子程序通过LCALL/ACALL调用和RET返回实现代码复用,MCS-51的堆栈机制自动管理返回地址。参数传递、现场保护和接口约定是编写可靠子程序的三大要素。01调用机制:LCALLaddr16(全64KB)或ACALLaddr11(2KB)调用子程序,CPU自动将断点压栈,RET弹栈返回02参数传递:寄存器传递(R0~R7,最快)、存储器传递(约定RAM地址)、堆栈传递(PUSH/POP,适合嵌套)03现场保护:入口先PUSH寄存器(ACC、PSW),出口前按反序POP恢复,防止破坏主程序运行状态04设计规范:入口写清功能、参数与返回值约定;统一RET返回;避免固定地址,提高可移植性05堆栈管理:MCS-51堆栈向上生长(SP递增),初始化需设SP(如MOVSP,#60H),注意深度限制模块化电路板设计体现了子程序的模块化思想MCS-51汇编程序设计查表程序设计查表法利用MOVC指令从ROM预存数据表中按索引取值,以空间换时间,将复杂的实时计算转化为快速的数据检索。这是MCS-51汇编编程中最具特色的技术之一,广泛用于段码转换、函数逼近和数据映射。七段数码管·查表法最典型的应用场景01MOVCA,@A+DPTR—以DPTR为基址、A为偏移量,从ROM读取数据到A,可访问64KB全地址空间,适合大表和远距离查表02MOVCA,@A+PC—以当前PC值为基址、A为偏移量查表,代码紧凑但范围受限(256字节内),需精确计算PC偏移量03数据表定义—用DB伪指令在ROM中存放预计算数据,如TAB:DB3FH,06H,5BH,4FH...定义0~9的七段数码管段码04典型应用—BCD码到七段码转换(0~9对应不同段码)、正弦/余弦函数值表(角度映射为函数值)、ASCII码转换表等05编程步骤—计算偏移量放入A→设置基址寄存器DPTR→执行MOVC查表→取出结果处理,多字节数据需多次查表或配合DW使用CHAPTER04实用程序设计技术算术运算、码制转换与数据处理的编程实战MCS-51Arithmetic多字节算术运算程序MCS-51的8位ALU需通过分步运算和进位/借位传递实现多字节加减法。最低字节使用ADD/SUBB,高位字节使用ADDC/SUBB配合CY标志逐字节处理,循环控制字节数,是嵌入式系统中大数运算的基础实现方式。MCS-51算术运算指令对照表指令功能说明对CY影响典型用途ADDA,srcA←A+srcCY=1多字节加法最低字节ADDCA,srcA←A+src+CYCY=1多字节加法高位字节SUBBA,srcA←A−src−CYCY=1多字节减法所有字节INCA/@Ri操作数加1不影响指针递增、计数器MULABBA←A×BCY=0乘法基础指令DIVABA÷B商/余数CY=0除法基础指令6条核心指令覆盖加减乘除,多字节运算通过组合指令并处理进位/借位标志实现。ADD/ADDC最低字节用ADD相加,后续字节用ADDC带进位加,循环N次完成N字节加法。SUBB先CLRC清除借位标志,最低字节用SUBB,后续字节同样用SUBB自动处理借位传递。MEMORY被加数存于30H起始,加数存于40H,结果覆盖被加数区域,R7存放字节数N控制循环。MULAB提供8×8=16位乘法,多字节乘法需分解为多次8位乘法再累加部分积。DIVAB实现8位除法,多字节除法需采用移位相减的恢复余数法,逐位确定商。MCS-51Programming码制转换程序设计码制转换程序解决不同数据表示格式间的互操作问题,是数据采集、显示输出和通信传输的关键环节。二进制→BCD码除10取余法:用DIVAB将8位二进制数除以10(B=0AH),余数(B)为个位,商(A)再除以10得百位和十位16位转换:采用双字节除法或"加3移位法"(DoubleDabble),逐位移入并检测BCD位是否≥5需加3修正DIV·加3移位BCD码→二进制乘10加位法:百位×100+十位×10+个位,用MULAB和ADD指令组合,将十进制各位还原为二进制数值压缩BCD:先用ANLA,#0FH和SWAPA分离高低半字节,再分别转换MUL·ANL·SWAPBCD码↔ASCII码BCD→ASCII:BCD码(0~9)加30H即得对应ASCII码(30H~39H),用于串口发送数字字符时的编码转换ASCII→BCD:减30H还原数值;字母A~F加减37H/57H可实现十六进制ASCII转换±30H·串口编码DataProcessing数据排序与极值查找数据排序和极值查找是单片机数据处理的基础算法。冒泡排序通过相邻元素两两比较实现升序或降序排列,极值查找通过遍历比较维护当前最大/最小值,两者都是传感器数据后处理和质量控制的核心手段。冒泡排序01N个数需N-1轮比较,每轮相邻两数用SUBB比较大小,若逆序则交换,每轮将当前最大数"冒泡"到末尾02设置交换标志位,若某轮无任何交换说明已有序,提前退出,最优情况复杂度从O(N²)降至O(N)N-1轮极值查找01取首元素作为初始极值,用SUBB与后续元素逐一比较,CY=1说明当前值更大则更新极值,遍历完即得结果02案例:从片外RAMBLOCK单元开始的数据块,长度存于LEN单元,通过两两比较法找出最大数存入MAX单元SUBB关键字搜索01线性搜索:从首地址逐字节用CJNE比较,匹配则返回地址,不匹配则指针加1,适合无序数据块02二分搜索:要求数据已排序,取中间元素比较后缩小范围至前半或后半,效率O(logN)O(logN)Chapter05综合编程实例与实战从需求分析到代码实现的完整编程流程演练AssemblyWorkflow汇编语言程序设计流程规范的汇编语言程序设计遵循"问题分析→流程图设计→源程序编写→汇编翻译→调试验证"五步流程。流程图设计环节尤为关键,它将抽象算法转化为可视化逻辑,是避免编程逻辑错误的最佳实践。电子工程师在工作台调试单片机的真实场景01问题分析:明确任务需求,确定输入数据来源(I/O端口/存储器/传感器)和输出目标,选择合适的算法策略02流程图设计:用标准框图符号(起止框、处理框、判断框、流程线)将算法可视化,标注寄存器分配和存储器使用方案03编写源程序:按流程图逐段编写汇编代码,头部用伪指令定义常量/地址/端口,合理添加注释说明功能和设计意图04汇编翻译:使用汇编器(如KeilA51)将.ASM源文件翻译为.OBJ目标文件,修正所有语法错误和警告信息05调试验证:在仿真环境中单步执行、设置断点、观察寄存器和存储器变化,确认逻辑正确后烧录进行实机测试MCS-51延时设计综合实例:延时子程序设计延时子程序通过嵌套循环消耗CPU执行时间实现精确延时,是LED控制、按键消抖、通信时序等场景的基础工具。汇编代码与执行时间分析·12MHz晶振汇编代码周期说明执行时间DELAY:MOVR4,#2481外层循环计数初值1μsD1:MOVR5,#2371中层循环计数初值1μs×248D2:MOVR6,#71内层循环计数初值1μs×237×248DJNZR6,$2内层循环体(自跳转)2μs×7×237×248DJNZR5,D22中层循环控制2μs×237×248DJNZR4,D12外层循环控制2μs×248RET2子程序返回2μs延时原理12MHz晶振下1机器周期=1μs,DJNZ占2周期,循环次数×周期数=总延时1μs/cycle三层嵌套R6×7→R5×237→R4×248,三层循环嵌套实现近1秒延时≈0.82s计算公式内层周期×各层次数+各层DJNZ与MOV指令开销,逐条精确计算逐条精算子程序封装封装为DELAY子程序,R3传入参数控制外层循环,LCALL调用复用LCALL实际应用LED闪烁调用两次延时;按键消抖仅需10~20ms,单层循环即可10–20msMCS-51DATAOPERATIONS综合实例:数据块搬移与处理数据块搬移是MCS-51数据采集与处理的基础操作,通过地址指针递增和循环控制实现批量数据的读写。在搬移过程中嵌入求和、过滤、转换等处理逻辑,可实现"一次遍历多重处理"的高效编程模式。片内外RAM数据搬移片内→片内MOV@Ri,A配合INCRi循环,R0/R1分别指向源/目标地址,R7控制字节数,实现片内RAM区域间的高效数据搬移片外→片内MOVXA,@DPTR读片外,MOV@Ri,A写片内,INCDPTR逐次递增,完成外部存储器到内部RAM的数据传输MOVMOVXINC数据块求和与平均值求和运算遍历累加到R2R3(16位),高字节用ADDC处理进位,循环结束即得总和。支持最大64KB数据块的累加运算平均值计算先调用求和子程序,再除以数据个数,商为均值、余数可四舍五入。常用于传感器数据的平滑处理ADDCDIVSUBB数据过滤与异常处理范围过滤CJNE比较上下限,范围内写入目标区并计数,超出则跳过。实现有效数据的快速筛选,剔除明显异常值中值滤波冒泡排序后取中间值,有效去除传感器随机脉冲干扰。适用于噪声较大的模拟量采集场景CJNESORTSWAP综合实例I/O端口控制编程MCS-51的P0~P3端口通过MOV指令直接读写,是控制LED、数码管、继电器等外设的基础接口。流水灯利用循环移位实现动态显示效果,按键扫描配合消抖逻辑实现可靠的用户输入检测,两者是嵌入式I/O编程的经典范式。LED流水灯实验板实拍01LED流水灯控制实现原理:初值01H送P1口→延时→RLA循环左移→再送P1口→循环8次完成一轮流水效果,改变移位方向可控制流动方向花样扩展:用查表法代替移位,在ROM中预定义多种亮灭组合,逐次查表送P1口实现复杂花样灯效02按键扫描与消抖独立按键:MOVP1,#0FFH配置为输入→读P1→判断某位是否为0,为0则延时10ms后再次读入确认矩阵键盘:逐行输出低电平→读列值→行列组合确定按键编号→查表获取键值,4×4矩阵需4次行扫描03数码管动态扫描原理:多个数码管共用段码线(P0口),位选线(P2口)分别控制,快速轮流点亮利用视觉暂留形成同时显示步骤:取缓冲区数据→查段码表→送段码到P0口→送位选信号到P2口→短延时→关闭当前位→切换下一位MCS-51中断系统综合实例:中断服务程序设计中断服务程序是MCS-51响应异步事件的核心机制,程序必须定位在特定中断向量地址,使用RETI指令返回以清除中断标志。MCS-51中断源与向量地址对照表中断源向量地址中断标志允许位自然优先级外部中断0(INT0)0003HIE0EX0(IE.0)最高(1)定时器0溢出(TF0)000BHTF0ET0(IE.1)2外部中断1(INT1)0013HIE1EX1(IE.2)3定时器1溢出(TF1)001BHTF1ET1(IE.3)4串行口(RI/TI)0023HRI/TIES(IE.4)最低(5)中断向量地址INT0→0003H、T0→000BH、INT1→0013H、T1→001BH、串口→0023H,用ORG定位并放置跳转指令ORG定位程序结构模板ORG→LJMP跳转→主程序区→ISR入口:PUSH保护→处理→POP恢复→RETI返回LJMP→RETI现场保护要点入口PUSHACC、PSW及所用寄存器,出口按反序POP恢复,防止主程序寄存器被改写PUSH/POPRETI与RET区别RETI额外清除优先级触发器,允许同级或低级中断再响应;误用RET将导致中断永久屏蔽RETI≠RET编程禁忌避免长延时、大量数据搬移和不可重入子程序,保持ISR执行时间尽可能短精简·快速MCS-51TimerProgramming综合实例:定时器/计数器编程MCS-51的T0/T1定时器通过TMOD设置工作方式、TH/TL装入计数初值、TR启动计数,溢出时产生中断请求。初值计算和重装机制是实现精确时基的关键。01方式1(16位):TH和TL组成16位计数器,最大计数65536,溢出后需手动重装初值,适合较长定时场景02方式2(8位自动重装):TL作8位计数器、TH存重装值,溢出时自动将TH值装入TL,定时精度更高且代码更简洁03初值计算:X=2n−T/t,12MHz定时50ms:X=65536−50000=3CB0H04初始化:MOVTMOD,#01H→MOVTH0,#3CH→MOVTL0,#B0H→SETBET005启动与中断:SETBTR0启动→等待溢出中断→中断服务中重装初值→执行定时任务→RETI数字时钟—定时器编程最典型的应用场景MCS-51SerialCommunication综合实例:串行通信编程MCS-51串行口通过SCON配置工作方式、定时器1产生波特率,SBUF作为收发数据的缓冲寄存器。方式1是最常用的通信模式,TI和RI驱动可靠传输。RS232串口通信线缆实拍SCON配置—方式1(8位UART,可变波特率)设置SCON=50H,REN=1允许接收;方式0用于移位寄存器扩展I/O波特率生成—定时器1方式2自动重装,12MHz下9600bps需TH1=0FDH;11.0592MHz晶振可精确生成发送程序—MOVSBUF,A写入数据,硬件自动添加起始位和停止位后串行输出,JBCTI等待完成接收程序—SETBREN后硬件检测起始位并移位接收,RI=1后MOVA,SBUF读入数据并CLRRI多机通信—方式2/3支持第9位TB8/RB8,主机发地址帧TB8=1,从机匹配地址后接收数据帧MCS-51Assembly·CaseStudy实战案例:片外RAM数据块找最大数从片外RAM数据块中查找最大数是MCS-51综合编程的经典案例,融合MOVX外部RAM访问、SUBB比较判断、DJNZ循环控制和DPTR指针操作四大核心技能,体现了汇编语言直接操控硬件的编程特色。找最大数程序核心代码解析标号指令功能说明FMAX:MOVDPTR,#BLOCK设置片外RAM数据块首地址指针DECLEN比较次数=数据长度-1MOVXA,@DPTR读取第一个数据作为初始最大值LOOP:CLRC/MOVB,A清进位标志,暂存当前最大值到BINCDPTR/MOVXA,@DPTR指针+1,读取下一个数据到ASUBBA,BA-B比较,结果影响CY标志JNCNEXT/MOVA,B若A≥B保留A;否则恢复B为最大值NEXT1:DJNZLEN,LOOP未完继续比较,循环LEN-1次MOVMAX,A将最终最大数存入MAX单元01问题定义:片外RAM从BLOCK(0100H)开始存放无符号数据块,长度存于片内RAM的LEN单元(30H),找出最大数存入MAX单元(31H)02算法设计:两两比较法——取第一个数为初始最大值,依次与后续n-1个数用SUBB比较,CY=0且A≠0说明新数更大则更新,遍历完即得结果03关键指令链:MOVXA,@DPTR读片外数据→CLRC清进位→MOVB,A暂存→INCDPTR移指针→SUBBA,B比较大小04比较逻辑:JNCNEXT(无借位说明A≥B,保留A中值);否则MOVA,B恢复原最大值;DJNZLEN,LOOP继续下一轮比较05程序收尾:循环结束后A中即为最大数,MOVMAX,A存入结果单元,SJMP$死循环等待AssemblyDebugging编程调试技巧与常见错误分析汇编语言直接操控硬件的特性使得编程错误的调试更具挑战性。堆栈溢出、中断不响应、死循环和地址越界是四类最常见的问题,通过规范化编程习惯和系统化调试方法可有效预防和快速定位。常见编程错误01堆栈溢出:未初始化SP(默认07H与工作寄存器区重叠)或嵌套调用过深,导致堆栈覆盖数据区,表现为程序跑飞或数据莫名被修改02中断不响应:忘记SETBEA开总中断、中断服务程序用RET代替RETI导致中断被锁死、中断向量处未放置跳转指令03死循环:DJNZ计数器初值为0(实际循环256次)、循环体内意外修改计数寄存器、跳转标号指向错误位置调试方法论04单步调试:在Keil仿真环境中逐条执行指令,观察A、R0~R7、PSW等寄存器变化,确认每条指令执行效果05断点设置:在循环入口、分支判断点、中断入口等关键位置设断点,运行后检查存储器内容,快速跳过已确认代码段06模块化测试:先单独测试每个子程序功能正确后再组装到主程序联调,缩小问题定位范围,避免在大程序中盲目排查示波器调试场景—硬件调试的核心工具SUMMARY本章知识总结本章系统讲解了MCS-51汇编语言程序设计的完整知识体系,从语言基础、伪指令工具、程序结构、实用技术到综合实战层层递进。汇编编程能力的提升依赖大量实践,建议结合实验板反复调试运行各类程序。基础与工具层汇编语言以助记符表示指令,与机器码一一对应,面向硬件、效率高、通用性差,是单片机直接控制硬件的必备技能8个核心伪指令(ORG/END/EQU/DB/DW/DS/BIT/DATA)分别承担地址定位、数据定义、空间分配和符号命名的职责8个伪指令程序结构层五种基本结构:顺序(逐条执行)、分支

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论