版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章 ARM汇编语言程序设计ADS1.2环境下的汇编语句格式1. ARM 汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:”,而所有指令均不能顶格书写。2. ARM 汇编器对标识符大小写敏感,书写标号及指令时字母大小写要一致,在ARM 汇编程序中,一个ARM 指令、伪指令、寄存器名可以全部为大写字母,也可以全部为小写字母,但不要大小写混合使用(如果混合使用也能编译通过,如mov SP, r6能编译通过,但是moV SP, r6则出现错误)。3. 注释可以在一行的顶格书写。4.1伪伪操作在ARM汇编语语言程序序里,有有一些特特殊指令令助记符符,这些些助记符符与指令令系统的的助记符符不同
2、,没有相对对应的操操作码,通常称称这些特特殊指令令助记符符为伪指指令他们所完完成的操操作称为为伪操作。ARM指令系统统伪指令:由汇编器器处理伪指令是是由汇编编器对源源程序汇汇编期间间进行处处理的.伪指令仅仅在汇编编过程中中起作用用,一旦旦汇编结结束,伪伪指令的的使命就就完成。指令: 由ARM处处理器执执行ARM指令系统统在ARM的汇编编程序中中,有如如下几种种伪指令令:符号定义义伪指令令、数据定义义伪指令令、汇编控制制伪指令令、宏指令以以及其他他伪指令令。ARM指令系统统4.1.1符号定义义伪指令令符号定义义伪指令令用于定定义ARM汇编编程序中中的变量量、对变变量赋值值以及定定义寄存存器的别别
3、名等操操作。ARM指令系统统4.1.1符号定义义伪指令令常见的符符号定义义伪指令令有如下下几种:用于于定义全全局变量量的GBLA、GBLL和GBLS。用于于定义局局部变量量的LCLA、LCLL和LCLS。用于于对变量量赋值的的SETA、SETL、SETS。为通通用寄存存器列表表定义名名称的RLIST。ARM指令系统统1、GBLA、GBLL和和GBLS语法格式式:GBLA(GBLL或或GBLS)全全局变变量名GBLA、GBLL和和GBLS伪指指令用于于定义一一个ARM程序中的全全局变量量,并将将其初始始化。GBLA伪指令令用于定定义一个个全局的的数字变变量,并并初始化化为0;GBLL伪指令令用于
4、定定义一个个全局的的逻辑变变量,并并初始化化为F(假);GBLS伪指令令用于定定义一个个全局的的字符串串变量,并初始始化为空空;由于以上上三条伪伪指令用用于定义义全局变变量,因因此在整整个程序序范围内内变量名必必须唯一一。GBLATest1;定义一一个全局局的数字字变量,变量名名为Test1Test1SETA0 xaa;将该变变量赋值值为0 xaaGBLLTest2;定义一一个全局局的逻辑辑变量,变量名名为Test2Test2SETLTRUE;将该变变量赋值值为真GBLSTest3;定义一一个全局局的字符符串变量量,变量量名为Test3Test3SETSTesting;将该变变量赋值值为Tes
5、ting2、LCLA、LCLL和和LCLS语法格式式:LCLA(LCLL或或LCLS)局局部变变量名LCLA、LCLL和和LCLS伪指指令用于于定义一一个ARM程序中的局局部变量量,并将将其初始始化。其其中:LCLA伪指令令用于定定义一个个局部的的数字变变量,并并初始化化为0;LCLL伪指令令用于定定义一个个局部的的逻辑变变量,并并初始化化为F(假);LCLS伪指令令用于定定义一个个局部的的字符串串变量,并初始始化为空空;以上三条条伪指令令用于声声明局部部变量ARM指令系统统使用示例例:LCLATest4;声明明一个局局部的数数字变量量,变量量名为Test4Test3SETA0 xaa;将将该
6、变量量赋值为为0 xaaLCLLTest5;声声明一个个局部的的逻辑变变量,变变量名为为Test5Test4SETLTRUE;将将该变量量赋值为为真LCLSTest6;定定义一个个局部的的字符串串变量,变量名名为Test6Test6SETS“Testing”;将该变变量赋值值为“Testing”3、SETA、SETL和和SETS语法格式式:变量名SETA(SETL或SETS)表达式式伪指令SETA、SETL、SETS给一一个已经经定义的的全局变变量或局局部变量量赋值。SETA伪指令令用于给给一个数数学变量量赋值;SETL伪指令令用于给给一个逻逻辑变量量赋值;SETS伪指令令用于给给一个字字符串
7、变变量赋值值;其中,变变量名为为已经定定义过的的全局变变量或局局部变量量,表达达式为将将要赋给给变量的的值。使用示例例:LCLATest3;声明一一个局部部的数字字变量,变量名名为Test3Test3SETA0 xaa;将该变变量赋值值为0 xaaLCLLTest4;声明一一个局部部的逻辑辑变量,变量名名为Test4Test4SETLTRUE;将该变变量赋值值为真ARM指令系统统4、RLIST名称RLIST寄存存器列表表RLIST伪指指令可用用于对一一个通用用寄存器器列表定定义名称称,使用用该伪指指令定义义的名称称可在ARM指指令LDM/STM中中使用。在LDM/STM指令令中,列列表中的的寄
8、存器器访问次次序为根根据寄存存器的编编号由低低到高,而与列列表中的的寄存器器排列次次序无关关。RLIST使用示例例:RegListRLISTR0-R5,R8,R10将寄存器器列表名名称定义义为RegList,可在ARM指指令LDM/STM中中通过该该名称访访问寄存存器列表表。例:RegListRLISTr1-r13;必须顶格格开始写写LDMIAr0,RegList4.1.2数数据定定义(Data Definition)伪指令令数据定义义伪指令令一般用用于为特特定的数数据分配配存储单单元,同同时可完完成已分分配存储储单元的的初始化化。常见见的数据据定义伪伪指令有有如下几几种:DCB用用于分分配一
9、片片连续的的字节存存储单元元并用指指定的数数据初始始化。DCW(DCWU)用用于分配配一片连连续的半半字存储储单元并并用指定定的数据据初始化化。DCFD(DCFDU)用于为为双精度度的浮点点数分配配一片连连续的字字存储单单元并用用指定的的数据初初始化。ARM指令系统统DCFS(DCFSU)用于于为单精精度的浮浮点数分分配一片片连续的的字存储储单元并并用指定定的数据据初始化化。DCQ(DCQU)用用于分配配一片以以8字节节为单位位的连续续的存储储单元并并用指定定的数据据初始化化。DCD(DCDU)用用于分配配一片连连续的字字存储单单元并用用指定的的数据初初始化。SPACE用用于分配配一片连连续的
10、存存储单元元MAP用用于于定义一一个结构构化的内内存表首首地址FIELD用用于定定义一个个结构化化的内存存表的数数据域1、DCB(DCB也可用“=”代代替)语法格式式:标号DCB表达式DCB伪指令用用于分配配一片连连续的字字节存储储单元并并用伪指指令中指指定的表表达式初初始化。其中,表达式式可以为为0255的的数字或或字符串串。使用示例例:StrDCBThisisa test!;分配一片片连续的的字节存存储单元元并初始始化。2、DCD(或DCDU,DCD也可用“&”代代替)语法格式式:标号DCD(或DCDU)表达式DCD(或DCDU)伪指令用用于分配配一片连连续的字字存储单单元并用用伪指令令中
11、指定定的表达达式初始始化。其其中,表表达式可可以为程程序标号号或数字字表达式式。用DCD分配的字字存储单单元是字字对齐的的,而用DCDU分配的字字存储单单元并不不严格字字对齐。使用示例例:DataTestDCD4,5,6;分配一片片连续的的字存储储单元并并初始化化。3、SPACE(SPACE也可用“”代代替)语法格式式:标号SPACE表达式SPACE伪指令用用于分配配一片连连续的存存储区域域并初始始化为0。其中中,表达达式为要要分配的的字节数数。使用示例例:DataSpaceSPACE100;分配连续续100字节的的存储单单元并初初始化为为0。4、MAP,MAP也可用用“”代替。语法格式式:M
12、AP表表达达式,基址寄寄存器MAP伪伪指令用用于定义义一个结结构化的的内存表表的首地地址。表达式可可以为程程序中的的标号或或数学表表达式,基址寄寄存器为为可选项项,当基基址寄存存器选项项不存在在时,表表达式的的值即为为内存表表的首地地址,当当该选项项存在时时,内存存表的首首地址为为表达式式的值与与基址寄寄存器的的和。MAP伪指令通通常与FIELD伪指令配配合使用用来定义义结构化化的内存存表。使用示例例:MAP0 x100,R0;定义结构构化内存存表首地地址的值值为0 x100R0。5、FILEDFILED也可用用“#”代替。语法格式式:标号FIELD表表达式式FIELD伪指指令用于于定义一一个
13、结构构化内存存表中的的数据域域。表达式的的值为当当前数据据域在内内存表中中所占的的字节数数。FIELD伪指指令常与与MAP伪指令令配合使使用来定定义结构构化的内内存表。MAP伪指令令定义内内存表的的首地址址,FIELD伪指令令定义内内存表中中的各个个数据域域,并可可以为每每个数据据域指定定一个标标号供其其他的指指令引用用。注意MAP和FIELD伪指令仅仅用于定定义数据据结构,并不实实际分配配存储单单元。使用示例例:MAP0 x100;定义结构构化内存存表首地地址的值值为0 x100。AFIELD16;定义A的长度为为16字字节,位位置为0 x100BFIELD32;定义B的长度为为32字字节,
14、位位置为0 x110SFIELD256;定义S的长度为为256字节,位置为为0 x130s3c44b0 xARM芯片的初初始化源源程序:AREA RamData, DATA, READWRITE (_IRQ_BASEADDRESS);即MAPHandleReset#4; #即DCDHandleUndef#4HandleSWI#4HandlePabort#4HandleDabort#4HandleReserved#4HandleIRQ#4HandleFIQ#44.1.3汇汇编控控制伪指指令汇编控制制伪指令令用于控控制汇编编程序的的执行流流程常用的汇汇编控制制伪指令令包括:IF、ELSE、ENDI
15、FWHILE、WENDMACRO、MENDMEXITARM指令系统统1IF、ELSE、ENDIF(等价价于 |)语法格式式:IF逻逻辑表达达式指令序列列1ELSE指令序列列2ENDIFIF、ELSE、ENDIF伪指令令能根据据条件的的成立与与否决定定是否执执行某个个指令序序列。当当IF后后面的逻逻辑表达达式为真真,则执执行指令令序列1,否则则执行指指令序列列2。其其中,ELSE及指令令序列2可以没没有,此此时,当当IF后后面的逻逻辑表达达式为真真,则执执行指令令序列1,否则则继续执执行后面面的指令令。IF、ELSE、ENDIF伪指令令可以嵌嵌套使用用。使用示例例:GBLLTest;声明一一个全
16、局局的逻辑辑变量,变量名名为TestIFTest =TRUE指令序列列1ELSE指令序列列2ENDIFs3c44b0 xARM芯片的的初始化化源程序序:GBLLTHUMBCODE;global logicalvariable, init. to false CONFIG =16;=if,CONFIG:build-invariabledefinedbyARM;assembler,16=assembingThumbcode.THUMBCODESETLTRUE;SETL:setthe logic variableCODE32;changingfrom Thumb state to Armstate|
17、;|=elseTHUMBCODESETLFALSE;=endif2、WHILE、WEND语法格式式:WHILE逻逻辑表达达式指令序列列WENDWHILE、WEND伪指令令可以嵌嵌套使用用。WHILE、WEND伪指令令能根据据条件的的成立与与否决定定是否循循环执行行某个指指令序列列。当WHILE后面面的逻辑辑表达式式为真,则执行行指令序序列,该该指令序序列执行行完毕后后,再判判断逻辑辑表达式式的值,若为真真则继续续执行,一直到到逻辑表表达式的的值为假假。使用示例例:GBLACounter;声明一一个全局局的数学学变量,变量名名为CounterCounterSETA3;由变量量Counter控制制
18、循环次次数WHILECounter 10指令序列列WEND3、MACRO、MEND语法格式式:MACRO$标号宏宏名$参数1,$参参数2,指令序列列MENDMACRO、MEND伪指令令可以将将一段代代码定义义为一个个整体,称为宏宏指令,然后就就可以在在程序中中通过宏宏指令多多次调用用该段代代码。其其中,$标号在在宏指令令被展开开时,标标号会被被替换为为用户定定义的符符号;宏指令可可以使用用一个或或多个参参数,当当宏指令令被展开开时,这这些参数数被相应应的值替替换。MACRO、MEND伪指令令可以嵌嵌套使用用。s3c44b0 x初始始化程序序里的例例子:MACRO$HandlerLabelHAN
19、DLER$HandleLabel$HandlerLabelsubsp,sp,#4stmfdsp!,r0ldrr0,=$HandleLabelldrr0,r0strr0,sp,#4ldmfdsp!,r0,pcMENDHandlerEINT4567HANDLERHandleEINT4567将被汇编编成如下下语句:HandlerEINT4567subsp,sp,#4stmfdsp!,r0ldrr0,=HandleEINT4567;ldrr0,r0strr0,sp,#4ldmfdsp!,r0,pcHandleEINT4567的定定义: (_IRQ_BASEADDRESS+0 x100)HandleAD
20、C#4.HandleEINT4567#4图1执行subsp,sp,#4时时堆栈的的情况图2执行stmfdsp!,r0,将R0压入入堆栈后缀“!”表示示最后的的地址写写回到sp中中图3执行strr0,sp,#4,将R0压入入堆栈(R0)=HandleXXX处处的内容容,不改改变SP的值。图4ldmfdsp!,r0,pc;弹出两个个字,分分别送到到R0,PC4、MEXIT语法格式式:MEXITMEXIT用于于从宏定定义中跳跳转出去去。ARM指令系统统4.1.6其其他常常用的伪伪指令还有一些些其他的的伪指令令,在汇汇编程序序中经常常会被使使用,包包括以下下几条:AREAALIGNCODE16、COD
21、E32ENTRYENDEQUEXPORT(或GLOBAL)IMPORTEXTERNGET(或INCLUDE)INCBIN RNROUT1、AREA语法格式式:AREA段名名属属性性1,属属性2,AREA伪指令令用于定定义一个个代码段段或数据据段。其其中,段段名若以以数字开开头,则则该段名名需用“|”括括起来,如|1_test|。属性字段段表示该该代码段段(或数数据段)的相关关属性,多个属属性用逗逗号分隔隔。常用用的属性性如下:CODE属性:用用于定义义代码段段,默认认为READONLY。DATA属性:用用于定义义数据段段,默认认为READWRITE。READONLY属性:指指定本段段为只读读,
22、代码码段默认认为READONLY。READWRITE属性:指指定本段段为可读读可写,数据段段的默认认属性为为READWRITE。ALIGN属性:使使用方式式为ALIGN 表达达式。在在默认时时,ELF(可可执行连连接文件件)的代代码段和和数据段段是按字字对齐的的,表达达式的取取值范围围为031,相应的的对齐方方式为2表达式式次方。This is notthesameastheway thattheALIGNdirectiveisspecified.Donotuse ALIGN=0orALIGN=1forcodesections. 使用示例例:AREAInit,CODE,READONLY;该伪指
23、指令定义义了一个个代码段段,段名名为Init,属性为为只读 AREAMyDATA,DATA,READONLY,ALIGN=14;(以214字节对齐齐.)2、ALIGN语法格式式:ALIGN表达式式,偏偏移量ALIGN伪指指令可通通过添加加填充字字节的方方式,使使当前位位置满足足一定的的对其方方式|。其中,表表达式的的值用于于指定对对齐方式式,可能能的取值值为2的的幂,如如1、2、4、8、16等。若未指定定表达式式,则将将当前位位置对齐齐到下一一个字的的位置。偏移量也也为一个个数字表表达式,如果不不是用在在AREA里的的,应该该是表表达式偏移移量.将两个字字节的数数据放在在同一个个字的第第一个字
24、字节和第第四个字字节中,带offset的的ALIGN对对齐:AREAoffsetFxample,CODEDCB0 x31;第一个个字节保保存0 x31ALIGN4,3;字对齐齐DCB0 x32;第四四个字节节保存0 x32内容是:0 x32000031上面的语语句ALIGN 4,3意义义是:字字对齐,然后再再加上偏偏移3ExamplesAREA cacheable,CODE,ALIGN=3rout1; code;aligned on 8-byteboundary; codeMOVpc,lr;aligned onlyon4-byte boundaryALIGN8 ;now alignedon8-
25、byte boundaryrout2;code3、CODE16、CODE32语法格式式:CODE16(或CODE32)CODE16伪伪指令通通知编译译器,其其后的指指令序列列为16位的Thumb指令令。CODE32伪伪指令通通知编译译器,其其后的指指令序列列为32位的ARM指指令。若在汇编编源程序序中同时时包含ARM指指令和Thumb指令令时,可可用CODE16伪指指令通知知编译器器其后的的指令序序列为16位的的Thumb指指令,CODE32伪伪指令通通知编译译器其后后的指令令序列为为32位位的ARM指令令。因此此,在使使用ARM指令令和Thumb指令混混合编程程的代码码里,可可用这两两条伪指
26、指令进行行切换注意:他们只通通知编译译器其后后指令的的类型,并不能能对处理理器进行行状态的的切换。AREAInit,CODE,READONLYCODE32;通知编编译器其其后的指指令为32位的的ARM指令LDRR0,NEXT1;将跳转转地址放放入寄存存R0BXR0;程序跳跳转到新新的位置置执行,并将处处理器切切换到Thumb工作作状态CODE16;通通知编译译器其后后的指令令为16位的Thumb指令令NEXTLDRR3,0 x3FFEND;程程序结束束4、ENTRY语法格式式:ENTRYENTRY伪指指令用于于指定汇汇编程序序的入口口点。在在一个完完整的汇汇编程序序中至少少要有一一个ENTRY
27、(也可可以有多多个,当当有多个个ENTRY时时,程序序的真正正入口点点由链接接器指定定),但但在一个个源文件件里最多多只能有有一个ENTRY(可可以没有有)。使用示例例:AREAInit,CODE,READONLYENTRY;指定应应用程序序的入口口点5、END语法格式式:ENDEND伪伪指令用用于通知知编译器器已经到到了源程程序的结结尾,用于指示示汇编编编译器源源文件已已结束.每一个个汇编源源文件均均要使用用一个.使用示例例:AREAInit,CODE,READONLYEND;指指定应用用程序的的结尾6、EQU,可用“*”代替替。语法格式式:名称EQU表达达式,类型名称必须顶格格写EQU伪伪
28、指令用用于为程程序中的的常量、标号等等定义一一个等效效的字符符名称,类似于于C语言言中的define。名称为EQU伪伪指令定定义的字字符名称称,当表表达式为为32位位的常量量时,可可以指定定表达式式的数据据类型,可以有有以下三三种类型型:CODE16、CODE32和DATA使用示例例:TestEQU50;定定义标号号Test的值值为50AddrEQU0 x55,CODE32;定义Addr的值为为0 x55,且且该处为为32位位的ARM指令令。7、EXPORT(或GLOBAL)语法格式式:EXPORT标标号号WEAKEXPORT伪伪指令用用于在程程序中声声明一个个全局的的标号,该标号号可在其其他
29、的文文件中引引用。EXPORT可可用GLOBAL代替替。标号在程程序中区区分大小小写WEAK选选项声明明其他的的同名标标号优先先于该标标号被引引用。使用示例例:AREAInit,CODE,READONLYEXPORTStest;声明一一个可全全局引用用的标号号StestEND8、IMPORT语法格式式:IMPORT标标号号WEAKIMPORT伪伪指令用用于通知知编译器器要使用用的标号号在其他他的源文文件中定定义,但但要在当当前源文文件中引引用,而且无论论当前源源文件是是否引用用该标号号,该标标号均会会被加入入到当前前源文件件的符号号表中。WEAK选选项表示示当所有有的源文文件都没没有定义义这样
30、一一个标号号时,编编译器也也不给出出错误信信息,在在多数情情况下将将该标号号置为0,若该该标号为为B或BL指令令引用,则将B或BL指令置置为NOP操作作。使用示例例:AREAInit,CODE,READONLYIMPORTMain;通知编译译器当前前文件要要引用标标号Main,但Main在在其他源源文件中中定义END9、EXTERN语法格式式:EXTERN标标号号WEAKEXTERN伪伪指令用用于通知知编译器器要使用用的标号号在其他他的源文文件中定定义,但但要在当当前源文文件中引引用,如果当前前源文件件实际并并未引用用该标号号,该标标号就不不会被加加入到当当前源文文件的符符号表中中。使用示例例
31、:AREAInit,CODE,READONLYEXTERNMain;通通知编译译器当前前文件要要引用标标号Main,但Main在在其他源源文件中中定义END10、GET(或INCLUDE)语法格式式:GET文文件件名GET伪伪指令用用于将一一个源文文件包含含到当前前的源文文件中,并将被被包含的的源文件件在当前前位置进进行汇编编处理。使用方法法与C语语言中的的“include”相似。GET伪伪指令只只能用于于包含源文件,包含目目标文件件需要使使用INCBIN伪指指令使用示例例:AREAInit,CODE,READONLYGETa1.s;通通知编译译器当前前源文件件包含源源文件a1.sGETC:a
32、2.s;通通知编译译器当前前源文件件包含源源文件C:a2.s END11、INCBIN语法格式式:INCBIN文文件件名INCBIN伪伪指令用用于将一一个目标标文件或或数据文文件包含含到当前前的源文文件中,被包含含的文件件不作任任何变动动的存放放在当前前文件中中,编译译器从其其后开始始继续处处理。使用示例例:AREAInit,CODE,READONLYINCBINa1.dat;通知编编译器当当前源文文件包含含文件a1.datINCBINC:a2.txt;通知编译译器当前前源文件件包含文文件C:a2.txtEND12、RN语法格式式:名称RN表表达达式RN伪指指令用于于给一个个寄存器器定义一一个
33、别名名。采用用这种方方式可以以方便程程序员记记忆该寄寄存器的的功能。其中,名称为为给寄存存器定义义的别名名,表达达式为寄寄存器的的编码。名称必须须顶格写写.使用示例例:TempRNR0;将R0定义一一个别名名Temp13、ROUT语法格式式:名称ROUTROUT伪指令令用于给给一个局局部变量量定义作作用范围围。在程程序中未未使用该该伪指令令时,局局部变量量的作用用范围为为所在的的AREA,而而使用ROUT后,局局部变量量的作为为范围为为当前ROUT和下一一个ROUT之之间。14、NOP语法格式式:NOP空操作,不影响响CPSR中的的条件标标志位4.4汇汇编语语言程序序格式1)在ARM(Thumb)汇编语语言程序序中,以以程序段段为单位位组织代代码。2)段是是相对独独立的指指令或数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年高考地理百校联考冲刺考试卷及答案(八)
- 2026年低压电工职业资格证考试卷及答案(十五)
- 广告学:理论、方法与实务课件 第4章 广告调查
- 2026年妇科腔镜手术护理配合课件
- 当前经济与政策思考:看多中国经济的核心理由资金流动(以及全球资本再平衡)
- 核心素养背景下高三学优生精准提分策略探究
- 产品设计迭代与用户需求整合模板
- 紧急救援服务保障承诺书9篇
- 电子支付技术与支付系统开发全解析
- 电子信息工程师电路设计指导书
- FTTR介绍教学课件
- 办公设备维保服务质量标准与保证措施
- 广州市规划课题申报书
- 2025年日照市中考化学试题(含答案)
- 传播理论课件
- 联合国粮农组织(FAO):2025年构建韧性粮食体系研究报告
- 消除艾滋病、梅毒和乙肝母婴传播乡村医生培训会-课件
- 辣椒课件教学课件
- DBJ51-T 252-2024 四川省城市综合管廊检测与评估技术标准
- 人工智能+行动高校人工智能+人才培养模式创新研究报告
- 手外伤课件教学课件
评论
0/150
提交评论