第2章 80X86汇编语言与汇编程序(4)—串操作与程序控制指令_第1页
第2章 80X86汇编语言与汇编程序(4)—串操作与程序控制指令_第2页
第2章 80X86汇编语言与汇编程序(4)—串操作与程序控制指令_第3页
第2章 80X86汇编语言与汇编程序(4)—串操作与程序控制指令_第4页
第2章 80X86汇编语言与汇编程序(4)—串操作与程序控制指令_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、GLUT_C 2013-0818086指令系统(续)GLUT_C 2013-0822.3.5 串操作指令串操作指令 串操作指令在教材串操作指令在教材P.128P.128l 字符串传送指令字符串传送指令l 字符串比较指令字符串比较指令l 字符串检索指令字符串检索指令 l 取字符串指令取字符串指令 l 存字符串指令存字符串指令 GLUT_C 2013-0831.1.字符串传送指令字符串传送指令 字符串传送指令字符串传送指令MOVSB/MOVSWMOVSB/MOVSW格式:格式:MOVSBMOVSB;用于字节传送;用于字节传送MOVSWMOVSW;用于字传送。;用于字传送。 特点:特点:(1 1)

2、MOVSBMOVSB、MOVSWMOVSW指令,源数据串的默认段指令,源数据串的默认段基址基址DSDS,有效地址为,有效地址为SISI,目的串段基址,目的串段基址ESES,有效,有效地址地址DIDI。(2 2)指令前面常加重复前缀)指令前面常加重复前缀REPREP,重复执行,重复执行n n次次。(3 3)重复执行次数)重复执行次数 由由CXCX指定指定(4 4)每次传送,)每次传送,DIDI,SISI自动修改(字节传送自动修改(字节传送1 1,字,字传送传送2 2),加减由方向控制为),加减由方向控制为DFDF确定。确定。GLUT_C 2013-084DF=0 SI、DI +1 (+2)DF=

3、1 SI、DI -1 (-2)15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 015 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 OFOFDFDFIFIFTFTFSFSFZFZF AFAF PFPF CFCFGLUT_C 2013-085如:将内存中如:将内存中11000H11000H开始的开始的100100字节传送到字节传送到32000H32000H开始的开始的连续地址空间连续地址空间MOV AXMOV AX,1000H1000HMOVMOV DS, AX DS, AX; ;源数据串段基地址源数据串段基地址MOV AX, 3000HMOV A

4、X, 3000HMOV ES, AX MOV ES, AX ; ;目的数据串段基地址目的数据串段基地址MOVMOV SI SI,1000H1000H;源地址为;源地址为1000H1000HMOVMOV DI DI,2000H2000H;目的地址为;目的地址为2000H2000HMOVMOV CX CX,100100;字符串长;字符串长100100个字节个字节CLDCLD;方向标志清;方向标志清0 0,使指针,使指针 ;按增量方向修改;按增量方向修改REP MOVSBREP MOVSB;将源地址开始的;将源地址开始的100100个个 ;字节传送到目的地址;字节传送到目的地址 GLUT_C 201

5、3-086MOVSB指令注意点: 源地址用SI寄存器指出 目的地址用DI寄存器指出 CX中为字节数或字数。 若DF为0,则用 MOVSB时,每传送一次,SI和DI自动增1; MOVSW时,每传送一次,SI和DI自动增2。 DF=1,则SI,DI变化方向?GLUT_C 2013-0872. 字符串比较指令 字符串比较指令字符串比较指令 CMPSBCMPSBCMPSWCMPSW功能:功能:把把DSDS段由段由SISI所指的字节或者字和所指的字节或者字和ESES段由段由DIDI所指的字节所指的字节或者字相比较。或者字相比较。 设置标志位设置标志位该指令通常与条件重复指令配合使用该指令通常与条件重复指

