第3章指令系统与寻址方式

合集下载

第三章 MCS-51单片机的寻址方式和指令系统

第三章 MCS-51单片机的寻址方式和指令系统

由此可把数据传送指令分成三部分
(一)内部数据传送(通用传送指令)
1.以A为目的操作数
MOV A,Rn MOV A,@Ri ;A← (Rn) ;A←((Ri))
双字节
11101rrr 1110011i
MOV A,direct ;A←(direct) 11100101 direct
MOV A,#data ;A←#data 例: MOV A,@R1 若(R1)=20H,(20H)=62H 结果:(A)=62H 11100100 data
指令MOVC A,@A+DPTR;执 行示意图
结果:(ACC)=64H
六、相对寻址

以当前PC的内容为基准,加上指令给出的 偏移量(rel)形成新的PC值(转移地址) 的寻址方式。
转移地址=目的地址 =当前(PC)+rel
目的地址=PC当前值十rel 目的地址=转移指令的PC值+2(或3)十rel 目的地址=转移指令地址+转移指令字节数+rel
单周期:64 双周期:45 四周期:2
若fosc=12MHz, 大多指令执行 仅1μs
按照指令的功能分5大类
一、数据传送类指令(29条) 二、算术运算类指令(24条) 三、逻辑操作类指令(24条) 四、控制转移类指令(17条) 五、位操作类指令 (17条)
在描述指令系统的功能时,常用符号介绍:
@——间址符号,如@Ri,@DPTR 13. / ——位操作数的前缀,表示对该位操作 数取反,如/bit。 14. (×)——由×寻址的单元中的内容。 15. ((X))——由X的内容作为地址的存 储单元的内容。 16. ← ——箭头右边的内容取代箭头左边的 内容。
12.
一、数据传送类指令(29条)

第3章 8086的指令系统—3.1寻址方式

第3章 8086的指令系统—3.1寻址方式
EA=[基址寄存器]+([变址寄存器] *比例因子)+位移量 BX,BP SI,DI 1 0,8,16
例:(BX)=2000H,(SI)=1000H,偏移量=0250H,
则EA= 2000H+1000H+0250H=3250H
寻址目的
确定本条指令的操作数据 在指令中 PA:存储器内的绝对地址(20位) 在存储器中 EA:某个段内的相对地址(16位) 在寄存器中 确定下一条指令的地址 根据指令长度计算 根据转移指令的目标地址
寄存器名表示其内容(操作数)
MOV AX, BX
MOV AL, BH
;AX←BX
;AL←BH
演示
第3章: 3.1.3 存储器寻址方式
操作数在主存储器中,用主存地址表示 程序设计时,8088采用逻辑地址表示主存地址
段地址在默认的或用段超越前缀指定的段寄存器中 指令中只需给出操作数的偏移地址(有效地址EA)
演示
;AX←DS:[SI+06H]
第3章:4. 基址加变址寻址方式
有效地址由基址寄存器(BX或BP)的内容加上 变址寄存器(SI或DI)的内容构成: 有效地址=BX/BP+SI/DI 段地址对应BX基址寄存器默认是DS,对应BP基 址寄存器默认是SS;可用段超越前缀改变
MOV AX, [BX+SI] MOV AX, [BX][SI]
*微型计算机汇编语言特点 *微型计算机指令系统概述 *寻址方式
指令及其格式
指令及指令集 计算机能够识别和执行的基本操作命令
指令的作用
告诉CPU干什么?What? 告诉CPU从哪儿取数据?Where? 告诉CPU下一条指令在哪儿?Where? 操作码 操作数或操作数地址 指令的格式

第3章(1) 寻址方式和指令系统

第3章(1) 寻址方式和指令系统

