汇编语言程序设计(第4版)pdf/doc/txt格式电子书下载
本站仅展示书籍部分内容
如有任何咨询
请加微信10090337咨询
书名:汇编语言程序设计(第4版)pdf/doc/txt格式电子书下载
推荐语:
作者:钱晓捷编
出版社:电子工业出版社
出版时间:2012-06-01
书籍编号:30466912
ISBN:9787121170133
正文语种:中文
字数:167216
版次:4
所属分类:教材教辅-大学
版权信息
书名:汇编语言程序设计(第4版)
作者:钱晓捷
ISBN:9787121170133
版权所有 · 侵权必究
第4版前言
本书以Intel 80x86指令系统和MASM 6.x为主体,在个人微机的MS-DOS和Windows操作系统平台上,依据循序渐进的原则,以浅显的语言、清晰的结构、丰富的实例,全面而系统地介绍整数指令、浮点指令、多媒体指令的汇编语言程序设计方法,以及汇编语言的模块化开发、32位Windows应用程序的编写、与C/C++混合编程等高级技术。全书共10章,分为前5章的基础部分和后5章的提高部分。
第1章总结性地给出进行汇编语言程序设计所需要学习的基本知识,包括微型计算机系统的软件和硬件组成、数据表示,并重点展开8086通用寄存器和寻址方式。
第2章详尽地讲述8086微处理器整数指令的功能和使用,并引导读者正确书写每条指令、理解程序段的功能,以及编写常见问题的汇编语言程序。
第3章结合汇编语言源程序格式,引出程序开发、语句格式、常用伪指令和操作符、段定义等内容。
第4章以程序设计技术为主线,结合大量的程序实例详述顺序、分支、循环、子程序结构的汇编语言程序设计方法。
第5章介绍汇编语言的高级程序设计技术,包括MASM的高级语言特性、宏结构程序、模块化程序设计和I/O程序设计。
第6章首先将16位指令及编程扩展到32位环境,其次介绍新增整数指令及其应用,最后重点展开利用汇编语言编写32位Windows控制台和窗口应用程序的开发环境和基本方法。
第7章讨论汇编语言与高级语言Turbo C和Visual C++的混合编程,并说明如何利用汇编语言优化C++代码,以及利用Visual C++集成环境开发汇编语言程序的方法。
第8章介绍Intel 80x87浮点数据格式、浮点指令及其程序设计方法。
第9章介绍MMX、SSE、SSE2和SSE3多媒体指令及其编程方法。
第10章简介Intel 64结构的64位指令。
每章最后配有相当数量的习题,既可以作为课后作业,也可以作为上机练习。
附录内容包括:详解DEBUG调试程序,可用于配合前5章,尤其是第1章和第2章寻址方式、指令功能、程序片段的学习;介绍CodeView调试程序的使用方法,用于第3章以后进行源程序级的程序调试;提供汇编程序MASM 6.11的伪指令、Intel 80x86整数指令和常见汇编错误列表;与本教材配套的输入/输出子程序库的使用说明。
本书特点
本书自2000年出版以来获得广大师生读者好评,第3版(书名为《新版汇编语言程序设计》)被评为普通高等教育“十一五”国家级规划教材。主编以此书为教材主持的“汇编语言程序设计”课程为教育部-微软精品课程和河南省精品课程(网址:http://jpkc.zzu.edu.cn/hbyycai/)。总结教学经验和改革思路,结合师生反馈,我们在前3版基础上,编写了本书,并保持了原来的诸多特点。
1.知识全面
本书的编写参照国内高校和自学考试“汇编语言程序设计”课程的本、专科教学大纲,兼顾相关专业教学要求,既满足当前教学需求,又面向今后改革方向。
本书全面讲解80x86指令系统及编程,除完整的8086指令外,还包括32位指令、浮点指令、多媒体指令。本书不仅介绍基本的汇编语言程序设计知识,还介绍高级汇编语言程序设计技术,如开发大型程序需要的模块化方法、实际应用当中的混合编程实用技术、32位Windows应用程序编写等。
本书采用微软的MASM 6.15汇编程序,以简化段定义源程序格式为主,兼顾完整段定义源程序格式,涉及DOS和Windows操作系统平台的汇编语言程序设计。
2.教材实用
本书示例中的指令、程序段和完整的源程序都经过验证,能够运行通过。本书经过3个版本、11年的使用时间,已经发现并纠正了绝大多数错误。
本书采用浅显、明晰、循序渐进的描述方法,具有前后对照、贯穿始终的风格,加上清晰的结构、丰富的示例,使得本书既适合课堂教学,又适合读者自学。
配合本书,作者制作有精美的多媒体电子教案(PowerPoint演示文档),为教师利用现代化教学手段提供方便。同时,作者还维护“大学微机技术系列课程教学辅助网站”(钱晓捷之微辅网http://www2.zzu.edu.cn/qwfw)。网站主要就“汇编语言程序设计”和“微机原理及接口技术”课程提供有关教学课件、教材勘误、疑难解答、补充资料等辅助资源,是本书的动态延伸。微辅网还设置有教学论坛,让学生在课外学习中获得帮助。
3.突出实践
本书特别强调上机实践,不仅在正文中引导读者通过调试程序或者带输出结果的源程序理解指令、程序功能,各章还配有丰富的习题和上机练习题;附录介绍调试程序的使用方法、调试指令和程序的步骤。
本书的结构安排适合尽早上机实践,并将实践过程贯穿始终。第1章引出MASM开发软件包,可用于熟悉命令行MS-DOS基本操作(基于Windows),第2章充分利用调试程序学习指令功能和调试程序段,第3章引出完整的源程序格式,并给出程序开发方法。后续章节通过大量程序强化编程开发,还介绍了开发Windows应用程序的MASM32环境、利用Visual C++开发调试汇编语言程序的方法。
写给教师
“汇编语言程序设计”的教学内容在高校相关学科的教学中有两种处理方式。一种作为独立的课程,这主要是用在计算机专业的本科、专科教学中;而在电子、通信、自动控制等专业则将汇编语言作为主体融入微机原理课程。本书内容自成一个相对完整的知识体系,适合作为独立课程的教材,也可以作为微机原理课程的参考书和补充教材。
传统上,“汇编语言程序设计”课程在MS-DOS操作系统平台上,采用微软的MASM汇编程序,介绍16位8086微处理器指令系统的程序设计。当前,有些院校已将汇编语言的教学重点转向32位IA-32微处理器指令系统,操作系统平台也过渡为Windows。同时,也出现在Linux环境下的汇编语言课程。针对不同层次、不同专业的学习,“汇编语言程序设计”课程教学进行了多方面的改革,形成了多元化的教学方案。
本书从简单的16位汇编语言入手,使其满足当前教学要求(包括与“微型机原理”或“微机接口技术”等课程的配合);在32位汇编语言展开许多深入的内容,使其面向以后的应用需求。本书在组织教学内容上,体现了许多新的理念。例如,没有从纯软件角度介绍汇编语言,教学的重点是硬指令而不是伪指令,强调程序设计不是程序格式,引出实用技术但淡化具体应用,通过程序实例和上机实践掌握程序设计方法,而不是通过大量细节的描述讲解程序设计。
汇编语言的基本语句是处理器指令。对于Intel 80x86系列微处理器,由于其属于复杂指令集计算机CISC,再加上几十年发展的历史沉淀,因此它的指令系统非常庞大和复杂。虽然作为本书的一个特色,介绍了Pentium 4及之前处理器的所有指令,但教材的重点教学内容却是常用的简单指令,全书的实例程序也主要采用各种处理器指令系统所共有的基本指令编写。作为教师,尤其应该注意这个问题,否则许多学生会面对繁杂的指令望而却步、失去进一步学习的兴趣。
各种高级语言程序设计的教学中,调试程序及程序的调试方法往往被忽略或回避,但作为低级程序语言的汇编语言不应避而不谈。在汇编语言的教学过程中,可以利用调试程序的单步执行和断点执行能力,直观地理解指令和程序的功能,进而掌握程序的动态调试和排错。对于专科层次或程度较低的学生,掌握调试程序本身就是一个似乎不可逾越的难关。一方面,教师可以通过多媒体教学手段,演示调试程序的使用;本书也配套制作了相关演示动画、记录了指令调试和程序开发过程(可以通过本书的教学网站下载);学生通过上机实践学习调试程序。另一方面,本书自编了一个显示输出和键盘输入的I/O子程序库,教师和学生可以直接使用其中的子程序来编写具有显示结果的源程序,同时还可以配合列表文件,暂时避开调试程序这个难点。这个I/O子程序库还可以作为一个教学案例,用于组织学习中有余力的学生围绕输入输出子程序库进行项目开发。
对于使用过本书前续版本的教师,新版教材在主体教学内容上保持了兼容,仍然遵循由浅入深、循序渐进的原则:先16位8086指令系统、基本汇编语言编程技术,然后介绍32位指令编程,并将汇编语言知识加深,从混合编程、浮点编程、多媒体编程各个角度展开。
主要的修编内容如下:
(1)基于教学实际,调整了部分内容的位置,并进行了修编(第1章标志的详解调整到第2章加减运算指令前,第1章MASM编程环境使用合并到第3章汇编语言程序的开发过程中,第2章输入/输出指令调整到第5章输入/输出程序设计前,第2章DOS功能调用调整到第3章汇编语言程序的开发过程后,第2章串操作类指令调整到第4章循环程序设计后)。
(2)基于教学需要,扩充了部分内容(第3章汇编语言程序的开发过程,附录A调试程序DEBUG,附录B调试程序CodeView的调试示例,附录E常见汇编错误信息)。
(3)基于技术发展,改写了部分内容(第1章Intel 80x86系列微处理器,第7章使用Visual C++开发汇编语言程序)。
(4)基于内容修编,调整了部分习题。另外,还对部分知识增加图表、文字等进行更详细的讲解,改正前版中的个别错误等。
有鉴于此,教师在教学过程中,应该选择基本的、常用的指令,减少16位汇编语言部分的教学内容和教学时间。这样,就有时间展开对32位汇编语言的深入内容和实用技术的学习。
写给学生
学习汇编语言到底有什么用途?这是许多学生首先要提问的。
在计算机科学与技术的知识体系当中,“汇编语言程序设计”课程的教学内容属于计算机系统结构的一个方面。汇编语言配合“计算机组成原理”和“微机原理及接口技术”等相关课程,帮助学生从软件角度理解计算机工作原理;同时,为“操作系统”、“编译原理”等课程提供必须的基础知识,也是自动控制等与硬件相关应用领域的程序设计基础。“汇编语言程序设计”课程是继“高级语言程序设计”之后的又一门计算机语言程序设计课程,但它是一种低级语言程序设计。通过汇编语言的学习,学生能够比较全面地了解程序设计语言,利于更深入地学习和应用高级语言。
随着高级语言的发展、可视化开发工具的应用,汇编语言往往被应用程序开发人员所忽略,其应用领域也逐渐萎缩。但是,作为一个面向机器的程序设计语言,汇编语言具有直接有效控制硬件的能力,能够编写出运行速度快、代码量小的高效程序,在许多场合具有不可替代的作用,例如,操作系统的核心程序段、实时控制系统的软件、智能仪器仪表的控制程序、频繁调用的子程序或动态连接库、加密解密软件、分析和防治计算机病毒,等等。
学习什么样的汇编语言呢?这是许多学生感到困惑的。
汇编语言与处理器指令系统相关,不同的处理器指令系统具有不同的汇编语言。但是,作为一个底层开发语言,它还是有许多共性的。从指令系统的典型性、实用性、编程环境以及教学内容连续性等多方面考虑,Intel 80x86指令系统作为“汇编语言程序设计”课程的主要教学内容具有显而易见的优势,理所当然地成为计算机及相关学科的首选。
日常工作和学习中广泛使用的个人微机(PC)采用Intel 80x86或与之兼容的微处理器。个人微机过去使用DOS操作系统,现在主要使用Windows或Linux操作系统,但后者具有DOS模拟环境。由于DOS操作系统平台比较简单,对程序员限制少,是一个相对理想的教学环境,所以本书也就利用这个平台展开汇编语言,选用DOS和Windows平台下最常用的微软MASM汇编程序。
许多学生总感觉16位指令、8086微处理器、DOS操作系统都是很“古老”和“陈旧”的内容,但它们实际上却是32位指令、Pentium 4微处理器、Windows或Linux操作系统的基础,都是最基本的知识。它们已经足够复杂、完全能够满足教学要求。当然,本书在提高部分也对使用32位指令编写Windows应用程序进行了详细讲解。因为有了16位汇编语言基础,这部分提高内容也就比较容易掌握了。如果直接从32位指令和Windows平台入门,往往需要大家学习很多其他内容才能够真正进入汇编语言的教学。国内外以所谓32位保护方式展开Windows汇编语言教学的教材,实际上是利用了Windows控制台环境。而Windows控制台环境的操作和外观与DOS操作系统一样,其基本教学内容几乎相同,所不同的仅仅是调用操作系统功能的方法。介绍用汇编语言编写Windows窗口应用程序的教材,都要求读者初步掌握汇编语言程序设计,并具有调用Windows应用程序接口API的编程经验(往往需要学习Visual C++之后才能够达到这个要求)。本书从基础知识入手,囊括上述所有教学内容。相信读者阅读本书后,会对此有深刻的体会。
怎样才能学好汇编语言呢?这又是许多学生深感无助的。
其实,学习汇编语言程序设计对先修知识要求不高。学生如果具备微机软件的操作能力,尤其是DOS环境和常用命令的使用,可以更好地完成上机实践(本书补充有这方面的知识,并构造一个MASM开发环境)。学生的高级语言(如C/C++或Visual Basic)程序设计知识或经验,将有助于更好地理解程序结构和混合编程。程序设计属于软件方面的内容,但由于汇编语言与硬件相关的特点,学生在计算机或微型机原理方面的知识对于深刻体会指令功能大有益处。“汇编语言程序设计”课程的相关课程是“微机原理与接口技术”,后者是微机的硬件知识,进一步加强了汇编语言在输入/输出和中断等方面的应用。两者共同为学生建立微型计算机的完整知识体系。
循序渐进的学习是对任何课程都有效的。不以循序渐进方式进行学习,往往会浪费宝贵的时间去盲目探索,最终学习到的内容可能是相对零散的知识,不能建立完整的、系统的知识结构。所以,建议学生遵循循序渐进的方法进行学习。首先,学生应理解每条常用指令的功能,能够正确书写每条指令;其次,学生通过阅读示例程序,掌握常见功能程序段的编写;再次,学生利用伪指令将程序段扩展成完整的源程序文件;随后,学生就各种程序结构编写常见问题的程序;最后,学生才编写较大型程序和有一定难度的程序。
对程序设计类课程,没有上机编程的实践是无法真正掌握的。所以,希望学生加强实践环节。学生应完成基本的上机指导编程要求,同时争取多进行编程实践,因为只有通过实际编程才能发现程序设计中的许多问题。不要轻视调试程序的作用,它是深入理解指令功能和程序执行过程的关键。请不要直接拷贝源程序代码,在一条一条语句的录入编辑过程中,就是书写正确语句、加深语句理解的绝好机会。
本书由钱晓捷主编,昝红英、穆玲玲、邱保志参与了前两版的编写和修订,关国利、张青、张行进也给予了帮助。作者对十多年来合作的同事深表谢意,大家共同的努力成就了本书、创建了精品课程。作者还要特别感谢使用本书的教师、学生和读者,是你们宝贵的意见建议和一贯支持催生了本版教材。作者非常欢迎大家通过本书的教学辅助网站(http://www2.zzu.edu.cn/qwfw)、华信教育资源网(http://www.hxedu.com.cn)或主编的电子邮件(qianxiaojie@zzu.edu.cn)进行教学交流,共同提高“汇编语言程序设计”课程的教学质量。
作 者
第1章 汇编语言基础知识
程序设计语言是开发软件的工具,它的发展经历了由低级语言到高级语言的过程。汇编语言是一种面向机器的低级程序设计语言。
汇编语言以助记符形式表示每条计算机指令,每条指令对应着计算机硬件的一个具体操作。利用汇编语言编写的程序与计算机硬件密切相关,程序员可直接对处理器内的寄存器、主存储器的存储单元及外设的端口等进行操作,从而能够有效地控制硬件。使用汇编语言编写的程序具有执行速度快、占用存储空间小的特点,这是高级语言无法替代的优势。所以,作为一个计算机专业人员,应该熟悉汇编语言,并掌握其程序设计方法。
本章介绍使用汇编语言进行程序设计所需要了解的基本知识,并引出有关基本概念。首先,介绍计算机系统的一般知识,包括计算机系统的硬件、软件及程序设计语言的发展,特别说明了汇编语言的特点和应用场合。其次,简述计算机中数据的表示,如二进制数和十六进制数、BCD码和ASCII码、补码和反码、二进制数运算等。然后,认识Intel 80x86系列微处理器和以其为核心的微机系统。最后,展开8086微处理器的结构和数据寻址,作为第2章指令系统学习的重要基础。
1.1 计算机系统概述
计算机系统分为硬件和软件两大部分。硬件(Hardware)是计算机系统的机器部分,它是计算机工作的物质基础;软件(Software)则是为了运行、管理和维护计算机而编制的各种程序的总和,广义的软件还应该包括与程序有关的文档。利用汇编语言所编写的程序是软件,但是,每条汇编语言指令都使计算机某个具体硬件部件产生相应的动作,因此,利用汇编语言进行程序设计体现了计算机硬件和软件的结合。
1.1.1 计算机的硬件
源于冯·诺依曼设计思想的计算机由五大部件组成:控制器、运算器、存储器、输入设备和输出设备。控制器是整个计算机的控制核心;运算器是对信息进行运算处理的部件;存储器是用来存放数据和程序的部件;输入设备将数据和程序变换成计算机内部所能识别和接受的信息方式,并把它们送入存储器中;输出设备将计算机处理的结果以人们能接受的或其他机器能接受的形式送出。
现代计算机在很多方面都对冯·诺依曼计算机结构进行了改进,如五大部件演变为三个硬件子系统:处理器、存储系统和输入/输出系统。处理器(Processor)也称为中央处理单元(Central Processing Unit,CPU),包括运算器和控制器,是计算机的核心部件。微型计算机中的处理器常采用一块大规模集成电路芯片构成,称为微处理器(Microprocessor),它代表着整个微型计算机系统的性能。存储系统由处理器内的寄存器(Register)、高速缓冲存储器、主存储器和辅助存储器构成层次结构。处理器和存储系统在信息处理中起主要作用,是计算机硬件的主体部分,通常被称为“主机”。输入(Input)设备和输出(Output)设备统称为外部设备(Peripheral),简称为外设或I/O设备;输入/输出系统的主体是外设,但还包括外设与主机之间相互连接的I/O接口电路。
为简化各部件的相互连接,现代计算机广泛应用总线结构,如图1.1所示。采用系统总线连接各功能部件使得计算机系统具有了组合灵活、扩展方便的特点。
图1.1 微型计算机的系统组成
1.处理器
处理器除包括运算器和控制器外,还有一些高速存储单元,即寄存器,它们提供各种操作需要的数据。高性能处理器内部非常复杂,如为了提高存取主存储器的速度而增加了高速缓冲存储器(Cache),运算器中不仅有基本的整数运算器,还有浮点处理单元甚至多媒体数据运算单元,控制器还包括存储管理单元、代码保护机制等。
2.存储器
存储器(Memory)是计算机的记忆部件,用来存放程序及所涉及的数据。存储器的内容并不因为被读出而消失,可以重复取出;只有存入新的信息后,原来的信息才会被更改。
按所起作用,存储器可以分为主存储器和辅助存储器,即主存(内存)和辅存(外存)。主存储器存放当前正在执行的程序和使用的数据,可以直接被CPU存取,由半导体存储器芯片构成,其成本高、容量小,但速度快。辅助存储器可用于长期保存大量程序和数据,CPU需要通过I/O接口访问,由磁盘或光盘构成,成本低、容量大,但速度较慢。在计算机系统中,主存的容量是有限的,需要辅存来补充;辅存的容量比主存大得多,但存取速率比主存慢得多。一般来说,程序和数据以文件的形式保存在辅存中,只有在用到它们时,才从辅存读到主存的某个区域中,由中央处理单元控制执行。
按读/写能力,存储器可以分为随机存取存储器RAM和只读存储器ROM。CPU可以从RAM读出信息,也可以向RAM写入信息,所以RAM也被称为读/写存储器;而ROM中的信息只能被读出,不能被修改。RAM型半导体存储器可以按地址随机读/写,但断电后不能保存信息;ROM型半导体存储器通常只能被读出,在断电后仍能保存信息。磁盘存储器是可读可写的,而CD-ROM光盘是只读的,这两种存储器都是辅存,都可以长期保存数据,但它们的存取速率都慢于半导体存储器。
主存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是每个存储单元就有了一个唯一的存储器地址(Address)。每个存储单元存放1字节的数据。1字节(byte,B)包含8个二进制位(bit,b)。
存储容量是指存储器所具有的存储单元个数,其基本单位是字节(B)。为了表达更大的容量,常用的单位有KB(千字节)、MB(兆字节)、GB(吉字节)甚至TB(太字节)。1KB=210B=1024B,1MB=220B,1GB=230B,1TB=240B。
3.外部设备
外部设备是实现人机交互和机间通信的一些机电设备。在微机系统中,常用的输入设备有键盘、鼠标器等,输出设备有显示器、打印机等;起辅存作用的磁盘和光盘也是以外设的形式连接到系统中的,可以认为它们既是输入设备也是输出设备。
由于外设的种类繁多、工作原理各异,所以每个外设必须通过输入/输出接口(I/O接口)电路与系统连接。程序员所见的I/O接口由一组寄存器组成。为了区别它们,对每个寄存器进行了编号,形成I/O地址,通常被称为I/O端口(Port)。系统实际上就是通过这些端口与外设进行通信的。
4.系统总线
总线(Bus)是用于多个部件相互连接、传递信息的公共通道,物理上就是一组公用导线。例如,处理器芯片的对外引脚(Pin)常被称为处理器总线。这里的系统总线(System Bus)是指计算机系统中主要的总线,如处理器与存储器和I/O设备进行信息交换的公共通道。
对汇编语言程序员来说,处理器、存储器和外部设备依次被抽象为寄存器、存储器地址和输入/输出地址,因为编程过程中将只能通过寄存器和地址实现处理器控制、存储器和外设的数据存取与处理等操作。
1.1.2 计算机的软件
软件是计算机系统的重要组成部分,可以使机器更好地发挥其功能。软件可分为系统软件和应用软件。
1.系统软件
系统软件是指为了方便使用、维护和管理计算机系统而编制的一类软件及其文档,包括操作系统、语言翻译程序等。系统软件是面向计算机系统的、通常由计算机厂家提供的程序及其文档,是用户使用计算机时为产生、准备和执行用户程序所需的程序。
在系统软件中,最重要的软件是操作系统。操作系统负责管理整个系统的软件、硬件资源,向用户提供交互的界面,为所有其他程序的运行打下基础。用户借助操作系统使用计算机系统,程序员也要采用操作系统提供的驱动程序编写用户程序。
程序员采用某种程序设计语言编写源程序,利用语言翻译程序将源程序转变成可运行的程序。例如,本书介绍用汇编语言设计源程序的方法,但必须利用“汇编程序”完成源程序的翻译工作。高级语言则采用编译类或解释类程序来完成这个工作。
2.应用软件
应用软件是解决某一问题的程序及其文档,覆盖了计算机应用的所有方面,每个应用都有相应的应用程序。
微机系统具有多种多样的应用软件。例如,进行程序设计时要采用文本编辑软件编写源程序,带有丰富格式的字处理软件帮助用户书写文章,排版软件则用于书刊出版。
大型的程序设计项目往往要借助软件开发工具(包)。这个开发工具是进行程序设计所用到的各种软件的有机集合,所以也被称为集成开发环境,包括文本编辑器、语言翻译程序、用于形成可执行文件的连接程序,以及进行程序排错的调试程序等。
1.1.3 计算机的程序设计语言
程序设计语言有很多,可以分为低级语言和高级语言。低级语言有机器语言和汇编语言,高级语言有C/C++、Java、BASIC等。
1.机器语言
计算机能够直接识别的是二进制数0和1组成的代码。机器指令(Instruction)就是用二进制编码的命令,一条机器指令控制计算机完成一个操作。每种处理器都有各自的机器指令集,某处理器支持的所有指令的集合就是该处理器的指令集(Instruction Set)。指令集及使用它们编写程序的规则被称为机器语言(Machine Language)。
用机器语言形成的程序是计算机唯一能够直接识别并执行的程序,用其他语言编写的程序必须经过翻译,转换成机器语言程序,所以机器语言程序常称为目标程序(或目的程序)。
机器指令一般由操作码(Opcode)和操作数(Operand)构成。操作码表明
....
本站仅展示书籍部分内容
如有任何咨询
请加微信10090337咨询