导航:首页 > 操作系统 > 单片机的汇编语言程序指令详解

单片机的汇编语言程序指令详解

发布时间:2022-07-13 13:36:08

⑴ 如何迅速掌握单片机汇编语言的指令

刚好也有这么个困惑,已经解决了,拿出来分享下
比较转移指令
CJNZ
CJNE
A,#data,rel
CJNE
A,direct,rel
CJNE
Rn,#data,rel
CJNE
@Ri,#data,rel
第一条指令的功能是将A中的值和立即数data比较,如果两者相等,就次序执行(执行本
指令的下一条指令),如果不相等,就转移,同样地,我们能将rel理解成标号,即:CJNEA,
#data,标号。这样利用这条指令,我们就能判断两数是否相等,这在很多场合是非常有用的。
但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功能,如果两数不相等,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来实现的。如果前面的
数(A中的)大,则CY=0,不然CY=1,因此在程序转移后再次利用CY就可判断出A中的数
比data大还是小了。
例:
MOV
A,R0
CJNE
A,#10H,L1
MOV
R1,#0FFH
AJMP
L3
L1:
JC
L2
MOV
R1,#0AAH
AJMP
L3
L2:
MOV
R1,#0FFH
L3:
SJMP
L3
JC是判CY是0,还是1进行转移,如果CY=1,则转移到JC后面的标号处
执行,如果CY=0则次序执行(执行它的下面一条指令)。
分析一下上面的程序,如果(A)=10H,则次序执行,即R1=0。如果(A)不等于10H,则转
到L1处继续执行,在L1处,再次进行判断,如果(A)>10H,则CY=1,将次序执行,即执
行MOV
R1,#0AAH指令,而如果(A)<10H,则将转移到L2处指行,即执行MOV
R1,#0FFH
指令。因此最终结果是:本程序执行前,如果(R0)=10H,则(R1)=00H,如果(R0)>10H,
则(R1)=0AAH,如果(R0)<10H,则(R1)=0FFH。
弄懂了这条指令,其它的几条就类似了,第二条是把A当中的值和直接地址中的值比较,第
三条则是将直接地址中的值和立即数比较,第四条是将间址寻址得到的数和立即数比较,这
里就不详谈了,下面给出几个对应的例程。
CJNE
A,10H
;把A中的值和10H中的值比较(注意和上题的区别)
CJNE
10H,#35H
;把10H中的值和35H中的值比较
CJNE
@R0,#35H
;把R0中的值作为地址,从此地址中取数并和35H比较

⑵ 51单片机汇编程序详解:POP是干什么的

POP和PUSH是成对使用的,PUSH是压栈,把数据内容放到堆栈里,POP是弹出栈,把堆栈里的内容取出来。
如果用枪的子弹夹比作堆栈,PUSH,相当于把子弹装进弹夹,POP相当于把子弹从弹夹里打出去

⑶ 汇编语言在51单片机中的所有指令有那些

单片机指令功能一览表
助记符 代码 说明
MOV A,Rn E8~EF 寄存器A
MOV A,direct E5 dircet 直接字节送A
MOV A,@Ri ER~E7 间接RAM送A
MOV A,#data 74 data 立即数送A
MOV Rn,A F8~FF A送寄存器
MOV Rn,dircet A8~AF dircet 直接字节送寄存器
MOV Rn,#data 78~7F data 立即数送寄存器
MOV dircet,A F5 dircet A送直接字节
MOV dircet,Rn 88~8F dircet 寄存器送直接字节
MOV dircet1,dircet2 85 dircet1 dircet2 直接字节送直接字节
MOV dircet,@Ro 86~87 间接RAM送直接字节
MOV dircet,#data 75 dircet data 立即数送直接字节
MOV @Ri,A F6~F7 A送间接RAM
MOV @Ri,#data 76~77 data 直接字节送间接RAM
MOV @Ri,#data 76~77 data 立即数送间接RAM
MOV DPTR,#data16 90 data 15~8 16位常数送数据指针
data7~0
MOVC A,@A+DPTR 93 由((A)+(DPTR))寻址的程序存贮
器字节选A
MOVC A,@A+PC 83 由((A)+(PC));寻址的程序存贮器字节送A
MOVX A,@Ri E2~E3 送外部数据(8位地址)送A
MOVX A,@DPTR E0 送外部数据(16位地址)送A
MOVX @Ri,A F2~F3 A送外部数据(8位地址)
MOVX @DPTR,A F0 A送外部数据(16位地址)
PUSH dircet C0 dircet 直接字节进栈,SP加1
POP dircet D0 dircet 直接字节退栈,SP减1
XCH A,Rn C8~CF 交换A和寄存器
XCH A,dircet C5 dircet 交换A和直接字节
XCH A,@Ri C6~C7 交换A和间接RAM
XCH A,@Ri D6~D7 交换A和间接RAM的低位
SWAP A C4

