版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第4章 汇编语言程序设计,4. 1 概 述,4. 2 简单程序,4. 3 分支程序,4. 4 循环程序,4. 6 子程序的设计及调用,4. 7 程序设计举例,4. 5 查表程序,下页,4.1 概 述,一、汇编语言和高级语言相比具有下列优点:,上页,下页,回目录,二、汇编语言程序设计的步骤:,三、汇编语言程序的结构,上页,下页,回目录,软件任务分析,1、软件任务分析和硬件电路设计结合进行,2、软件任务分析: 执行软件: 监控软件:,单片机应用系统程序设计是在系统裸机条件下开发的,而且随应用系统的不同而不同。,完成各种实质性功能,如测量、计算、显示、打印、输出控制、通讯等;设计偏重算法效率。进行功
2、能定义、接口定义、数据结构、数据类型等定义 。,专门用来协调各执行模块和操作者的关系。着眼全局,逻辑严密。根据系统功能和键盘设置选择监控程序结构。,数据类型和数据结构规划,数据类型: 逻辑型 数值型: 定点型 浮点型,数据结构:数据存放格式问题。 大多采用线性结构。,资源划分,系统资源主要包括ROM、RAM、T/C、中断源等。,主要工作是进行RAM资源的分配。 片外RAM:容量大,存放批量大的数据。 片内RAM:认真考虑。,00H1FH:工作积存器区。主程序用0区,中断、子程序用1区、2区、3区。 20H2FH:位寻址区,存放各种软件标志、逻辑变量、位输入信息、位输出信息副本、状态变量、逻辑运
3、算中间结果等。保留12个字节备用,剩下作其它用途。 30H7FH(30HFFH):堆栈空间、数据缓冲区、各种参数、指针、中间结果等。,列出RAM资源详细分配清单,作为编程依据。,;字节定义区 X EQU30H Y EQU31H Z EQU32H ;40H4FH,没有使用 SIOBUF EQU 50H ;50H5FH, 串行通信缓冲区16字节 ;0E0H0FFH 32字节堆栈空间,;位变量、位标志变量定义 TIMOUT BIT 00H OVER BIT01H KEYF BIT02H,编程及调试,软件设计方法: 自上而下 自下而上,基本过程: 用编辑软件编辑源程序、编译软件生成目标代码、程序测试、
4、仿真运行、代码固化、样机试用、产品定型,磨刀不误砍柴功: 前期调研细致、软硬件论证充分、指标吃准、数据格式定好、模块功能和接口条件落实、操作规范要和用户谈妥、最后才开始设计程序设计、焊PCB板、调试样机。,MCS-51单片机汇编程序一般格式,例1:内部RAM从DATA1单元有一数据块,存放若干无符号数, 第一单元为数据块长度,求这些无符号数之和。,起始地址,程序主体,汇编结束标志,标号,注释,上页,下页,回目录,上页,下页,回目录,四、评价程序质量的标准:, 程序的执行时间, 程序所占用的内存字节数目, 程序的逻辑性、可读性, 程序的兼容性、可扩展性, 程序的可靠性,时 间 空 间,4.2 简
5、单程序,简单程序的特点:,既无分支,又无循环,按照顺序执行,例4-2:将一个字节内的压缩BCD码拆开并变成ASCII码, 存入两个RAM单元。BCD码放在内部RAM的20H, 转换后高半字节放到21H,低字节放22H。,BCDH BCDL,0011,0011,方法1:,BCD码09对应的ASCII码为30H39H 转换时,将20H中的BCD码拆开, 高四位置为“0011”即可。,BCDH,BCDL,上页,下页,回目录,可完成一定的基本功能,是编写复杂程序的基础,附录1:ASCII码字符表,程序:,0011 BCDH,0000 0000,BCDH BCDL,BCDL,0000,0011,0000
6、,BCDH,0011,上页,下页,回目录,ORG 0000H AJMP MAIN ORG 0030H MAIN:MOV A,20H ANL A,#0FH ORL A,#30H MOV 22H,A MOV A,20H SWAP A ANL A,#0FH ORL A,#30H MOV 21H,A HERE:SJMP HERE END,方法2:,采用除10H取余法将两个BCD数拆开,BCDH BCDL,0001 0000,0000 BCDH,0000 BCDL,DIV AB,上页,下页,回目录,0011 BCDH,0011 BCDL,程序:,;取BCD码至A,; 完成转换,;存ASCII码,;完成转
7、换,;存ASCII码,BCDH BCDL,0001 0000,0000 BCDH,0000 BCDL,DIV AB,0011,0011,上页,下页,回目录,方法2小结:,以上程序用了7条指令, 16个内存字节, 执行时间为13个机器周期。,双字节求补 设:两个字节原码数存在R1、R0中 求补后结果,存在R3、R2中。,例4-3:,方法:,求补采用“模 - 原码”的方法,上页,下页,回目录,即用“0”去减“原码”,-),存在借位,同样的功能,有不同的编程思路,出现不同的效果,影响程序的实时性及存储空间大小。,程序:,;低字节求补,;送R2,;A清零,;高字节求补,;送R3,0000 0000,0
8、000 0000,0000 0001,0,0000 0001,1,0000 0000,0,0000 0000,上页,下页,回目录,将内部RAM的20H单元中的8位无符号二进制数,转换为3位BCD码,并将结果存放在BAI(百位)、SHI(十位)、GE(个位)单元中。,例4-4:,编程思路:,可将被转换数除以100,得百位数;余数除以10 得十位数;最后余数即为个位数。,编程如下:,例如:255(十进制)除以100,得 2(百位数) 余数除以10,得5(十位数) 最后余数5即为个位数,上页,下页,回目录,BCD EQU 20H BAI EQU 21H SHI EQU 22H GE EQU 23H,
9、ORG 0000H AJMP MAIN ORG 0030H MAIN: MOV SP,#60H MOV A,BCD MOV B,#100 DIV AB MOV BAI,A MOV A,B MOV B,#10 DIV AB MOV SHI,A MOV GE,B NOP LJMP $ END,;除100,得百位,;余数除10,得十位、个位,码制转换程序: HEX ASCII码; BIN ASCII码,4.3 分支程序,当执行完某一条指令时,为完成某些功能,根据某些条件判断,使程序或顺序执行,或转移到其它指令处执行,这就是分支程序。,编程思路,这是一个简单分支程序,可以使两数相减,若CY=1, 则被
10、减数小于减数。用JC指令进行判断。,例4-5 设内部RAM30H,31H存放两个无符号数,试比较 两数的大小,较小的数存入30H单元,较大的数 存入31H单元。,程序的流程图如下:,上页,下页,回目录,程序:,;做减法比较两数,流程图:,上页,下页,回目录,多重分支程序举例,例4-7:设片内30H单元存放的是一元二次方程ax2+bx+c =0 根的判别式= b2 4ac的值。,试根据30H单元的值,编写程序,判断方程根的三种情况,存入片内31H内。 在31H中存放“0”代表无实根, 存放“1”代表有相同的实根, 存放“2”代表两个不同的实根。,编程思路,为有符号数,有三种情况,即小于零,等于零
11、、大于零。可以用两个条件转移指令来判断, 首先判断符号位,用指令JNB ACC.7, rel判断, 若ACC.7 = 1,则一定为负数;此时0 若ACC.7 = 0,则0。此时再用指令JNZ rel 判断 若0,则 0,否则= 0,上页,下页,回目录,0,= 0, 0,上页,下页,回目录,程序:,上页,下页,回目录,4.3.3 N路分支程序,根据前面程序运行结果,可以有N种选择,并转向其中任一处程序。,例4-10 128路分支程序:根据R3值转向128个目的地址。,编程方法:顺序程序 MOV A,R3 CJNE A,#00H,FZ1 AJMP FZ00 FZ1: CJNE A,#01H,FZ2
12、 AJMP FZ01 FZ2: CJNE A,#02H,FZ3 AJMP FZ02 FZ3: .,烦琐,程序太长。如作10000个分支程序.,使用 JMP A+DPTR指令实现:,JMP128:MOV A,R3 CLR C SUBB A,#128 JNC ERROR MOV A ,R3 MOV B,#3 MUL AB MOV DPTR,#PRGTAL ADD A,DPL MOV DPL,A MOV A,DPH ADDC A,B MOV DPH,A CLRA JMP A+DPTR PRGTAL:LJMP ROUT00 LJMP ROUT01 . LJMP ROUT127,;入口条件检查,;分支跳
13、转,;LJMP指令占3字节,例4-10: 128分支程序,例4-11: 256分支程序,分支程序应用场所: 1、键盘按键处理程序 根据所按功能键转到相应的功能子程序 2、通信协议处理程序,例:某键盘如下:,MOVA,B CLRC SUBB A,#3 JC FOUN RET FOUN:MOV A,B RL A ADD A,B MOV DPTR,#KEYF JMP A+DPTR KEYF:LJMP TONGXIN LJMP BIANHAO LJMP CAIYANG,;键编号,4.4 循环程序,循环程序:一些有规可循而又反复处理的问题,利用比较转移指令CJNE、减1不为“0”转移指令DJNZ等实现,
14、例4-13:在内部RAM 30H4FH 连续32个单元中存放了 单字节无符号数,求32个无符号数之和, 并存入内部RAM 51H,50H中。,编程思路:,这是重复相加问题,要设置一些工作单元 设: R0 做加数地址指针, R7 做循环次数计数器, R3 做和数的高字节寄存器。 A 做和数的低字节寄存器,程序的流程图如下:,上页,下页,回目录,地址指针,循环次数计数器,流程图:,31R7 #0R3 (30H)A #31HR0,CY=0?,END,START,(R7)-1=0?,51H(R3) 50H (A),Y,N,(A)+(R0)A,(R0+1)R0,(R3)+1R3,上页,下页,回目录,N,
15、Y,程序:,;取被加数,;R0作加数地址指针,;CY=0,和256,则转,;作加法,;CY=1,加到高字节,;修改R0指针,;未完,重复加,;存和数,初始化部分,循环体部分,结束部分,上页,下页,回目录,循环执行 直到R7=0,循环 控制,例4-14:从外部RAM BLOCK单元开始有一无符号数数据块,,数据块长度存入LEN单元, 求出其中最大数存入MAX单元。,为了方便进行比较, 我们使用CY标志来判断两数的大小, 使用B寄存器作比较与交换的寄存器, 使用DPTR作外部RAM地址指针。,解:这是一个基本搜索问题,采用两两比较法。取两者较 大的数再与下一个数进行比较,若数据块长度LEN=n则应
16、比较n-1次,最后较大的数就是数据块中的最大数。,程序的流程图如下:,上页,下页,回目录,流程图:,DPTR#BLOCK LENLEN-1 A(DPTR),CY=0?,END,START,Y,N,LEN-1=0?,MAX最大数,Y,N,CY0 B(A) DPTR+1 A(DPTR) A(A)-(B),若(A)(B)则A(B),若(A)(B) 则A(B)+(A),上页,下页,回目录,A中 的数较大,较大数 交换至A,恢复 较大数,初始化 工作单元,编程:,;定义长度计数单元,上页,下页,回目录,;取数至A,;0CY,;修改指针,;暂存于B,;取下一数,;大者送A,;若(A)(B)则恢复A,;未完
17、继续比较,;存最大数,;*若用RET指令结尾则 该程序可作子程序调用,;作减法比较,RET,例4-15:从外部RAM BLOCK单元开始有一数据块, 数据块长度存入LEN单元,,试统计其中正数、负数和零的个数, 分别存入PCOUNT、MCOUNT、ZCOUNT单元。,解:这是一个多重分支的单循环问题。数据块中是带符号数,先用JB ACC.7,rel 指令判断符号位。,程序的流程图如下:,若ACC.7=1,则该数一定是负数,MCOUNT单元加1;,若ACC.7=0,则该数可能是正数,也可能是零;,用JNZ rel 判断A是否为零,若A0,则一定是正数,PCOUNT单元加1;,若既不为正也不为负,
18、则一定是零,ZCOUNT单元加1;,上页,下页,回目录,流程图:,上页,下页,回目录,程序:,上页,下页,回目录,上页,下页,回目录,4.5 查表程序,上页,下页,回目录,对于复杂参数的计算如:,非线性参数,对数、指数、三角函数,微分、积分等,用汇编编程十分困难,甚至无法建立数学模型,用查表的方法简单容易,查表:把事先计算或测得的数据按一定顺序编制成表格,存放在程序存储器中。查表程序的任务就是根据被测数据,查出最终所需要的结果。,例4-20:一个十六进制数放在HEX单元的低四位, 将其转换成ASCII码,查表程序:,编程思路,十六进制 09 的ASCII码为 30H39H, AF 的ASCII
19、码为 41H46H,,查表指令: MOVC A,A+DPTR,MOVC A,A+PC,表格定义:用伪指令 DB 或 DW 把表格的数据存入ROM,上页,下页,回目录,来获得数据,ASCII码表格的首址为ASCIITAB,不连续的,上页,下页,回目录,编程1:,0 1 2 3 4 5 6 7 8 9,A B C D E F,编程2:,ORG 0000H,HEX EQU 30H,HEXASC: MOV A,HEX,ANL A,#0FH,ADD A,,MOVC A,A+PC,MOV HEX,A,AJMP $,ASCTAB:DB 30H,31H,32H,33H,DB 34H,35H,36H,37H,D
20、B 38H,39H,41H,42H,DB 43H,44H,45H,46H,END,;2字节,;2字节,#4,上页,下页,回目录,;变址调整,4.6 子程序的设计及调用,一、子程序的概念,把能完成某种基本操作并具有相同操作的程序段单独 编成子程序。如:函数、 运算、代码转换、延时等,子程序调用 ACALL、LCALL 子程序返回 RET,使用子程序的优点, 不必重复书写同样的程序,提高编程效率, 程序的逻辑结构简单,便于阅读, 缩短了源程序和目标程序的长度,节省了存储器空间, 使程序模块化、通用化、便于交流共享资源, 便于按某种功能调试,上页,下页,回目录,操作,二、调用子程序的要点, 子程序的
21、名字:子程序开头的标号段,也是其入口地址, 供主程序调用。,例如:调用延时子程序,主程序指令: LCALL DELAY, 子程序返回: 结尾必须使用一条从子程序返回指令RET,它具有恢复断点的功能,主程序,LCALL断点,子程序,RET,1、子程序的结构,上页,下页,回目录,子程序: DELAY:MOV R7,#100 DJNZR7,$ RET,子程序名称,2、参数传递,子程序入口条件:,在调用一个子程序时,主程序应先把有关参数放到 某些约定的位置,子程序运行时,可以从约定的位置得 到有关参数。,子程序出口条件:,子程序结束前,也应把处理结果送到约定位置,参数传递的方法:, 子程序无须传递参数
22、,这类子程序中所需要的参数是子程序赋予, 不需要主程序给出,上页,下页,回目录,主程序:,子程序:,不需主程序提供入口参数,从子程序开始到子程序返回,大约为20ms,例4-23 调用延时子程序DELY,子程序开始的标号,子程序返回指令,调用子程序,上页,下页,回目录,982=196s,1s,1s,设:主频为12MHZ,2s,(196+2+2) 100,+3,=20003s = 20.003ms,2s,1s,+3, 用累加器和工作寄存器传递参数,入口参数:,放在累加器A和工作寄存器中R0 R7中,出口参数:,放在累加器A和工作寄存器中R0 R7中,例4-24 双字节求补子程序CPLD,解:采用“
23、取反加1”的方法,十六位数取反加1, 不仅低字节要加1,高字节要加低字节的进位。 故采用ADD指令,不采用INC指令。 INC指令不影响CY位,上页,下页,回目录,入口参数:(R7R6)=16位数,出口参数:(R7R6)=求补后的16位数,上页,下页,回目录,Cy,+ Cy, 通过操作数地址传递参数,入口参数:(R0)=求补数低字节指针,(R7)=n-1,出口参数:(R0)=求补后高字节指针,例4-25 n字节求补子程序CPLN,上页,下页,回目录,地址, 通过堆栈传递参数,解: 由于要进行两次转换,故可调用查表子程序完成,主程序,*PCH,*PCL,HEX,栈底,断点地址,上页,下页,回目录
24、,尽量少用,子程序,上页,下页,回目录,HEX,Result,Result,PC,HEX,HEX,*PCL,*PCH,断点,ASC,主程序,子程序,上页,下页,回目录,3、现场保护,现场保护: 如果子程序使用的寄存器与主程序使用的寄存器 有冲突,在转入子程序前,特别是进行中断服务 子程序时,要进行现场保护。,保护内容: 内部 RAM 内容, 各工作寄存器内容, 主程序正在使用 累加器 A 、B DPTR PSW,保护方式: 将要保护的单元压入堆栈。 还可以用 RS1 RS0 来选择其他通 用寄存器组,以便保护主程序现场。,上页,下页,回目录,例如:某子程序的现场保护,推入与弹出应按照“先进后出
25、”,或“后进先出”的顺序,上页,下页,回目录,三、子程序的调用及嵌套,1、子程序的调用,上页,下页,回目录,2、子程序的嵌套,子程序的嵌套: 子程序中可调用其他子程序,汇编语言子程序,可否自己调用自己?,常见MCS-51子程序:,1、算术运算子程序 多字节BCD码加法、减法、求补、移位;双字节二进制无符号数乘法、平方、除法、开平方;平均值 2、代码转换子程序 单字节HEX数转双字节ASCII码、ASCII码转HEX;单字节HEX数转BCD码等 3、查找 单字节HEX无(有)符号数据块极值;查表;排序;,4.7 程序设计举例,例4-29 多字节无符号数减法子程序NSUB,功能:n字节无符号数减法
26、,出口:(R0)=差数高字节地址指针,上页,下页,回目录,流程图:,程序:,上页,下页,回目录,例4-30 双字节无符号数快速乘法子程序MULD,功能: 双字节无符号数乘法,积为32位,出口: (R0)= 乘积的高字节地址指针,上页,下页,回目录,编程思路与手乘法相似:,被乘数,乘数,上页,下页,回目录,bdH,bdL,adH,adL,bcL,bcH,acL,acH,bdL,adH,相乘过程,上页,下页,回目录,程序,上页,下页,回目录,上页,下页,回目录,例4-33 多字节十进制加法子程序BCDADD,功能:n字节十进制加法,出口:(R0)= 和数高字节地址指针,上页,下页,回目录,程序:,
27、上页,回目录,过 “9” 补 “6”,CY,例4-6:空调机制冷时,若排出的空气温度比吸入的空气 温度低8则认为工作正常,否则便认为是故障, 并设置故障标志。,解:,为了可靠的监控空调机的工作情况,做两次减法: 第一次(40H)-(41H),若CY=1 ,则肯定有故障; 第二次两个温度的差值减去8 ,若CY=1 ,则肯定 有故障,程序的流程图如下:,上页,下页,回目录,首先定义一些工作单元,流程图:,上页,下页,回目录,故 障,正常,程序:,; A(40H)-(41H),;CY=1,则故障,;是则故障,;温度小于8?,;工作正常标志,;转出口,;设置故障标志,若CY1顺序执行,CY=1转移,C
28、Y=1转移,若CY1顺序执行,上页,下页,回目录,一般软件的容错设计,1、堆栈溢出的预防 堆栈设置在片内RAM区,片内资源有限,使堆栈区范围有限。 堆栈溢出,将引起程序“跑飞”,危害极大。,减少系统对堆栈的需求量方法: 1、取消部分子程序 2、尽量不用堆栈来传递参数和结果 3、根据需要减少子程序现场保护量,系统对堆栈的极限需求量计算方法: 主程序最大需量+低级中断最大需量+高级中断的最大需量,2、状态转移的条件审查,一般情况下,程序自当前状态进入下一状态,往往取决于一个特定的条件。对重要条件要进行审查,确保安全进入下一个状态。,如:散转程序的入口条件;,如:直线切削控制:当前状态为刀架快进,快
29、进量完成后进入下一个状态,停止快进,开始切削。 可靠性设计中,还要考虑:如冷却泵运转否?主轴电机运转否?等其它条件。 好处:防止软件设计错误对条件破坏、干扰的结果对条件的影响等,3、重要模块的安全性措施,某些重要模块的执行对系统有重大影响,如果错误执行将引起严重后果。系统受到干扰后,程序有可能弹飞到该模块中引起非法执行,降低系统可靠性。,1)、加强模块入口条件审查;,2)、为执行模块配备“密码”,措施:,4、软件算法的冗错设计,1)、逻辑运算的冗错设计,思路:画卡诺图、逻辑化简、程序设计、出错处理,注意必须作逻辑变量的全覆盖设计,2)、数值运算的容错设计,容错功能从两个方面考察:一是对入口条件
30、的要求是否苛刻;二是出口信息中是否包括出错信息,、入口条件审查,如:双字节除单字节、商存单字节正整数的运算子程序的入口条件?,考虑:除数是否为0?商是否超出一个字节的范围?,、必须对某些运算的中间结果和最终结果进行检查,并对结果做出处理,首先做入口条件检查:B200?C200?,能否保证结果正确?,5B-6C0?,B远大于C,出现A255情况 (B=125, C=0, BC, A=235+25=260),、出错信息的设计和使用,出错信息要设计的丰富一些,便于人们了解出错的详细情况,以便对症处理。,、合理安排运算方案,减少舍入误差对最终结果的影响。,如计算:9/5*6,方法1: MOV A,#9
31、 MOVB,#5 DIVAB MOVB,#6 MULAB,方法2: MOVA,#9 MOVB,#6 MULAB MOVB,#5 DIVAB,结果:6,结果:10,1、先进行无偏差或偏差小的运算;,2、尽量避免两数值相近的数过早相减;避免用绝对值小的数作分母等,建议:,、将复杂运算过程用查表来代替。,CPU抗干扰技术,当干扰作用到CPU本身时,CPU有可能将操作数当做操作码来执行,使其不能按正常状态执行程序,从而引起混乱。 如何及时发现CPU受到干扰、如何拦截失去控制的程序流向、如何使系统的损失减小、如何尽可能地恢复系统正常状态,便是CPU抗干扰技术研究的课题。,1、睡眠抗干扰,2、指令冗余;,
32、3、软件陷阱;,4、程序运行监视系统(WATCHDOG),CPU抗干扰技术,当干扰作用到CPU本身时,CPU将不能按正常状态执行程序,从而引起混乱。,1、睡眠抗干扰,CMOS型单片机通过执行ORL PCON,#1可以进入睡眠状态,只有定时/计数系统和中断系统处于值班状态。这时CPU对系统三总线上的出现的干扰不会作出什么反应,从而大大降低系统对干扰的敏感程度。,软件设计:,主程序自检、初始化,LOOP:ORL PCON,#1,LJMP LOOP,中断唤醒CPU,PC指针自动压栈,中断服务程序,中断返回,CPU睡眠,PC指针位置,回目录,2、指令冗余,CPU受干扰后,往往将操作数当作操作码执行,造
33、成程序混乱。,当程序弹飞到一单字节指令上时,便自动纳入正轨;,当程序弹飞到一双字节指令上时,有可能落到操作数上,从 而继续出错;,当程序弹飞到一三字节指令上时,因其有两个操作数,从而继续出错机会更大 。,应多采用单字节指令,并在关键地方人为插入一些单字节指令,或将有效单字节指令重复书写,提高弹飞程序纳入正轨的机会,这便是指令冗余。,实现方法:,在一些对程序流向起决定作用的指令之前插入两条NOP指令,以保证弹飞的程序迅速纳入正确的控制轨道。这些指令有:RET、RETI、LCALL、LJMP、JZ/JNZ、JC/JNC、JB/JNB、JBC、CJNE、DJNZ等。,下页,如:利用减法比较两无符号数的大小程序(数放A、B中):,无指令冗余程序:,CLRC SUBBA,B JCBBIG NOP BBIG:NOP .,有指令冗
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 南宁避雷铁塔施工方案(3篇)
- 河道取水坝施工方案(3篇)
- 瑜伽招生营销方案(3篇)
- 酒店新开营销方案(3篇)
- 肿瘤液体活检标准
- 深度BSDE方法在反射型与带均值反射BSDE数值模拟中的应用与探索
- 深圳中小板上市公司成长性与资本结构的关联机制剖析
- 深入剖析VDE - SAT下行链路信道建模及其多元应用
- 淮南矿区厚松散层下开采地表沉陷规律剖析与精准预测方法构建
- 淋巴细胞MHC-1表达变化与乳腺癌患者CTL功能关联性探究
- 多学科协作在危重患者抢救流程中的应用
- 统编版六年级语文下册第二单元情境题自测卷(含答案)
- ktv股东合同和合伙协议范本
- 邮政法律法规培训
- 城市桥梁工程施工与质量验收规范
- 语文园地三(第二课时)【知识精研】第二学期三年级语文下册统编版
- 译林版(2024)第二学期七年级下册 Unit2 Neighbourhood单元测试卷(含答案)
- 2025年中国国家铁路集团有限公司招聘笔试参考题库含答案解析
- 二人合伙经营饭店协议书
- 《慢性硬膜下血肿》课件
- 高效农业有机肥施用实施方案
评论
0/150
提交评论