EA的组成不同,寻找其中的操作数的方式也随之不同。如何寻找操作数 的有效地址,进而找到所需操作数的方式就是寻址方式 因为EA的组成方式都体现在指令中,故寻址方式也可以说是在指令中获得 操作数所在地址的方法。
3.1 Pentium的寻址方式
• 指令的两个问题
– 指出进行什么操作 – 涉及的操作数和操作结果放在何处
在这种寻址方式中,操作数是在存储器中,但是,操作 数的地址的16位偏移量包含在以下四个寄存器SI、DI、 BP、BX之一中。这又可分成两种情况: 1、 BX、SI、DI间址时以DS为默认段地址; 例:MOV AX,[SI] 2、BP间址时以SS为默认段地址。 例:MOV AX,[BP]
医药信息工程学院 何永玲
二、操作数存在方式
在微型计算机中,操作数可能以以下四种方式存在:
• 操作数包含在指令中——即指令的操作数场就包含着操作数本身。
MOV AX, 1234 ; ADD AL, 2
• 操作数包含在CPU的某一个内部寄存器中—— 这时指令中的操作数场是
CPU内部 寄存器的一个编码。
MOV DS, AX
• 操 作 数 在 内 存 的 数 据 区 中 —— 这 时 指 令 中 的 操 作 数 场 包 含 着 此 操 作 数 的
医药信息工程学院 何永玲
3.2.2 算术运算指令(1-P88)
– 不带进位位的加法指令ADD
比如: ADD ADD ADD ADD 比如: ADC ADC ADC CX,1000H ;CX=CX+1000h DI,SI [BX+DI],AX EAX,[BX+2000H]
• 无符号数和有符号数采用同一套加法指令及减法 所有算术运算指令均影响状态标志。 指令有两个条件:

微机原理与接口技术:08第3章 寻址方式和指令系统3.3 习题3

微机原理与接口技术:08第3章 寻址方式和指令系统3.3 习题3

交通信息与控制工程系教案(理论教学用)课程名称微机原理与接口技术第 8 次第 4 周 2 学时上课教室WM1310 课程类型专业基础课授课对象自动化专业章节名称第三章寻址方式和指令系统(3.3)教学目的和要求1.掌握8086的基本指令,如逻辑运算和移位指令、串操作指令、程序控制指令等。

讲授主要内容及时间分配1.逻辑运算和移位指令;(35min)2.串操作指令;(20min)3.程序控制指令;(25min)4.处理器控制指令。

(10min)教学重点与难点重点:1.逻辑运算和移位指令的基本功能和格式;2.串操作指令的基本功能和格式;3.程序控制指令的基本功能和格式。

难点:逻辑运算和移位指令的基本功能和格式。

要求掌握知识点和分析方法1.逻辑运算和移位指令的格式、功能及应用方法;2.串操作指令的格式、功能及应用方法;3.程序控制指令的格式、功能及应用方法。

启发与提问1.逻辑移位和算术移位指令的区别?教学手段多媒体+板书作业布置思考题:1.远跳转和近跳转的区别?3.2, 3.53.9, 3.113.12, 3.14主要参考资料备注讲授内容三、逻辑运算和移位类1.逻辑运算逻辑运算指令对操作数的要求大多与MOV指令相同。

逻辑运算是按位操作的,它包括AND(与)、OR (或)、NOT(非)、XOR(异或)和TEST(测试)指令。

除“非”运算指令外,其余指令的执行都会使标志位OF=CF=0,AF位无定义,SF、ZF和PF 根据运算结果设置。

“与”运算指令格式:AND OPRD1,OPRD2操作:两操作数相“与”,结果送目标地址。

【例】要屏蔽AL中的高4位。

AND AL,00001111B【例】AND AL,AL此指令执行前后,(AL)无变化,但执行后使标志位发生了变化,即CF=0,OF=0。

“或”运算指令格式:OR OPRD1,OPRD2操作:两操作数相“或”,结果送目标地址【例】(AL)=0FH,OR AL,10000000B(AL)=8FH【例】OR AL,AL指令执行前后,(AL)不变,但执行后标志位发生了变化,即CF=0,OF=0。

3. 寻址方式与指令系统

3. 寻址方式与指令系统