算术操作 (A的二个半字节交换)
ADD A,Rn 28~2F 寄存器加到A
ADD A,dircet 25 dircet 直接字节加到A
ADD A,@Ri 26~27 间接RAM加到A
ADD A,#data 24data 立即数加到A
ADD A,Rn 38~3F 寄存器和进位位加到A
ADD A,dircet 35dircet 直接字节和进位位加到A
ADD A,@Ri 36~37 间接字节和进位位加到A
ADD A,data 34 data 立即数和进位位加到A
ADD A,Rn 98~9F A减去寄存器和进位位
ADD A,dircet 95 dircet A减去直接字节和进位位
ADD A,@Ri 36~37 间接RAM和进位位加到A
ADD A,data 34 data 立即数和进位位加到A
SUBB A,Rn 98~9F A减去寄存器和进位位
SUBB A,dircet 95 dircet A减去直接字节和进位位
SUBB A,@Ri 96~97 A减去间接RAM和进位位
SUBB A,#data 94 data A减去立即数和进位位
INC A 04 A加1
INC Rn 08~0F 寄存器加1
INC dircet 05 dircet 直接字节加1
INC @Ri 06~07 间接RAM加1
DEC A 14 A减1
DEC Rn 18~1F 寄存器减1
DEC dircet 15 dircet 直接字节减1
DEC @Ri 16~17 间接RAM减1
INC DPTR A3 数据指针加1
MUL AB A4 A乘以B
DIV AB 84 A除以B
DA A D4 A的十进制加法调整

逻辑操作
ANL A,Rn 58~5F 寄存器“与”到A
ANL A,dircet 55 dircet 直接字节“与”到A
ANL A,@Ri 56~57 间接RAm“与”到A
ANL A,#data 54 data 立即数“与”到A
ANL dircet A 52 dircet A“与”到直接字节
ANL dircet,#data 53 dircet data 立即数“与”到直接字节
ORL A,Rn 48~4F 寄存器“或”到A
ORL A,dircet 45 dircet 直接字节“或”到A
ORL A,@Ri 46~47 间接RAM“或”到A
ORL A,#data 44 data 立即数“或”到A
ORL dircet,A 42 dircet A“或”到直接字节
ORL dircet,#data 43 dircet data 立即数“或”到直接字节
XRL A,Rn 68~6F 寄存器“异或”到A
XRL A,dircet 65 dircet 直接字节“异或”到A
XRL A,@Ri 66~67 间接RAM“异或”到A
XRL A,#data 64 data 立即数“异或”到A
XRL dircet A 62 dircet A“异或”到直接字节
XRL dircet,#data 63 dircet data 立即数“异或”到直接字节
CLR A E4 清零
CPL A F4 A取反
RL A 23 A左环移
RLC A 33 A通过进位左环移
RR A 03 A右环移
RRC A 13 A通过进位右环移