6、令配合使用GLUT_C 2013-088CMPSB/CMPSWCMPSB/CMPSW指令指令注意点:注意点: 预先将:预先将:l源字符串的首址设置到源字符串的首址设置到DSDS段和段和SISI中中l目的字符串的首址设置到目的字符串的首址设置到ESES段和段和DIDI中中l比较的字节数或字数设置到比较的字节数或字数设置到CXCX中中l设置方向标志设置方向标志 在在DFDF为为0 0或为或为1 1,影响比较,影响比较SISI和和DIDI的修改方向。的修改方向。 CMPSB/CMPSW CMPSB/CMPSW指令通常加重复前缀指令通常加重复前缀_ _条件重复前缀条件重复前缀REPNZ/REPNE-R

7、EPNZ/REPNE-比较不等于比较不等于0/0/不相等重复不相等重复REPZ/REPE -REPZ/REPE -比较等于比较等于0/0/相等重复相等重复它在两个字符串中寻找第一个不相等或相等的元素它在两个字符串中寻找第一个不相等或相等的元素GLUT_C 2013-089例:比较例:比较1000:0e00H1000:0e00H与与1000:0400H1000:0400H连续连续8 8字节是否相等,只要有字节是否相等,只要有一个不相同的字节,则设置一个不相同的字节,则设置AL=0A5HAL=0A5H表示两个字符串不想等,否表示两个字符串不想等,否则赋值则赋值AL=00HAL=00H。CMP_SC

8、MP_S:MOVMOVAX,1000HAX,1000HMOVMOVDS,AXDS,AXMOVMOVES,AXES,AXMOVMOVDI,0400HDI,0400HMOVMOVSI,0E00HSI,0E00HCLDCLDMOVMOVCX,0008CX,0008REPZREPZCMPSBCMPSB; ;比较相等,继续比较相等,继续, ,不等,向下执行不等,向下执行JNZJNZDONEDONE; ;比较完毕,如果有一个不相等,转比较完毕,如果有一个不相等,转MOVMOVAL,0AL,0; ;比较完毕,最后一个也相等比较完毕,最后一个也相等,AL =00,AL =00JMP CMP_ENDJMP CM

9、P_END; ;则全部相等,结束则全部相等,结束DONE: MOV AL,0A5HDONE: MOV AL,0A5H; ;只要有一字节不等,即设置只要有一字节不等,即设置AL=0A5HAL=0A5HCMP_END:CMP_END:RETRETGLUT_C 2013-08103. 字符串检索指令字符串检索指令 SCASBSCASBSCASWSCASW功能:功能:将将ALAL中的字节或者中的字节或者AXAX中的字与位于中的字与位于ES:DIES:DI段指定地址内存单元的段指定地址内存单元的字节或字相比较,设置标志位字节或字相比较,设置标志位使用前缀:使用前缀: REPZ/REPEREPZ/REPE

10、; ;相同继续比较相同继续比较REPNZ/REPNEREPNZ/REPNE; ;不相同继续比较不相同继续比较寻找第一个匹配的字节、或字。寻找第一个匹配的字节、或字。GLUT_C 2013-0811例:检索从ES:0EED开始四个字节是否有=5AH的字符,如果有,则DX指示该字符的地址,并设置AL=0,如果无匹配。则设置AL=0A5HSCAN_SUB:MOVDI, 0EEDH;目的字符串首地址CLDMOVCX, 4;共4个字符MOVAL, 5AHREPNZ SCASB;比较,不相等,继续比较,每次比较DX+1SCAN_01:;有相等的,或者全部比较完毕,进入该处JNZAAA;全部4个都不相等,则

11、转AAADECDI;有相等的,则DI-1就是相等的字符的地址MOV DX,DIMOVAL,0;有相等的字符,AL=0,DX是该字符地址JMPBBBAAA: MOVAL,0A5H;无匹配字符,设置AL=0A5HBBB:RETGLUT_C 2013-0812例:在首地址为在首地址为 ABCDABCD长度为长度为200200的字符的字符串中查找字符串中查找字符“#”#”,若有该字,若有该字符,则将查找次符,则将查找次数存入数存入DIDI,字符,字符存放有效地址存存放有效地址存入入BXBX,如无该字,如无该字符,则置符,则置SI=0,BX=0SI=0,BX=0LEA DI, ABCD;取首地址取首地址