算术运算类指令
加法指令(Addition) 带进位加法指令(Add with carry) 加1指令(Increment) 减法指令(Subtraction) 带借位减法(Subtract with borrow) 减1指令(Decrement) 求负数指令(Negative)
加法指令(Addition)
指令格式:add dest,src 功能:目的操作数和源操作数相加,其和数 存放在目的操作数中,源操作数原有内容不 变。 根据相加结果设置标志寄存器中的CF、PF、 AF、ZF、SF和OF。 Add指令可以进行字或字节操作。 对src和dest的具体内容的要求。
加法指令
Add ax,bx Add al,bl Add cx,20 Add cl,0A4h Add dl,da_byte Add da_word[si],dx 对于第四条指令,如果(cl) = 0e5h,
指令格式
双操作数指令:OPR DEST,SRC 单操作数指令:OPR DEST 无操作数指令:OPR
传送类指令
数据传送指令(move) mov dest,src 可以进行字节数据传送,也可以进行字数据 传送。 mov cl,05h ;字节传送 mov ax,1234h ;字传送 mov da_byte,12h ;字节传送 mov da_word,1234h ;字传送
位操作类指令
逻辑运算指令(Logical) 测试指令(Test) 移位/循环移位指令(shift/rotate) 处理器控制类指令
逻辑运算指令(Logical)
数据传送指令(move)
寄存器之间的传送 mov dl,cl ;字节传送 mov ax,bx ;字传送 mov ds,ax ;通用寄存器和段寄存器之间的 传送

计算机原理_3寻址方式和指令系统

计算机原理_3寻址方式和指令系统

计算机原理_3寻址方式和指令系统寻址方式和指令系统是计算机原理中非常重要的概念,它们决定了计算机能够进行的操作和数据的处理方式。

下面将从寻址方式和指令系统的概念、分类和特点三个方面详细介绍。

一、寻址方式在计算机中,寻址方式是指CPU访问内存中数据的方式。

常见的寻址方式包括直接寻址、间接寻址、变址寻址和相对寻址等。

1、直接寻址直接寻址是指通过给出数据的内存地址来访问数据。

在直接寻址中,指令中给出了待访问的内存地址,CPU直接从该内存地址中读取/写入数据。

2、间接寻址间接寻址是指通过寄存器中的地址来访问数据。

在间接寻址中,指令中给出了一个寄存器的编号,CPU将寄存器中的地址作为内存地址进行读取/写入操作。

3、变址寻址变址寻址是指通过给出基地址和偏移量来计算内存地址的方法。

在变址寻址中,指令中给出了一个基地址和一个偏移量,CPU通过将两者相加来得到最终的内存地址进行操作。

4、相对寻址相对寻址是指通过给出相对于指令计数器的偏移量来计算内存地址的方式。

在相对寻址中,指令中给出了一个偏移量,CPU将偏移量与指令计数器相加来得到最终的内存地址。

二、指令系统指令系统是指计算机可以执行的指令的集合。

根据指令的类型和功能划分,指令系统可以分为以下几种类型。

1、数据传输指令数据传输指令用于在CPU和内存、寄存器之间传输数据。

例如,将内存中的数据传送到寄存器中或将寄存器中的数据传送到内存中等。

2、算术指令算术指令用于进行数值运算,如加、减、乘、除等。

这些指令可以对寄存器或内存中的数据进行算术运算,并将结果存放在寄存器或内存中。

3、逻辑指令逻辑指令用于进行逻辑运算,如与、或、非等。

这些指令可以对寄存器或内存中的数据进行逻辑运算,并将结果存放在寄存器或内存中。

4、控制指令控制指令用于控制程序的执行流程,如跳转、条件分支等。

这些指令可以根据条件改变程序的执行顺序或跳转到指定的地址执行。

指令系统的设计需要考虑指令的种类、格式、寻址方式和作用等因素。

汇编语言第3章 指令系统和寻址方式

汇编语言第3章 指令系统和寻址方式

