




已阅读5页,还剩215页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理与接口技术 清华大学出版社 2013年 4月 24日 第 4章 汇编语言程序设计 微机原理与接口技术 清华大学出版社 2013年 4月 24日 第 4章 汇编语言程序设计 本章要点 编语言与汇编程序 指令及其应用 编语言属性操作符 32 位汇编语言与 C+语言混合编程 微机原理与接口技术 清华大学出版社 2013年 4月 24日 编语言与汇编程序 程序员用各种编程语言编写指令以指挥计算机工作。计算机程序由一系列指令序列组成。计算机通过对每条指令的译码和执行来完成相应的操作。指令必须以二进制代码的形式存放在内存中,才能够被计算机所识别和理解,并加以执行。由二进制代码表示的指令称为机器指令,相应的程序称为机器语言程序。 任何计算机所能直接理解的语言只有其本身的机器语言 (机器语言是特定计算机的自然语言,由计算机的硬件设计定义。机器语言通常由一系列数字组成 (最终简化 0和 1),让计算机一次一个地执行最基本的操作。机器语言程序由 0、 1二进制代码组成,非常繁琐、难于编程和记忆。随着计算机越来越普及,机器语言编程对大多数程序员显然太慢、太繁琐。程序员不用计算机直接理解的一系列数字,而是用类似英文缩写的助记符 (表示计算机的基本操作,这些助记符构成了汇编语言(使用汇编语言编写的程序,机器不能直接识别,称为汇编器 /汇编程序 (翻译程序将汇编语言程序转换为机器语言。由此产生了用指令助记符表示的汇编语言指令,对应的程序称为汇编语言程序。汇编程序把汇编语言翻译成机器语言的过程称为汇编。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 编语言与汇编程序 【 例 4 【 例 4均在 【 例 4将 4位二进制数对应的 16进制数转换为 数在 0000应的 0-9( 30当数在 1010应的 A-F(41 步骤如下: ( 1)在 记事本 】 ( %输入如下的汇编语言程序并另存为C: ;此处输入数据段代码 x 10 此处输入代码段代码 S:S: X, S, L,x L,0 L,0 ; JB: L,07H L,30H L, ;示 H,2 1H H,4 ;带返回码结束 1H 机原理与接口技术 清华大学出版社 2013年 4月 24日 编语言与汇编程序 ( 2)单击 【 开始 】【 程序 】【 运行 】 ,在 【 打开 】 框中输入 单击 【 确定 】 。 在弹出的 C: 此命令将当前目录切换到 C: C: 上述命令将汇编语言源程序 目标代码),在 C: 微机原理与接口技术 清华大学出版社 2013年 4月 24日 编语言与汇编程序 ( 3) C: 不用附加名 如图4 R) 09 3 1992 C) 984 是否改动输出 不改就 是否需要列表文件( 不需要则 是否需要库文件,要就键入文件名,不要则 4021: no 以错误信息, no 不影响程序正常执行至此已经生成 连接程序 成以 微机原理与接口技术 清华大学出版社 2013年 4月 24日 编语言与汇编程序 ( 4)运行 如图所示,键入 看到输出的结果 A, 0的十六进制表示。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 编语言与汇编程序 ( 5)调试和查看汇编代码的机器码 在 装 默认安装路径的C:中打开 可看到如下图图 4 微机原理与接口技术 清华大学出版社 2013年 4月 24日 编语言与汇编程序 画面的左上窗口是调试器的主窗口,其显示被调试的源程序或执行代码,左下窗口是命令窗口,用户可输入各种 窗口是显示寄存器窗口,它可显示 16位寄存器的内容。在主窗口 3中,分为 3列显示,第 1列显示的是代码所在内存单元的段地址和段内偏移地址,请注意右侧寄存器 们和当前要执行的指令的段地址和偏移地址是一致的。第 2列显示的是第 3列汇编指令的相应的 16进制表示的机器指令。按快捷键 逐语句观察运行结果。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 汇编与连接 1汇编程序 汇编是把汇编语言程序翻译成机器语言描述的目标程序的过程。 汇编程序是完成汇编任务的程序。 2连接程序 连接程序的主要功能是实现多个目标文件及库文件的连接,并完成浮动地址的重定位。 从汇编语言源程序到可执行程序的生成过程如图所示。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 汇编语言与高级语言 汇编语言程序的基本单位仍然是机器指令,只是采用助记符表示,便于人们记忆。汇编语言是一种依赖于计算机微处理器的语言,每种机器都有它专用的汇编语言 (如 8086031单片机的汇编语言即不相同 ),汇编语言一般不具有通用性和可移植性。由于进行汇编语言程序设计必须熟悉机器的硬件资源和软件资源,因此具有较大的难度和复杂性。为了加速编程过程,人们开发了高级语言 (用一条语句完成大量任务。称为编译器 (翻译程序将高级语言程序变为相应的机器语言。高级语言使程序员能够编写更像英语的指令,可以包含常用的数学符号。从程序员角度看,高级语言比机器语言和汇编语言都要强得多。 C、 C+、 C#、 高级语言程序编译为相应的机器语言的过程可能需要大量时间。解释器 (序可以直接执行高级语言程序,而不必先将这些程序编译成相应的机器语言。尽管编译程序的执行速度比解释程序更快,但解释器在程序开发环境中更常用,因为增加新特性和纠正错误时经常需要重新编译程序。一旦程序开发完成,编译版本的运行最有效。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 汇编语言与高级语言 高级语言 (如 语言等是面向过程的语言,不依赖于机器,因而具有很好的通用性和可移植性,并且具有很高的程序设计效率,便于开发复杂庞大的软件系统。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 汇编语言与高级语言 既然高级语言有很多优点,为什么还要学习汇编语言呢?理由如下: 汇编语言仍然是各种系统软件(如操作系统)设计的基本语言。利用汇编语言可以设计出效率极高的核心底层程序,如设备驱动程序。迄今在许多高级应用编程中, 32位汇编语言编程仍然占有较大的市场。 用汇编语言编写的程序一般比用高级语言编写的程序执行速度快,且占内存较少。 汇编语言程序能够直接有效地利用机器硬件资源,在一些实时控制系统中更是不可代替。 学习汇编语言对于理解和掌握计算机硬件组成及工作原理十分重要,也是进行计算机应用系统设计的基础。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 汇编语言源程序的结构( 一个汇编语言源程序由若干个代码段、数据段、附加段或堆栈段组成,先看下面的例子。 【 例 4将一个 8位二进制数分成高 4位和低 4位分别转换为两个 待转换的数据及转换好的 整的汇编语言源程序如下: 微机原理与接口技术 清华大学出版社 2013年 4月 24日 1 2 3 ; 数据段定义开始 4 0101011B 5 ) 6 ; 数据段定义结束 7 8 ; 堆栈段定义开始 9 56 S) 10 $ 11 ; 堆栈段定义结束 12 13 ; 定义附加段 14 15 16 17 ; 附加段定义结束 18 微机原理与接口技术 清华大学出版社 2013年 4月 24日 19 ; 代码段定义开始 20 S: 21 ;. 22 ; 主程序开始 23 24 25 26 27 28 29 30 4 31 32 33 34 35 36 机原理与接口技术 清华大学出版社 2013年 4月 24日 37 38 39 40 $;加字符串结束标记 41 42 43 4421H 45 46H,4 471H 48 ; 主程序结束 49;. 50 ; 过程 (子程序 )定义开始 51 L,0 52 L,10 53 54 L,7 55 L, 0 56 57 ; 过程 (子程序 )定义结束 58;. 59 ; 代码段定义结束 60 61 ; 程序结束 微机原理与接口技术 清华大学出版社 2013年 4月 24日 从例 4个汇编语言源程序由若干个代码段、数据段、附加段和堆栈段组成,即程序由段结构组成。它们由段定义开始语句“ 段定义结束语句“ 定义一个段。每个段都有一个段名,段名可自行命名,如数据段的段名为“ 堆栈段的段名为“ 代码段的段名为“ 数据段和附加段用于存放变量、数据和结果,堆栈段用于执行压栈和出栈操作,以及子程序调用和参数传递,代码段则是所编制的执行程序或常数表格。各个段都由一系列语句组成。语句包括指令语句和伪指令语句。指令语句(生对应的机器代码,指定 伪指令语句 (不产生机器代码,仅仅起控制汇编过程的作用,它指定汇编器( 何种操作。 汇编器是专门把汇编语言源程序汇编成机器语言的工具软件。它通过伪指令来了解诸如“变量名列表”、“变量所在位置”、“过程名”等信息。在例 4B,们是汇编语言源程序的重要组成部分。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 汇编语言的语句格式( 汇编语言程序的每行语句由 1 4个部分组成。指令语句和伪指令语句的格式稍有区别,指令语句的标号后有冒号“:”,伪指令语句的标号后没有冒号。 指令语句的格式为 ; 标号域 指令助记符域 操作数域 注释域 伪指令语句的格式为 ; 标号域 伪指令助记符域 操作数域 注释域 微机原理与接口技术 清华大学出版社 2013年 4月 24日 语句格式中用方括号括起来的部分,是可选项,可以有也可以没有。每部分之间用空格 (至少一个 )分开,一行最多可有 132个字符。 号域,表示段名、变量名、过程名或指令符号地址等。 记符域,为指令或伪指令的助记符。 作数域,表示操作的对象,由一个或多个表达式组成,表达式与表达式之间必须用逗号“,”分开。 释域,用来说明语句的功能,以“;”开始。汇编程序对“;”以后的部分不予汇编。 指令助记符前面还可以有 前缀 。汇编程序语句中的四个域,均可以用大写、小写或大小写混合编写。 标号 (一个自行设计的标识符或名称,最多可由 31个字母、数字和特别字符 (?、 、 _、 $)等组成。但不能用数字开头 ,中间不能有空格,也不能为汇编语言的保留字。 注:保留字指有专门用途的字符或字符串,如 令助记符、伪指令助记符等。 标号一般表示变量名、段名、过程名或指令符号地址。变量名、段名和过程名由专门的伪指令语句定义,而指令符号地址则根据需要在标号域中写上,后面跟一个“:”。 在同一个汇编单位(以 ,标号域中的标号不能相同。 操作数 (以是常数、常量、变量、标号、寄存器名或表达式。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 1. 常数、常量 编程时已经确定其值,程序运行期间不会改变其值的数据对象称为常数。 8086/8088 整数、字符串、“组合 实数 (浮点数 ),但只能处理整数、字符串、“组合 不能处理实数 (浮点数 )。 常数表达式的名字称为常量。 (程序员给出的一个名或助记名作为一个确定值的标识, 其值在程序执行过程中保持不变。)常量可用伪指令说明符“ “ =”定义。 例如, A 7或 A = 7都可将常量 。 注意:伪指令说明符 “ =”左边的符号名可以重复定义。即: A 7可以: A=7A 8 (不允许)可以: A=8 微机原理与接口技术 清华大学出版社 2013年 4月 24日 汇编语言的语句格式( 汇编语言语句中出现的常数一般有 5种: (1) 二进制数( 后跟字母 B,如 10101011B。 (2) 八进制数( 后跟字母 Q,如 367Q。 (3) 十进制数( 后跟字母 9。 (4) 十六进制数( 后跟字母 H,如 03意,当数字的第一个字符是 A 字符前应添加一个数字 0,以示和变量或保留字的区别。如 0 位寄存器。 (5) 字符和字符串 字符或字符串的值是取其对应的 并用一对单引号 括起来。如字符 0,其对应的 0H。字符串 41H、 53 微机原理与接口技术 清华大学出版社 2013年 4月 24日 2. 变量、标号和寄存器名 例如,指令 示目的操作数, 示源操作数。 标号就是指令地址的名字,也称为指令的符号地址。标号定义在指令的前面 (通常是左边 ),用冒号作为分隔符。标号只能定义在代码段 (,它代表其后第一条指令的第一个字节的存储单元地址,用于说明指令在存储器中的存储位置。例如 , 在例 4 ; 主程序开始 这里, 标号有如下的属性: (1) 段基值属性: 指标号后面第一条指令所在的代码段的段基值; (2) 偏移地址属性: 指标号后面第一条指令首字节的段内偏移地址; (3) 类型属性: 也称距离属性,是指标号与引用该标号的指令之间允许距离的远、近。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 汇编语言的语句格式( 3. 表达式 由运算符连接起来的式子叫表达式,汇编程序在对其汇编时,按一定的规则对表达式进行运算后得到一个数值或一个地址。 表达式可分算术表达式、逻辑表达式、关系运算表达式、分析运算表达式和合成运算表达式。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 汇编语言的语句格式( (1) 算术表达式 算术运算符有 加( +)、减( -)、乘( *)、除( /)、求余( 算术运算表达式的最后结果仍为一个数。例如 5*8+20, 127/100, 5 等算术表达式,其结果分别为 60,1和 2。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 汇编语言的语句格式( (2) 逻辑表达式 逻辑运算符有 辑与 )、 辑或)、 辑异或)和 辑非)。 逻辑表达式的结果视情况不同而可能为 8位或 16位二进制数。 逻辑运算符与逻辑运算指令的区别在于,前者在汇编时完成逻辑运算,而后者在指令执行时完成逻辑运算。例如 10101011B 10101011B 逻辑表达式,其结果在汇编时即已确定,为 00001011B,故上述指令等价于 00001011B 微机原理与接口技术 清华大学出版社 2013年 4月 24日 汇编语言的语句格式( (3) 关系表达式 关系运算符有 于)、 等于)、于)、 于或等于)、 于 )和 于或等于)共六种。 关系运算符的两个操作数必须都是数字或同一段内的两个存储单元的地址。计算的结果为逻辑值,结果为真,表示为 0果为假,表示为 0000H。例如指令 5 其中 , 5 为关系表达式 ,该关系成立 ,结果为 0指令等价于 0机原理与接口技术 清华大学出版社 2013年 4月 24日 汇编语言的语句格式( (4) 分析运算表达式和合成运算表达式 分析运算表达式和合成运算表达式的操作对象都为存储器操作数。存储器操作数表示变量、符号地址、存储单元等。分析运算表达式把存储器操作数分解为几个部分,如分解出段值、偏移量、类型等;而合成运算表达式则把这些组成部分综合为存储器操作数。 例如,例 4 的作用为取存储器操作数(变量) 于在例 4 001H。故该指令等价于 0001H 微机原理与接口技术 清华大学出版社 2013年 4月 24日 指令及其应用 伪指令语句只是用来指示、引导汇编程序在汇编时做一些操作,它不产生机器代码,本身也不占用存储单元。 伪指令主要分为下列几类: 程序分段及存储器分配 变量定义及存储器申请 过程定义 符号定义 程序模块定义与通信 宏定义及宏调用 条件汇编 格式控制,列表及其他功能 微机原理与接口技术 清华大学出版社 2013年 4月 24日 段定义伪指令 格式如下: 段名 定位方式 组合方式 类别名 指令语句或伪指令语句 段名 机原理与接口技术 清华大学出版社 2013年 4月 24日 段定义伪指令 1段名 段名是赋予该段的一个名称,它位于 对出现,且前后必须一致。段名的取法与标号、变量名等相同。在同一个模块中,不同段的段名不能相同。 段名代表该段的段地址。例如,例 4 表示取数据段的段地址 (用段名表示 )送 后再将地址 )送数据段寄存器 微机原理与接口技术 清华大学出版社 2013年 4月 24日 段定义伪指令 2定位方式 程序的段必须连续放置在内存单元的某个区域,并占据一定的存储空间。为了对程序的段进行合理的管理,需要对段放置的起始地址进行规定,这就是定位方式的作用。有 4种定位类型: 始地址分别为( 或 1): 0000 B 0000 0000 B 分别表示以字节、字、节、页的边界为起始地址。如果缺省定位方式,则以节( 边界为起始地址。一节包含 16个连续的字节单元,一页包含 256个连续的字节单元。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 段定义伪指令 3组合方式 对于规模较大的程序,常将程序分割为多个模块。在不同的模块中,段名可以相同,组合方式的作用是指示连接程序,把同名的段按照指定的方式组合起来形成一个新的段。组合方式共有 6种。 ( 1) 示该段与其他模块的段没有任何关系,每段都有自己的基址。这是缺省方式。 ( 2) 示该段与其它模块中说明为 辑段的长度为各段长度之和。 ( 3) 示此段为堆栈段,连接时把所有 ( 4) 示该段与其它模块中所有已说明为 享的长度为模块同名段中最大长度,各共享段具有相同的段起始地址。 ( 5) 示该段应定位在所有其他段的上面。若有多个段选用 除第一个之外,其余段均作为 ( 6) 示该段按绝对地址定位,其段地址即为其后表达式的值,位移量为 0。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 段定义伪指令 4类别名 类别名必须用单引号括起来。连接程序把类别名相同的所有段放在连续的存储区域内,先出现的段放前 ,后出现的在后,但对各段不进行重新组合。一般总是定义堆栈段的类别名为 例如,例 4堆栈段可定义如下 : 表示堆栈段从节的起始地址开始存放 ,组合方式为 类别名为 微机原理与接口技术 清华大学出版社 2013年 4月 24日 5指定段内的偏移地址 常用的有 指定下一个要用的存储单元的偏移地址。 ( 1) 格式: 数表达式 指定当前可用的存储单元的偏移地址为常数表达式的值,就是将常数表达式的值送入 $。 ( 2) 格式: 将当前可用的存储单元的偏移地址调整为最近的偶数值,就是将当前可用的最小偶数偏移地址值送入 $。 例如,在下述伪指令语句序列中, 1000H A 7H, 12H, 45H B 7H 这里,指令 1000H 将 000H,从 个字节变量,占用地址 1000H、 1001002H, 003H,但 的偏移地址部分调整为偶数地址 1004H。 对于字数组,为保证其从偶地址开始,可在它前面用 操作来达到这一目的,形如: 100 ) 机原理与接口技术 清华大学出版社 2013年 4月 24日 段定义伪指令 6 前述的组合方式是把同名的段按照指定的方式组合起来形成一个新的段,而 其装入同一个物理段中,组内各段之间的跳转可视为段内跳转。格式如下: 组名 段名 , 注:组名与段名是一样的取名规则,是代表该组的段地址,格式中的段名也可用表达式 变量 或 标号 来代替,其中“ 算符表示取变量或标号的段地址 。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 偏移地址计数器 $和定位伪指令 1偏移地址计数器 $ 汇编程序在对源程序进行汇编的过程中,用偏移地址计数器 $来保存当前正在汇编的指令的偏移地址或伪指令语句中变量的偏移地址。 用户可将 $用于自己编写的源程序中。 在每个段开始汇编时,汇编程序 ( 汇编器)都将 $清为 0,以后,每处理一条指令或一个变量, $就增加一个值,此值为该指令或该变量所占的字节数。 可见, $的内容就是当前指令或变量的偏移地址。 在伪指令中, $代表其所在地的偏移地址。例如,如果 074H,则语句 A , 2, $+4, 3, 4, $+4 中的第一个 $+4的偏移地址为 A+4,第二个 $+4的偏移地址为 A+10。 汇编后: 第一个 $+4: $+4=(A+4)+4=(0074H+4)+4=007 第二个 $+4: $+4=(A+10)+4=(0074H+04=0082H 微机原理与接口技术 清华大学出版社 2013年 4月 24日 偏移地址计数器 $和定位伪指令 2 指令 过 以将位置计数器设置为新值 , 以便其后的指令性语句或数据定义语句从指定的位置处进行汇编。 数据表达式 例如,例 4将该变量改放到 0100 0100H 5机原理与接口技术 清华大学出版社 2013年 4月 24日 段寻址伪指令 用 便汇编程序能够正确汇编。 段寄存器:段名 ,段寄存器:段名 , 其中段寄存器有 个指定之间用逗号分开。例如,例 4 S: 表示 程序中没有用到附加段。 注意, 未向各个段寄存器真正赋值。要向各个段寄存器赋值,必须在程序中用指令语句实现。例如,用下列指令向 机原理与接口技术 清华大学出版社 2013年 4月 24日 过程(子程序)定义伪指令 过程即是子程序。汇编语言规定必须对过程进行定义,以确定过程的三种属性。过程的属性确定之后,就可对调用指令 定是产生近调用指令还是远调用指令。近调用时,只需将返回位置的偏移地址压栈,而远调用时,需将返回位置的偏移地址和段地址都压入堆栈。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 过程(子程序)定义伪指令 1过程的三种属性 ( 1) 段属性:过程所在段的段地址。 ( 2) 偏移量属性:过程所处位置的段内偏移地址。 ( 3) 类型属性 (过程为 过程与调用指令 名相同)。 过程与调用指令 名不同)。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 过程(子程序)定义伪指令 2过程的定义 过程定义的格式如下: 过程名 语句 过程名 其中,过程名是为该过程指定的一个名称,与变量、标号的定义规则相同。 写过程时,最后一条指令必须是返回指令 将堆栈内保存的返回地址弹出,以实现程序的正确返回。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 变量定义伪指令与存储器分配 1. 变量的三种属性 变量均有下列三种属性。 ( 1)段属性:变量所在段的段地址。如例 4们都处在同一个数据段中,故有相同的段地址。 ( 2)偏移属性:变量所处位置的段内偏移地址。例如变量 000H, 001H。 ( 3)类型属性:变量为字节、字或双字类型。 微机原理与接口技术 清华大学出版社 2013年 4月 24日 变量定义伪指令与存储器分配 变量定义符用于定义变量,也就是为变量分配存储单元并可同时预置初始值,主要包括下列几种: 定义字节型变量 定义字型变
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山西卫生健康职业学院《形体》2023-2024学年第二学期期末试卷
- 上海邦德职业技术学院《鸟类学》2023-2024学年第二学期期末试卷
- 江西卫生职业学院《中药资源学》2023-2024学年第一学期期末试卷
- 九州职业技术学院《数学建模综合实践》2023-2024学年第一学期期末试卷
- 硫酸镓在LED照明中的应用技术考核试卷
- 清扫工具制造业的产业技术创新与市场前景预测探讨考核试卷
- 水产养殖鱼类生长模型建立与应用考核试卷
- 灌溉设施在提高灌溉水质量中的应用考核试卷
- 石灰在防霉剂和干燥剂中的应用考核试卷
- 橡胶在交通运输领域的创新应用考核试卷
- 国家OTC药品目录(全部品种)
- 格力电器发展能力分析
- 人教版八年级美术下册全册完整课件
- 斯伦贝谢地质导向
- 沟槽式连接管道工程技术规程
- 境外汇款申请书样板
- 无呕病房工作要点
- 深基坑支护与开挖专项施工方案
- 林业基础知识考试复习题库(浓缩500题)
- 浅谈园林景观在乡村振兴中的应用
- 十二生英语小品剧本
评论
0/150
提交评论