12、MOV AL,23H;#MOV CX, 200;次数次数CLD;地址增加地址增加REPNE SCAS;不等循环找不等循环找JZ FOUN;找到找到MOV SI,0;没找到没找到MOV BX,0JMP DONEFOUN:DEC DI; 地址地址-1,得到,得到;字符存放地址字符存放地址MOV BX,DI;LEASI,ABCD;取首地址取首地址SUBDI,SI;计算搜索次数计算搜索次数DONE: GLUT_C 2013-08134. 取字符串指令取字符串指令 LODSB;ALDS:SI, SI+1或或 SI-1LODSW;AX DS:SI,SI+2 或或 SI -2功能:功能:将位于将位于DSDS

13、段由段由SISI所指的存储单元的内容取到所指的存储单元的内容取到ALAL或或AXAX中。中。DF=1DF=1时地址作减量修改时地址作减量修改DF=0DF=0时地址作增量修改时地址作增量修改 注意:不使用重复前缀。注意:不使用重复前缀。Pentium Pentium 还有还有3232位取指令,取到位取指令,取到EAXEAXGLUT_C 2013-08145. 5. 存字符串指令存字符串指令 STOSB/STOSW功能:把AL或AX中的数据存到ES段DI寄存器所指的内存单元。可以使用重复前缀。当寄存器AL、AX中的数不变时,使用重复前缀,则是对某一RAM区域进行填充。例如上电复位后,对某一块内存区

14、域全部填充0BBB: CLDLEA DI,200HMOV CX,128XOR AX,AXREP STOSW当然也可以用字节填充BBB: CLDLEA DI,0500HMOV CX,256XOR AL,ALREP STOSB在Pentium中,还可以32位存储 STOSD,这时,EAX中预置要填充的数GLUT_C 2013-08152.3.6 2.3.6 控制转移指令控制转移指令 控制转移指令中包括5类指令,即l 子程序调用和返回指令l 无条件转移和条件转移指令l 循环控制指令l 中断指令l 处理器控制指令 GLUT_C 2013-0816关于转移指令和调用指令的寻址关于转移指令和调用指令的寻址

15、 l段内直接转移;l段内间接转移;l段间直接转移;l段间间接转移 GLUT_C 2013-0817GLUT_C 2013-08181 子程序调用和返回指令子程序调用和返回指令 子程序调用指令:子程序调用指令:l 段内直接调用指令段内直接调用指令l 段内间接调用指令段内间接调用指令l 段间直接调用指令段间直接调用指令l 段间间接调用指令段间间接调用指令。(1 1)段内调用)段内调用直接给出调用的偏移地址。例如直接给出调用的偏移地址。例如CALL CALL 1000H1000H;段内调用地址在指令中给出;段内调用地址在指令中给出CALLCALL AXAX ;段内间接调用地址由;段内间接调用地址由A

16、XAX给出给出实际编写程序,利用符号地址。例如实际编写程序,利用符号地址。例如ABCDABCDCALL ABCD CALL ABCD GLUT_C 2013-0819(2)段间调用除了偏移地址外,还需要给出段基地址。除了偏移地址外,还需要给出段基地址。例如:例如:CALLCALL 2500H 2500H:3600H3600H;段间直接调用,段地址;段间直接调用,段地址 ;和偏移量由指令给出;和偏移量由指令给出CALLCALL DWORD PTR DWORD PTR DIDI;段间间接调用,调用;段间间接调用,调用 ;地址在;地址在DIDI、DI+1DI+1、 ;DI+2DI+2、DI+3DI+