控制程序转移
ACALL addr 11 *1 addr(a7~a0) 绝对子程序调用
LCALL addr 16 12 addr(15~8) 长子程序调用
addr(7~0)
RET 22 子程序调用返回
RETI addr 11 32 中断调用返回
AJMP addr 11 △1 addr(a7~a6) 绝对转移
LJMP addr 16 02addr(15~8) 长转移
addr(7~0)
SJMP rel 80 rel 短转移,相对转移
JMP @A+DPTR 73 相对于DPTR间接转移
JZ rel 60 rel A为零转移
JNZ rel 70 rel A为零转移
CJNE A,dircet,rel B5 dircet rel 直接字节与A比较,不等则转移
CJNE A,#data,rel B4 data rel 立即数与A比较,不等则转移
CJNE A,Rn,#data,rel B8~BF data rel 立即数与寄存器比较,不等则转移
CJNE @Ri,#data,rel B6~B7 data rel 立即数与间接RAM比较,不等则转移
DJNZ Rn,rel D8~DF rel 寄存器减1,不为零则转移
DJNZ dircet,rel B5 dircet rel 直接字节减1,不为零则转移
NOP 00 空操作
*=a10a9a8l
△=a10a9a80

布尔变量操作
CLR C C3 清零进位
CLR bit C2 清零直接位
SETB C D3 置位进位
SETB bit D2 置位直接位
CPL C B3 进位取反
CPL bit B2 直接位取反
ANL C,bit 82 dit 直接数“与”到进位
ANL C,/bit B0 直接位的反“与”到进位
ORL C,bit 72 bit 直接位“或”到进位
ORL C,/bit A0 bit 直接位的反“或”到进位
MOV C,bit A2 bit 直接位送进位
MOV bit,C 92 bit 进位送直接位
JC rel 40 rel 进位位为1转移
JNC rel 50 rel 进位位为0转移
JB bit,rel 20 bit rel 直接位为1相对转移
JNB bit,rel 30 bit rel 直接位为0相对转移
JBC bit,rel 10 bit rel 直接位为1相对转移,然后清零该位

[1]. 循环移位指令(4条)
RL A ;累加器A中的内容左移一位
RR A ;累加器A中的内容右移一位
RLC A ;累加器A中的内容连同进位位CY左移一位
RRC A ;累加器A中的内容连同进位位CY右移一位

[2]. 累加器半字节交换指令(1条)
SWAP A ; 累加器中的内容高低半字节互换

[3]. 求反指令(1条)
CPL A ; 累加器中的内容按位取反

[4]. 清零指令(1条)
CLR A ; 0→(A),累加器中的内容清0

[5]. 逻辑与操作指令(6条)
ANL A,data ;累加器A中的内容和直接地址单元中的内容执行与逻辑操作。结果存在寄存器A中。
ANL data,#data ;直接地址单元中的内容和立即数执行与逻辑操作。结果存在直接地址单元中。
ANL A,#data ;累加器A的内容和立即数执行与逻辑操作。结果存在累加器A中。
ANL A,Rn ;累加器A的内容和寄存器Rn中的内容执行与逻辑操作。结果存在累加器A中。
ANL data,A ;直接地址单元中的内容和累加器A的内容执行与逻辑操作。结果存在直接地址单元中。
ANL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行与逻辑操作。结果存在累加器A中。

[6]. 逻辑或操作指令(6条)
这组指令的作用是将两个单元中的内容执行逻辑或操作。如果直接地址是I/O地址,则为“读—修改—写”操作。

ORL A,data ;累加器A中的内容和直接地址单元中的内容执行逻辑或操作。结果存在寄存器A中。
ORL data,#data ;直接地址单元中的内容和立即数执行逻辑或操作。结果存在直接地址单元中。
ORL A,#data ;累加器A的内容和立即数执行逻辑或操作。结果存在累加器A中。
ORL A,Rn ;累加器A的内容和寄存器Rn中的内容执行逻辑或操作。结果存在累加器A中。
ORL data,A ;直接地址单元中的内容和累加器A的内容执行逻辑或操作。结果存在直接地址单元中。
ORL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑或操作。结果存在累加器A中。

[7]. 逻辑异或操作指令(6条)
XRL A,data ;累加器A中的内容和直接地址单元中的内容执行逻辑异或操作。结果存在寄存器A中。
XRL data,#data ;直接地址单元中的内容和立即数执行逻辑异或操作。结果存在直接地址单元中。
XRL A,#data ;累加器A的内容和立即数执行逻辑异或操作。结果存在累加器A中。
XRL A,Rn ;累加器A的内容和寄存器Rn中的内容执行逻辑异或操作。结果存在累加器A中。