5.寄存器相对寻址方式(register relative addressing)
EA=基址(base) 或变址( index)+偏移量 (displacement)
基址寄存器有:BX,BP 变址寄存器有:SI,DI 注:默认段是数据段和堆栈段
(SI) 物理地址=(DS)*16+(BX)+displacement
(DI) =(SS)*16+(BP)+ (SI)+displacement (DI)
例:mov AX,ARRAY[BX][DI] (DS)=1000H,(BX)=1200H, (DI)=1000H, ARRAY=1000H 物理地址=DS*16+(BX)+(DI)+ARRAY =DS*16+1200+1000+1000=13200H 若:(13200)=34H,(13201)=12H 则,(AX)=1234H 允许段超越。 例:mov AL,ES:ARRAY[BX][DI] 用途:处理成组数据(举例说明)
2.段内间接寻址(intrasegment indirect addressing) (IP)新=EA=寄存器或存储单元的内容 寄存器:所有寄存器寻址方式可用的寄存器 存储单元:所有存储单元寻址方式均适用 例:JMP SI (IP)=(SI) JMP WORD PTR VAR或简写JMP VAR (DS)=1000H,VAR=2000H 存储单元的物理地址=(DS)*16+VAR=12000H (12000H)=1234H 则,(IP)新=1234H
4.寄存器间接寻址方式(register indirect addressing)
EA=基址(base) 或变址( index) 基址寄存器有:BX,BP 变址寄存器有:SI,DI 注:默认段是数据段和堆栈段 (SI) 物理地址=(DS)*16+(BX) (DI) =(SS)*16+(BP)

寻址方式和指令系统

寻址方式和指令系统

寻址⽅式和指令系统《微机原理》复习思考题第3章 8086的寻址⽅式和指令系统3.1 8086汇编语⾔指令的寻址⽅式有哪⼏类?⽤哪⼀种寻址⽅式的指令执⾏速度最快?3.2 直接寻址⽅式中,⼀般只指出操作数的偏移地址,那么,段地址如何确定?如果要⽤某个段寄存器指出段地址,指令中应如何表⽰?3.3 在寄存器间接寻址⽅式中,如果指令中没有具体指明段寄存器,那么,段地址如何确定?3.4 ⽤寄存器间接寻址⽅式时,BX,BP,SI,DI分别针对什么情况来使⽤?这四个寄存器组合间接寻址时,地址是怎样计算的?举例进⾏说明。

3.5 设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下⾯两条指令所进⾏的具体操作:MOV BYTE PTR [BP], 2000MOV WORD PTR [BX], 20003.6 使⽤堆栈操作指令时要注意什么问题?传送指令和交换指令在涉及内容操作数时分别要注意什么问题?3.7 下⾯这些指令中哪些是正确的?哪些是错误的?如果是错误的,请说明原因。

XCHG CS, AXMOV [BX], [1000]XCHG BX, IPPUSH CSPOP CSIN BX, DXMOV BYTE[BX], 1000MOV CS, [1000]3.8 8086系统中,当对SS和SP寄存器的值进⾏修改时,有什么特殊规定?这样做的原因是什么?[解答] 凡是遇到给SS寄存器赋值的传送指令时,系统会⾃动禁⽌外部中断,等到本条指令和下条指令执⾏之后,⼜⾃动恢复对SS寄存器赋值前的中断开放情况。

这样做是为了允许程序员连续⽤两条指令分别对SS和SP寄存器赋值,同时⼜防⽌堆栈空间变动过程中出现中断。