17、3所指单元所指单元 GLUT_C 2013-0820RETRET功能:功能:返回上一层的程序。返回上一层的程序。特点:特点:可带参数可带参数RETRET n nn n为为0 0FFFFHFFFFH范围中的偶数。范围中的偶数。与与RETRET的区别的区别返回后,堆栈指针再加上返回后,堆栈指针再加上n nGLUT_C 2013-08212 2 无条件转移指令和条件转移指令无条件转移指令和条件转移指令 (1)(1) 无条件转移指令无条件转移指令(2)(2) 有五种形式有五种形式(3)(3) 段内直接短转移段内直接短转移(4)(4) 段内直接近转移段内直接近转移(5)(5) 段内间接转移段内间接转移(

18、6)(6) 段间直接转移段间直接转移(7)(7) 段间间接转移段间间接转移GLUT_C 2013-0822 段内直接转移段内直接转移l 格式:格式:JMP NEAR dstl 功能功能 :该指令执行的操作:该指令执行的操作: (IP)=(IP)+16为偏移量为偏移量这里的这里的IP值是取出指令后的值是取出指令后的IP值。与短转移的区别在偏移量是值。与短转移的区别在偏移量是16位。位。同样在汇编语言程序设计中,可以使用地址值或符号地址。同样在汇编语言程序设计中,可以使用地址值或符号地址。地址属性符号地址属性符号 NEAR可以省略。可以省略。例如例如JMP 1000HJMP 1000H3 3字节指

19、令字节指令NEAR为默认,可不写。为默认,可不写。为为16位带符号偏移地址。位带符号偏移地址。一般用标号,转移到指定一般用标号,转移到指定标号的指令,例如:标号的指令,例如:JMP ABCDABCD:MOV AX,DIGLUT_C 2013-0823段内直接短转移段内直接短转移(1)格式:)格式: JMP SHORT dst(2)功能:)功能: dst是一个是一个8位的带符号偏移量,该指令转移到位的带符号偏移量,该指令转移到 (IP)+偏移量的地址去执行。偏移量的地址去执行。注意:注意:IP指的是取出该指令后的指的是取出该指令后的IP值。值。在汇编语言程序设计中,通常使用符号地址。在汇编语言程