XRL data,A ;直接地址单元中的内容和累加器A的内容执行逻辑异或操作。结果存在直接地址单元中。
XRL A,@Ri ;累加器A的内容和工作寄存器Ri指向的地址单元中的内容执行逻辑异或操作。结果存在累加器A中

控制转移类指令分析

[1]. 无条件转移指令(4条)
LJMP addr16 ;addr16→(PC),给程序计数器赋予新值(16位地址)
AJMP addr11 ;(PC)+2→(PC),addr11→(PC10-0)程序计数器赋予新值(11位地址),(PC15-11)不改变
SJMP rel ;(PC)+ 2 + rel→(PC)当前程序计数器先加上2再加上偏移量给程序计数器赋予新值
JMP @A+DPTR ;(A)+ (DPTR)→(PC),累加器所指向地址单元的值加上数据指针的值给程序计数器赋予新值

[2]. 条件转移指令(8条)
JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的内容为0,则转移到偏移量所指向的地址,否则程序往下执行
JNZ rel ; A≠0,(PC)+ 2 + rel→(PC),累加器中的内容不为0,则转移到偏移量所指向的地址,否则程序往下执行

CJNE A, data, rel ; A≠(data),(PC)+ 3 + rel→(PC),累加器中的内容不等于直接地址单元的内容,则转移到偏移量所指向的地址,否则程序往下执行
CJNE A, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),累加器中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行
CJNE Rn, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Rn中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行
CJNE @Ri, #data, rel ; A≠#data,(PC)+ 3 + rel→(PC),工作寄存器Ri指向地址单元中的内容不等于立即数,则转移到偏移量所指向的地址,否则程序往下执行

布尔变量操作指令分析

[1]. 位传送指令(2条)
MOV C,bit ;bit→CY,某位数据送CY
MOV bit,C ;CY→bit,CY数据送某位

[2]. 位置位复位指令(4条)
CLR C ; 0→CY,清CY
CLR bit ; 0→bit,清某一位
SETB C ; 1→CY,置位CY
SETB bit ; 1→bit,置位某一位

[3]. 位运算指令(6条)
ANL C,bit ;(CY)∧(bit)→CY
ANL C,/bit ;(CY)∧( )→CY
ORL C,bit ;(CY)∨(bit)→CY
ORL C,/bit ;(CY)∧()→CY
CPL C ;()→CY
CPL bit ;()→bir

[4]. 位控制转移指令(5)
JC rel ; (CY)=1转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC。
JNC rel ; (CY)=0转移,(PC)+2+rel→PC,否则程序往下执行,(PC)+2→PC。
JB bit, rel ; 位状态为1转移。
JNB bit, rel ; 位状态为0转移。
JBC bit, rel ; 位状态为1转移,并使该位清“0”。

⑷ 单片机汇编语言程序的三种基本结构

汇编语言程序有顺序程序、分支程序、循环程序三种。分支结构的执行是依据一定的条件选择执行路径,而不是严格按照语句出现的物理顺序。

分支结构的程序设计方法的关键在于构造合适的分支条件和分析程序流程,根据不同的程序流程选择适当的分支语句。



(4)单片机的汇编语言程序指令详解扩展阅读:

注意事项:

汇编指令不区分大小写,目的操作数是存结果的,原操作数是被操作的。

二进制数后跟b,十六进制数后跟h,十进制数不需特殊标记。

汇编源程序中,数据不能以字母开头,需要在前面加上0,如0a000h。

⑸ 求单片机汇编语言程序解释

注释了一下,这个程序不全,编程也很不规范。
SECGE EQU 40H
SECSH EQU 41H
MINGE EQU 42H
MINSH EQU 43H
HOUGE EQU 44H
HOUSH EQU 45H
INTCS EQU 46H
ORG 0000H
START: AJMP MAIN
ORG 000BH
LJMP PITO
ORG 0030H
MAIN: MOV SP, #50H ;栈顶为50H
MOV PSW, #00H ;工作寄存器为0,各标志清零
MOV R0, #20H
MOV R6, #70H
MOV INTCS, #14H
CLR A
ML1: MOV @R0, A ;A的值送R0指向的地址的内容
INC R0
DJNZ R6, ML1 ;20H~8FH清零
MOV TMOD, #01H ;定时器0为16位定时器模式
MOV TH0, #03CH
MOV TL0, #0B0H ;定时/计数器0置初值,50ms中断一次
CLR TR0 ;关闭定时器0计数
SETB EA ;开中断
SETB ET0 ;ET0置1,开定时/计数器0中断