3.9 以下是格雷码的编码表0——0000 1——0001 2——0011 3——0010 4——01105——0111 6——0101 7——0100 8——1100 9——1101请⽤换码指令和其他指令设计⼀个程序段,实现格雷码往ASCII的转换。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.3 栈(续)
• 栈有两个基本的操作:入栈和出栈。
– 入栈:将一个新的元素放到栈顶; – 出栈:从栈顶取出一个元素。
• 栈顶的元素总是最后入栈,需要出栈时, 又最先被从栈中取出。 • 栈的操作规则:LIFO (Last In First Out,后进先出)
3.3.1 CPU提供的栈机制
• 现今的CPU中都有栈的设计。 • 8086CPU提供相关的指令来以栈的方 式访问内存空间。 • 这意味着,我们在基于8086CPU编程 的时候,可以将一段内存当作栈来使 用。
3.2.2字的传送(续)
• 问题:内存中的情况如右图,写出下面指 令执行后寄存器ax,bx,cx中的值。
• 思考后看分析。(单步跟踪)
3.2.2 字的传送(续)
3.2.2 字的传送(续)
• 问题:内存中的情况如右图,写出下面指 令执行后寄存器ax,bx,cx中的值。
• 思考后看分析。(单步跟踪)
• 是8086CPU中最关键的寄存器,它们指示了CPU当前要 读取指令的地址。
CS代码段寄存器
• 存放代码的段地址;
IP指令指针寄存器
• 存放代码的偏移地址。
3.1.1 8086PC取指过程
(1)从CS:IP指向内存单元读取指 令,读取的指令进入指令缓冲器; (2)IP = IP + 所读取指令的长度, 从而指向下一条指令;
3..1.5代码段
• 如何使得代码段中的指令被执行呢? • 将一段内存当作代码段,仅仅是我们在编 程时的一种安排,CPU 并不会由于这种安 排,就自动地将我们定义得代码段中的指 令当作指令来执行。 • CPU 只认被 CS:IP 指向的内存单元中的内 容为指令。 • 所以要将CS:IP指向所定义的代码段中的第 一条指令的首地址。 • CS = 123BH,IP = 0000H。
问题分析
3.2.3 mov、add、sub指令
• add和sub指令同mov一样,都有两个操作 对象。
• 它们可以对段寄存器进行操作吗? (请自行在Debug中试验)
3.2.4 数据段
• 前面讲过,对于8086PC机,我们可以根据 需要将一组内存单元定义为一个段。 • 我们可以将一组长度为N(N≤64K)、地 址连续、起始地址为16的倍数的内存单元 当作专门存储数据的内存空间,从而定义 了一个数据段。 • 比如我们用123B0H~123B9H这段空间来存 放数据:
见附录A
3.1.4汇编指令举例
• 数据传送指令
– Mov指令
• 算术运算指令
– Add指令 – Sub指令
• • • •
逻辑运算指令 字符串处理指令 控制与转移指令 处理机控制指令
3.2指令的存取
指令在什么地方? 指令和数据有区别吗? 怎么取下一条指令? 怎么取数据?
3.2指令的存取
CS和IP
mov 指令 还可以将一个内存单元中的内容送入 一个寄存器。
从哪个内存单元送到哪个寄存器中呢?
mov指令的格式:
• mov 寄存器名,内存单元地址
“[…]”表示一个内存单元, “[…]”中的0表示内存单元的偏移地 址。 那么内存单元的段地址是多少呢?
执行指令时,8086CPU自动取DS中的数据为内存单元的 段地址。 如何用mov指令从10000H中读取数据?
– 段地址:123BH – 长度:10字节
3.2.4 数据段(续)
• 如何访问数据段中的数据呢?
• 将一段内存当作数据段,是我们在编 程时的一种安排,我们可以在具体操 作的时候 ,用 ds 存放数据段的段地址 ,再根据需要,用相关指令访问数据 段中的具体单元。 • 示例
3.2.4 数据段(续)
• 我们将123B0H~123BAH的内存单元定义 为数据段,我们现在要累加这个数据段 中的前3个单元中的数据,代码如下:
小结(续)
• (4)在内存和寄存器之间传送字型数据 时,高地址单元和高8位寄存器、低地址 单元和低8位寄存器相对应。 • (5)mov、add、sub是具有两个操作对象 的指令。jmp是具有一个操作对象的指令 。 • (6)可以根据自己的推测,在Debug中实 验指令的新格式。
3.3 栈
• 我们研究栈的角度: 栈是一种具有特殊的访问方式的存储 空间。它的特殊性就在于,最后进入 这个空间的数据,最先出去。 • 可以用一个盒子和3本书来描述 栈的操作方式
• 1011 0000 0000 0111 B • B007H • 把数“7”送到AL中。 • 0000 0100 0000 0011B • 0403H • 把数“3”与AL内容相加,结果放在AL中。 • 1010 0010 0101 0000 0000 0000B • A25000H • 把AL中的内容送到地址为5的存储单元中。
3.1.5 代码存放的地方-代码段
• 对于8086PC机,在编程时,可以根据需要 ,将一组内存单元定义为一个段。 • 可以将长度为 N( N≤64KB )的一组代码 ,存在一组地址连续、起始地址为 16的倍 数的内存单元中,这段内存是用来存放代 码的,从而定义了一个代码段。
3.1.5代码段
例如
• 这段长度为 10 字节的字节的指令,存在从 123B0H~123B9H的一组内存单元中,我们就 可以认为,123B0H~123B9H这段内存单元是 用来存放代码的 ,是一个代码段 ,它的段地 址为123BH,长度为10字节。
3.1.4修改CS、IP的指令
在CPU中,程序员能够用指令读写的部 件只有寄存器,程序员可以通过改变 寄存器中的内容实现对CPU的控制。
CPU从何处执行指令是由CS、IP中的内 容决定的,程序员可以通过改变CS、 IP中的内容来控制CPU执行目标指令。
我们如何改变CS、IP的值呢?
3.1.4修改CS、IP的指令
3.2.1 数据存取
• 问题:
写几条指令,将al中的数据送入内存单元10000H? (思考后分析)
• 分析问题本质:
怎样将数据从寄存器送入内存单元?
• 结论:mov bx,1000H mov ds,bx mov [0],al (一种合理的回答)
3.2.2 字的传送
• 因为8086CPU是16位结构,有16根数 据线,所以,可以一次性传送16位的 数据,也就是一次性传送一个字。
8086CPU必须提供相应的指令
先回想我们如何修改AX中的值? mov指令不能用于设置CS、IP的值, 8086CPU没有提供这样的功能。 8086CPU为CS、IP提供了另外的指 令来改变它们的值:转移指令
修改CS、IP的指令
Jmp指令
• 跳转指令,同时修改CS、IP的内容。
格式:
• jmp 段地址:偏移地址
第三章指令系统与寻址方式
Questions? •1. 汇编指令是什么? •2. 机器如何也去寻指? •3. 指令中的操作数在哪儿存放? •4.机器又是如何去寻数? •5. 为什么要有寻址方式?
3.1 汇编语言指令
3.1.1 机器指令 机器指令也称作代码指令。它是计算机能识 例 1 用机器指令实现将7加3的结果存入5号字节单元的操 作。 别的一组二进制代码。
3.2 数据存取
例子:我们要读取10000H单元的内容 可以用如下程序段进行:
• mov bx,1000H • mov ds,bx • mov al,[0]
上面三条指令将10000H(1000:0)中 的数据读到al中。
指令 mov al,[0] 已知的mov指令可完成的两种传送功能:
• (1)将数据直接送入寄存器; • (2)将一个寄存器中的内容送入另一个寄存器中。
• 10000H表示为1000:0(段地址:偏移地址) • 将段地址1000H放入ds • 用mov al,[0]完成传送(mov指令中的[]说明操作对象是一个内存单元, []中的0说明这个内存单元的偏移地址是0,它的段地址默认放在ds中)
如何把1000H送入ds?
如何把1000H送入ds? • 传送指令 mov ax,1 • 相似的方式 mov ds,1000H? • 8086CPU不支持将数据直接送入段寄存器 的操作,ds是一个段寄存器。 • (硬件设计的问题) • mov ds,1000H 是非法的。 • 数据一般的寄存器段寄存器
目的操作数 源操作数
例3 三操作数指令(三地址指令)
• IMUL EBX,[ESI],7 ;乘法指令。(80386机器指令)
例4 无操作数指令(零地址指令)
• CBW • CLC • NOP • HLT ;字节转换为字指令 ;进位标志CF清零 ;不操作指令 ;停机指令
2.指令属性
(1)指令长度——根据指令的功能不同,指令的 长度也不一样(以字节为单位)。分为单字节指 令、双字节、三字节、四字节和多字节指令等。
3.3.1 CPU提供的栈机制(续)
• 8086CPU提供入栈和出栈指令: (最 基本的) PUSH(入栈) POP (出栈) push ax:将寄存器ax中的数据送入栈 中; pop ax :从栈顶取出数据送入ax。 • 8086CPU的入栈和出栈操作都是以字 为单位进行的。
• 下面举例说明,我们可以将10000H~1000FH这段 内存当作栈来使用。 • 下面一段指令的执行过程:
1、指令格式
• 汇编指令由操作码字段和操作数字段构成。
操作码字段
操作数字段
例1 单操作数指令(一地址指令)
• INC AX ;加1指令。 • INC BL ;加1指令。 • PUSH AX ;进栈指令。 • JMP LA1 ;无条件转移指令。
例2 双操作数指令(两地址指令)
• MOV AX,5 ;传送指令。 • ADD AX,BX ;加法指令。
3.2.4 数据段(续)
• 问题 • 写几条指令,累加数据段中的前3个 字型数据。
相关文档
最新文档