20、序设计中,通常使用符号地址。例如:例如: JMP SHORT 55H通常使用标号通常使用标号 MOV AX, BX JMP SHORT ABCD ABCD: ORL AX,CX汇编语言会自动计算出带符号的偏移量。汇编语言会自动计算出带符号的偏移量。GLUT_C 2013-0824 段内间接转移段内间接转移 JMP REG;JMP WORD PTR MEM(2)功能:用指定的寄存器或存储器中的)功能:用指定的寄存器或存储器中的16位数据代位数据代替替IP的内容。的内容。例如:(例如:(BX)= 0100H JMP BX 转移到转移到CS:0100H执行执行 IP=(BX)=0100HGLUT_C

21、 2013-0825可以使用各通用寄存器,例如可以使用各通用寄存器,例如 JMP AXJMP DI当为存储器操作数时,需要加当为存储器操作数时,需要加WORD PTR属性说明。属性说明。存储器可以使用各种寻址方式。存储器可以使用各种寻址方式。例如例如 JMP WORD PTR BXJMP WORD PTR BPSI例如,若例如,若 (20125H)=34H,(,(20126H)=12H,(,(DS)=2000H,(,(BX)=0100H则则 JMP WORD PTR BX+25则转移到则转移到CS:1234H去执行下一条指令。去执行下一条指令。GLUT_C 2013-0826 段间直接转移段间

22、直接转移l 格式格式: JMP FAR PTR dstl 功能功能:用:用dst给出的段内偏移量代替给出的段内偏移量代替IP,用,用dst的段地址代替的段地址代替CS的内容,转移到新的的内容,转移到新的CS: 偏移地址去执行下一条指令。偏移地址去执行下一条指令。注意:在汇编语言程序设计中,注意:在汇编语言程序设计中,dst通常使用符号地址。通常使用符号地址。例如:例如: MOV AX, SI JMP FAR PTR ABCD ABCD: AND AX,BX ABCD 是一个符号地址,由汇编语言计算出实际地址值。是一个符号地址,由汇编语言计算出实际地址值。GLUT_C 2013-0827 段间间

23、接转移段间间接转移l 格式格式: JMP DWORD PTR dstl 功能功能:dst给出的是转移地址在内存中的存放地址,低给出的是转移地址在内存中的存放地址,低16位位为段内偏移量,它送到为段内偏移量,它送到IP代替代替IP的当前内容,高的当前内容,高16位为段基位为段基址,它送到址,它送到CS代替当前的代替当前的CS内容。内容。例如:例如: JMP DWORD PTR BXGLUT_C 2013-0828(2) 条件转移指令的形式条件转移指令的形式:指令书写一般格式指令书写一般格式 :JCC dst ;( dst是短标号是短标号 SHORT_LABEL) 通过测试标志寄存器的状态标志通过

24、测试标志寄存器的状态标志当满足一定的条件时,当满足一定的条件时,转移到指定的地址,否则,将顺序执行下条指令。转移到指定的地址,否则,将顺序执行下条指令。 作为判断条件的状态标志位有:作为判断条件的状态标志位有:CF、PF、ZF、SF和和OF。 条件转移指令都是段内相对短转移指令,它的转移有效地址条件转移指令都是段内相对短转移指令,它的转移有效地址 (IP)+dst dst是是8位的带符号偏移量。位的带符号偏移量。 在汇编语言程序设计中,通常使用标号,而由汇编程序去在汇编语言程序设计中,通常使用标号,而由汇编程序去计算这个偏移量。计算这个偏移量。GLUT_C 2013-0829JE/JZ JE/

25、JZ ;结果为;结果为0 0,则转移,则转移JNE/JNZJNE/JNZ ;结果不为;结果不为0 0,则转移,则转移JG/JNLEJG/JNLE ;大于既不小于且不等于则转移;大于既不小于且不等于则转移JNG/JLEJNG/JLE ;不大于既小于或等于则转移;不大于既小于或等于则转移JCJC;JNCJNC;GLUT_C 2013-0830JL/JNGEJL/JNGE ;小于,即不大于且不等于则转移;小于,即不大于且不等于则转移JNL/JGEJNL/JGE ;不小于,即大于或者等于则转移;不小于,即大于或者等于则转移JB/JNAEJB/JNAE ;低于,即不高于且不等于则转移;低于,即不高于且不

26、等于则转移JNB/JAEJNB/JAE ;不低于,即高于或者等于则转移;不低于,即高于或者等于则转移JA/JNBEJA/JNBE ;高于,即不低于且不等于则转移;高于,即不低于且不等于则转移JNA/JBEJNA/JBE ;不高于,即低于或者等于则转移;不高于,即低于或者等于则转移 GLUT_C 2013-0831JSJS;符号标志;符号标志SFSF为为1 1则转移则转移JNSJNS;符号标志;符号标志SFSF为为0 0则转移则转移JOJO;溢出标志;溢出标志OFOF为为1 1则转移则转移JNOJNO;溢出标志;溢出标志OFOF为为0 0则转移则转移JPJP;奇偶标志;奇偶标志PFPF为为1 1

27、则转移则转移JNPJNP;奇偶标志;奇偶标志PFPF为为0 0则转移则转移 GLUT_C 2013-08323 3 循环控制指令循环控制指令 (1) LOOP(1) LOOP指令指令功能:功能: 将将CXCX的内容减的内容减1 1,CXCX如不为如不为0 0,则继续循环,为,则继续循环,为0 0,则退,则退出循环。出循环。 如:如:DLYDLY: PUSH CXPUSH CX MOV CX MOV CX,0100H0100H;设置循环次数;设置循环次数KKK: KKK: LOOP KKK LOOP KKK ;CXCX减减1 1,如不为,如不为0 0则循环则循环 POP CXPOP CX RET

28、 RET该段为软件延时子程序该段为软件延时子程序GLUT_C 2013-0833(2) LOOPZ/LOOPE(2) LOOPZ/LOOPE功能:功能:将将CXCX减减1 1,如如CXCX为为0 0或者或者ZFZF为为0 0则退出循环,则退出循环,在在ZF=1ZF=1且且CX0CX0时继续循环。时继续循环。注意:注意:CXCX中的值为中的值为0 0时,并不会影响标志位时,并不会影响标志位ZFZF。注意与注意与LOOPLOOP指令的相同与区别。指令的相同与区别。GLUT_C 2013-0834(3) (3) LOOPNZ/LOOPNELOOPNZ/LOOPNECXCX减减1 1,如,如CX0CX

29、0且且ZF=0ZF=0,则继续循环;如,则继续循环;如CX=0CX=0,或或ZF=1ZF=1,则退出循环。,则退出循环。该指令可以用于比较指令之后,例如该指令可以用于比较指令之后,例如在在DAT1开始的开始的200个数据,我们查找是否有等于个数据,我们查找是否有等于 55H的值,如果的值,如果有,将其地址保存在有,将其地址保存在BX,,否则(,否则(BX)=55AAH。 GLUT_C 2013-0835ABC开始取地址SIDAT1循环次数CX200AL SI(SI)+1(BX)(SI)-1LOOPNZ ABC 结束CPM AL, 55HZF=1?(BX)=55AAHENDA02A01NY 有相

30、等的或CX=0退出有相等,保存相应地址GLUT_C 2013-0836 LEA SI,DAT1;(SI)源地址指针MOV CX,200 ;(CX)循环次数 ABC: MOV AL,SI ;取一个带符号数到AL INC SI ;CMP AL, 55H ;AL内容与比较LOOPZ ABC ;Z=1,CX0,循环JNZ A02 ;没有找到A01: DEC SI ;(SI)=(SI)-1是相等字节地址MOV BX,SI ;将相同字节地址BXJMP END ;程序转结束A02: MOV BX,55AAH ;无相等,55AAHBXEND: HLT ;结束 GLUT_C 2013-0837TABC: LEA

31、 SI,DAT1;(SI)源地址指针 MOVCX,200 ;(CX)循环次数 ABC:MOV AL,SI ;取一个带符号数到AL INC SI ; CMP AL, 55H ;AL内容与比较 LOOPZ ABC ;保存到DI指定的地址 JNZ A02 ;没有找到A01: DEC SI ;(SI)=(SI)-1 MOV BX,SI ; JMP END ;A02: MOV BX,55AAH ;END: RET ;结束 如果变成过程(子程序)程序,则最后用RET结束。GLUT_C 2013-08384 中断指令和中断返回指令中断指令和中断返回指令 软件中断指令软件中断指令INT nINT n中断返回指

32、令中断返回指令IRETIRETGLUT_C 2013-0839五个内部中断:五个内部中断:类型为类型为0的中断的中断除数为除数为0的中断的中断 类型为类型为1的中断的中断单步中断单步中断类型为类型为2的中断的中断非屏蔽中断非屏蔽中断NMI。类型为类型为3的中断的中断断点中断断点中断 类型为类型为4的中断的中断溢出中断溢出中断GLUT_C 2013-08405 处理器控制指令处理器控制指令 (1 1) 暂停指令暂停指令HLTHLT功能:功能: CSCS和和IPIP指向指向HLTHLT后面的一条指令的地址,而后面的一条指令的地址,而CPUCPU暂停工作暂停工作 可以响应外部中断,中断返回后,离开暂

33、停状态,可以响应外部中断,中断返回后,离开暂停状态,执行执行HLTHLT后面的指令后面的指令(2 2)空操作指令)空操作指令NOPNOP GLUT_C 2013-0841(3) 标志操作指令标志操作指令l 进位标志:进位标志:STCSTC、CLCCLC和和CMCCMC(CFCF取反)取反)l 方向标志方向标志STDSTD和和CLDCLD l 中断允许标志中断允许标志STISTI和和CLICLI GLUT_C 2013-0842(4) (4) 交权指令和等待指令交权指令和等待指令交权指令交权指令ESCESC:CPUCPU调用协处理器工作。调用协处理器工作。 等待指令等待指令WAITWAIT:CPUCPU测试测试TESTTEST引脚上的信号,直到引脚上的信号,直到有停止信号为止。有停止信号为止。 GLUT_C 2013-0843(5) 总线封锁指令总线封锁指令 LOCKLOCK功能:功能:对总线实行封锁。对总线实行封锁。它通常放在其它

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论