MOV 46H, #0BH
TSF: MOV 79H, #0BH
MOV 7AH, #0BH
MOV 7BH, #0BH
MOV 7CH, #0BH
MOV 7DH, #0BH
MOV 7EH, #0AH
SETB 20H.1

UU: LCALL DISP ;调显示子程序,显示"P.
LCALL KEY ;取键值
JB ACC.0,UU ;没有按键,循环等待
KSFSF: CLR 20H.1 ;有按键,清标志
LCALL DISP0 ;显示P0
LCALL DISP ;显示P
LCALL KEY ;取键值
JB ACC.0,KSFSF ;没有按键循环等待
YUNXIN: SETB TR0 ;有按键,开定时器0
LCALL DISP0 ;显示P0
LCALL DISP ;显示P
LCALL KEY ;取键值
JB ACC.0,YUNXIN ;没有按键循环等待
KEYSF: LCALL KEY ;有按键继续取键值
JZ SETCLK ;键值为0,调用SETCLK
LCALL DISP0 ;显示P0
LCALL DISP ;显示P
AJMP KEYSF ;循环

SETCLK: CLR TR0 ;关定时器0
LCALL DISP0 ;显示P0
LCALL DISP ;显示P
LCALL KEY ;取键值
JZ SETCLK ;为0循环等待
JNB ACC.0, A1 ;不为0且最低位为0转A1
KEYSF0: LCALL KEY ;否则重取键值
JZ YUNXIN ;键值为0调用YUNXIN
LCALL DISP0 ;显示P0
LCALL DISP ;显示P
SJMP KEYSF0 ;循环

KEY:
MOV P1, #0FFH ;向P1口写入显示信息
MOV A, P1
CPL A
ANL A, #0FH
RET
A1: JB ACC.1, A2 ;不是B键,转A2
KEYSF1: LCALL KEY ;判B键释放?
JZ ADDHOUR ;B键释放,时加1
LCALL DISP0
LCALL DISP
AJMP KEYSF1
A2: JB ACC.2, A3 ;不是C键按下,转A3
KEYSF2: LCALL KEY ;判C键释放?
JZ ADDMIN ;C键释放,分加1
LCALL DISP0
LCALL DISP
AJMP KEYSF2
A3: JB ACC.3, A4 ;不是D键按下,转A4
KEYSF3: LCALL KEY ;判D键释放?
JZ ADDSEC ;D键释放,秒加1
LCALL DISP0
LCALL DISP
AJMP KEYSF3
A4: LJMP UU

ADDHOUR:MOV R0, #HOUSH ;取时的十位送R0
LCALL DADD1
MOV A, R2
XRL A, #24H ;时满了24吗?
JNZ ADD1 ;时未满24,转ADD1
LCALL CLR0 ;满24,时显示区清零

⑹ 51单片机LED操作汇编语言程序解释

ORG 0000H //程序的入口
LJMP MAIN //跳到MAIN标号处
ORG 0100H //MAIN入口
MAIN: MOV TMOD, #10H //定义定时器/计数器的工作模式,此为T1方式0,为13位定时器/计数
MOV TL1, #00H //向定时器低位置初值
MOV TH1, #4BH //向定时器高位置初值
MOV R1, #20 //赋值
MOV R0, #00H //赋值
MOV A, #00H //赋值
MOV P3, A //p3口清零(T1口对应p3.5)
MOV DPTR, #TAB //取表中的值
SETB TR1 //开户定时器T1
LOOP: JBC TF1, PTF1 //TF1为1时(TF1为T1的溢出标志位),清零,并跳到标号PTF1;
AJMP LOOP //等待中断
PTF1: MOV TL1, #00H //向定时器低位置初值
MOV TH1, #4BH //向定时器高位置初值;因为方式0不能自动重装初值,所以要软件重装初值
DJNZ R1, LOOP //循环
MOV R1, #20 //赋值
MOV A, R0
ADD A,#01H //加1
DA A //累加器十进制调整
ANL A, #0FH //与操作
MOV R0, A //保存A到R0中
MOVC A, @A+DPTR //取表中的值到A
MOV P1, A //将A送到P1口输出
CPL P3.1 //取反
CPL P3.2 //取反
AJMP LOOP //循环
TAB: //表中的内容
DB 0C0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H
END

⑺ 谁有单片机汇编语言的指令解释啊最主要是我现在还不懂指令中的jb,jz是什么意思

不知道你指的是哪一类单片机,最常用的89C51系列单片机汇编语言共有111条指令,可分为5类:
[1].数据传送类指令(共29条)
[2].算数运算类指令(共24条)
[3].逻辑运算及移位类指令(共24条)
[4].控制转移类指令(共17条)
[5].布尔变量操作类指令(共17条)
jz 指令属于第4类"控制转移类"里的条件转移指令,具体格式和作用是:
JZ rel ; A=0,(PC)+ 2 + rel→(PC),累加器中的内容为0,
则转移到偏移量所指向的地址,否则程序往下执行。
jb 是属于第5类"布尔变量操作类"指令,其格式和作用如下:
JB bit, rel ; 位状态为1转移。

⑻ 单片机(汇编语言)程序

开发当然是用C,又快又易懂好维护,但是想要优化程序还是要懂汇编的,要不然实现同样一个功能的程序,好的程序员可以把程序设计得又短又快,而不做优化的可能会又臭又长,2K以下可以搞定的,你非要搞到4K以上去那最终产品的成本每个至少会相差几毛到一两块钱,而且成本升高时质量却是下降的,这样当然就不好了,所以我个人认为做单片机编程,应当是汇编和C都会才是最好的,次一点的是会C,且能大致看懂汇编,可以帮助优化C程序,
只会汇编,一个程序开发下来,得花几周到几个月,开发成本太高了,不值得
只会C完全不懂汇编,那也是很难做出高质量的单片机程序的

⑼ 单片机(汇编语言)指令

MOV PC,#2222H
根本就没有这条指令,这不是错不错的问题,是无中生有。汇编指令不是凭你自己的想象可随便写的。PC是程序计数器,是不可访问的,更没有MOV指令给它赋值。

⑽ 51单片机延迟程序(汇编语言)解析

DJNZ指令是先减一再判断结果是不是为0,所以36H赋值0是可以的,标识要循环256次.

延时计算:
12M的晶振换算指令周期为1uS

MDLY1S: MOV 35H, #255 ;2uS
MOV 36H, #0 ;2uS
MOV 37H,#4 ;2uS
DLYB: NOP ;1us
DJNZ 35H, DLYB ;2us,第一次循环为255*(1+2)=765,以
;后为256*(1+2)=768
DJNZ 36H, DLYB ;2us 765+(255*768)+(2*256)=197119
DJNZ 37H,DLYB ;2us 197119+(197122*3)+(2*4)=788493
RET ;2us

所以,从进入函数开始到返回调用地址总的延时时间为: 2+2+2+788493+2 = 788501us

阅读全文

与单片机的汇编语言程序指令详解相关的资料

热点内容
腾讯云连接不上服务器 浏览:219
不能用来表示算法的是 浏览:859
6轴机器人算法 浏览:890
手机主题照片在哪个文件夹 浏览:294
安卓手机后期用什么软件调色 浏览:628
cad修改快捷键的命令 浏览:242
好钱包app怎么登录不了 浏览:859
树莓派都用python不用c 浏览:757
access文件夹树的构造 浏览:662
安卓多指操作怎么设置 浏览:658
linux树形目录 浏览:727
平方根的简单算法 浏览:898
千牛订单页面信息加密取消 浏览:558
单片机自制红外遥控灯 浏览:719
服务器最小配置怎么弄 浏览:853
ibm服务器硬件如何升级 浏览:923
全球程序员节点赞 浏览:986
php函数传递数组 浏览:632
人工峰群算法的目标函数 浏览:468
如何删加密文档 浏览:105