4匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ)_第1頁(yè)
已閱讀1頁(yè),還剩35頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、3.4 匯編語(yǔ)言程序設(shè)計(jì)基礎(chǔ),3.4.1 程序設(shè)計(jì)語(yǔ)言概述 3.4.2 匯編語(yǔ)言程序設(shè)計(jì)的特點(diǎn)及偽指令 3.4.3 單片機(jī)匯編語(yǔ)言程序設(shè)計(jì) 3.4.3.1 順序結(jié)構(gòu)程序設(shè)計(jì) 3.4.3.2 分支程序設(shè)計(jì) 3.4.3.3 散轉(zhuǎn)程序設(shè)計(jì) 3.4.3.5 查表程序設(shè)計(jì) 3.4.3.6 子程序設(shè)計(jì) 3.4.4 單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)舉例,3.4.1 程序設(shè)計(jì)語(yǔ)言概述 3.4.1.1

2、匯編語(yǔ)言的優(yōu)點(diǎn) 3.4.1.2 匯編語(yǔ)言程序設(shè)計(jì)的過(guò)程 3.4.1.3 程序質(zhì)量,3.4.2 匯編語(yǔ)言程序設(shè)計(jì)的特點(diǎn)及偽指令,3.4.2.1 匯編語(yǔ)言程序的特點(diǎn),[標(biāo)號(hào):] 操作碼 [操作數(shù)1,操作數(shù)2,操作數(shù)3] [;注釋]方括符[ ]表示可選項(xiàng)。標(biāo)號(hào)代表指令所在地址,1-8個(gè)字母/數(shù)字,字母開(kāi)頭,“:”結(jié)尾。操作碼就是指令功能助記符,指令實(shí)體。操作數(shù)是指令操作的對(duì)象。分為目的操作

3、數(shù)和源操作數(shù)。注釋是對(duì)該指令的解釋和說(shuō)明,是指令的非執(zhí)行部分,可省略,前面必須加“;”。,3.4.2.2 偽指令 匯編語(yǔ)言源程序是由匯編語(yǔ)句組成的,一般情況下,匯 編語(yǔ)言語(yǔ)句可分為指令性語(yǔ)句和指示性語(yǔ)句。指令性語(yǔ)句(即匯編指令) 指令性語(yǔ)句是進(jìn)行匯編語(yǔ)言程序設(shè)計(jì)的可執(zhí)行語(yǔ)句,每條指令都產(chǎn)生相應(yīng)的機(jī)器語(yǔ)言的目標(biāo)代碼。源程序的主要功能是由指令性語(yǔ)句去完成的。指示性語(yǔ)句(即偽指令),偽指令 偽

4、指令是控制匯編過(guò)程的一些命令,是程序員通知匯編程序在進(jìn)行匯編時(shí)的一些指示。沒(méi)有對(duì)應(yīng)的機(jī)器碼,不產(chǎn)生目標(biāo)代碼程序,不影響程序的執(zhí)行。1).偽指令主要用來(lái)指定程序或數(shù)據(jù)的起始位置,給出一些連續(xù)存放數(shù)據(jù)的地址或?yàn)橹虚g運(yùn)算結(jié)果保留一部分存儲(chǔ)空間以及表示源程序結(jié)束等等。2).偽指令還可用來(lái)對(duì)符號(hào)﹑標(biāo)號(hào)賦值。 不同版本匯編語(yǔ)言,偽指令可能有所不同,但基本用法是相似的。,1) 設(shè)置目標(biāo)程序起始地址偽指令ORG 格式: [標(biāo)

5、號(hào):] ORG 地址 功能:規(guī)定其后面的目標(biāo)程序或數(shù)據(jù)塊的起始地址。 偽指令ORG放在一段源程序(主程序、子程序)或數(shù)據(jù)塊的前面,說(shuō)明緊跟在其后的程序段或數(shù)據(jù)塊的起始地址就是ORG后面給出的地址。 例如: ORG 1000H START:MOV A, #34H …,2) 結(jié)束匯編偽指令END 格式: [標(biāo)號(hào)

6、:] END 功能: END是匯編語(yǔ)言源程序的結(jié)束標(biāo)志,用于終止源程序的匯編工作。 在END以后所寫的指令,匯編程序都不予處理。 一個(gè)源程序只能有一個(gè)END命令。,3) 定義字節(jié)偽指令DB 格式: [標(biāo)號(hào):] DB 字節(jié)常數(shù)或字符 功能:從指定地址單元開(kāi)始存放若干個(gè)字節(jié)的數(shù)據(jù)或字符。 字符若用引號(hào)括起來(lái)則表示ASCII碼。 例如: ORG 2000H TAB1

7、: DB 30H,8AH,7FH,73 DB '5','A', ‘YES',4) 定義字偽指令DW 格式: [標(biāo)號(hào):] DW 16位數(shù)據(jù)表 功能: DW偽指令告訴匯編程序從指定的地址單元開(kāi)始定義若干個(gè)16位數(shù)據(jù)。 對(duì)于MCS-51單片機(jī)系統(tǒng),16位數(shù)據(jù)的高8位存入低地址單元,低8位存入高地址單元。例如: ORG 150

8、0H TAB2: DW 1234H,80H, 'AB'匯編以后,(1500H)=12H,(1501H)=34H, (1502H)=00H,(1503H)=80H, (1504H)=41H,(1505H)=42H,5) 賦值偽指令EQU 格式: 字符名稱 EQU 賦值項(xiàng) 功能:將EQU右邊的值賦予EQU左面用戶定義的符號(hào)。

9、賦值項(xiàng)可以是常數(shù)、地址、標(biāo)號(hào)或表達(dá)式。 例如:TEMP EQU R2 PA8155 EQU 8001H 匯編后TEMP 對(duì)應(yīng)寄存器R2,PA8155值為8001H EQU定義的符號(hào)必須先定義后使用,且在同一個(gè)源程序中, 同一個(gè)標(biāo)號(hào)只能賦值一次,該語(yǔ)句通常放在程序開(kāi)頭。,6) 位地址定義偽指令BIT格式: 字符名稱 BIT 位地址功能: 將位地址賦予字符名稱。 經(jīng)賦值后可用

10、字符名稱代替位地址。其中,位地址可以是絕對(duì)地址,也可以是符號(hào)地址(即位符號(hào)名稱)。例如:PLG BIT F0AI BIT P1.0 經(jīng)以上偽指令定義后,在程序中就可以把FLG和AI作為位地址來(lái)使用。,補(bǔ)充: 7) 定義標(biāo)號(hào)值偽指令DL 格式: 字符名稱 DL 表達(dá)式 功能:DL命令將數(shù)據(jù)地址或代碼地址賦予規(guī)定的字符名稱。 例如:COUNT DL 1000H

11、 COUNT DL COUNT+1  DL偽指令常用來(lái)定義數(shù)據(jù)地址。,補(bǔ)充: 8) 定義存儲(chǔ)空間偽指令DS 格式: [標(biāo)號(hào):] DS 表達(dá)式 功能:從指定地址開(kāi)始,保留若干個(gè)字節(jié)的內(nèi)存空間,供程序運(yùn)行使用。 保留的字節(jié)單元數(shù)由表達(dá)式的值決定。 例如: ORG 2000H DS 05H DB 10H,20H 匯編后從2000H開(kāi)始,

12、預(yù)留5個(gè)字節(jié)的內(nèi)存單元,然后從2005H開(kāi)始,按照下一條DB指令賦值,即(2005H)=10H,(2006H)=20H。 對(duì)MCS-51來(lái)說(shuō),DB、DW、DS只能對(duì)程序存儲(chǔ)器使用。,補(bǔ)充: 9) 數(shù)據(jù)地址賦值偽指令DATA 格 式: 字符名稱 DATA 表達(dá)式 功能:將表達(dá)式指定的數(shù)據(jù)地址賦予規(guī)定的字符名稱。 DATA與EQU偽指令的功能類似,但也有區(qū)別: DATA定義的字符名稱可以先

13、使用后定義,EQU定義的字符名稱必須先定義后使用。 DATA偽指令可以放在源程序的開(kāi)頭或結(jié)尾,也可以放在程序的其他位置,EQU偽指令通常放在程序開(kāi)頭。,3.4.3 單片機(jī)匯編語(yǔ)言程序設(shè)計(jì),,3.4.3.1 順序結(jié)構(gòu)程序設(shè)計(jì) 順序結(jié)構(gòu),是最簡(jiǎn)單、最基本的程序結(jié)構(gòu),其特點(diǎn)是按指令的排列順序一條條地執(zhí)行,直到全部指令執(zhí)行完畢為止。 往往用來(lái)解決一些簡(jiǎn)單的算術(shù)及邏輯運(yùn)算問(wèn)題,主要用數(shù)據(jù)傳送指令和數(shù)據(jù)運(yùn)算指

14、令實(shí)現(xiàn)。,【例1】 :設(shè)有16位二進(jìn)制數(shù)存放在 R0,R1中(R0存放高位,R1存放低位),試編寫實(shí)現(xiàn)16位二進(jìn)制數(shù)的:“取反加1”操作的程序。程序如下: ORG 1000H MOV A,R1 CPL A ADD A,#01H MOV R1,A MOV A,R0 CPL A ADDC A,#00H

15、 MOV R0,A END,3.4.3.2 分支程序設(shè)計(jì),分支結(jié)構(gòu)程序可根據(jù)程序要求無(wú)條件或有條件地改變程序執(zhí)行的順序,選擇新的程序流向。 編寫分支結(jié)構(gòu)程序主要在于正確使用轉(zhuǎn)移指令,即無(wú)條件轉(zhuǎn)移和條件轉(zhuǎn)移指令。 根據(jù)分支多少,將分支程序結(jié)構(gòu)分為單分支(即兩分支)結(jié)構(gòu)和多分支結(jié)構(gòu)。 單分支常用條件轉(zhuǎn)移指令實(shí)現(xiàn)。 多分支,在MCS-51中,利用“JMP @A+DPTR”指令可以實(shí)現(xiàn)(可實(shí)現(xiàn)256分支)

16、,為菜單程序設(shè)計(jì)提供了方便。,圖 3.4.1 分支結(jié)構(gòu)框圖(a) 單分支流程; (b) 多分支流程,【例2】 :設(shè)a存放在累加器A中,b存放在寄存器B中,要求按下式計(jì)算Y值,并將結(jié)果Y存于累加器A中,試編寫程序。 a-b (a≥0) Y =

17、 a+b (a < 0) ORG 1000H BRMPNA:JB ACC.7,PLUS CLR C SUBB A,B SJMP BRDONE PLUS: ADD A,B BRDONE : SJMP BRDONE END,3.4.3.3 散轉(zhuǎn)程序設(shè)計(jì),散轉(zhuǎn)程序是分支程序的一種,它可根據(jù)運(yùn)算結(jié)

18、果或輸入數(shù)據(jù)將程序轉(zhuǎn)入不同的分支。 MCS-51指令系統(tǒng)中有一條跳轉(zhuǎn)指令JMP @A+DPTR,用它可以很容易地實(shí)現(xiàn)散轉(zhuǎn)功能。該指令把累加器的8位無(wú)符號(hào)數(shù)與16 位數(shù)據(jù)指針的內(nèi)容相加,并把相加的結(jié)果裝入程序計(jì)數(shù)器PC,控制程序轉(zhuǎn)向目標(biāo)地址去執(zhí)行。 此指令的特點(diǎn)在于,轉(zhuǎn)移的目標(biāo)地址不是在編程或匯編時(shí)預(yù)先確定的,而是在程序運(yùn)行過(guò)程中動(dòng)態(tài)地確定的。目標(biāo)地址是以數(shù)據(jù)指針DPTR的內(nèi)容為起始的256字節(jié)范圍內(nèi)的指定地址,即由 DP

19、TR的內(nèi)容決定分支轉(zhuǎn)移程序的首地址,由累加器A的內(nèi)容來(lái)動(dòng)態(tài)選擇其中的某一個(gè)分支轉(zhuǎn)移程序。,在程序設(shè)計(jì)過(guò)程中,常常遇到反復(fù)執(zhí)行某一段程序的情況,這種情況下采用循環(huán)程序結(jié)構(gòu),可以縮短程序代碼的長(zhǎng)度,提高程序的質(zhì)量和運(yùn)行效率。循環(huán)程序一般由四個(gè)主要部分組成:  初始化部分: 為循環(huán)程序做準(zhǔn)備,如規(guī)定循環(huán)次數(shù)、給各變量和地址指針預(yù)置初值。  處理部分: 為反復(fù)執(zhí)行的程序段,是循環(huán)程序的實(shí)體,也是循環(huán)程序的主體。  循環(huán)控制部分:

20、 這部分的作用是修改循環(huán)變量和控制變量,并判斷循環(huán)是否結(jié)束, 符合結(jié)束條件時(shí),跳出循環(huán)。 結(jié)束部分: 這部分主要是對(duì)循環(huán)程序的結(jié)果進(jìn)行分析、處理和存放。,3.4.3.4 循環(huán)程序設(shè)計(jì),循環(huán)程序的這四個(gè)部分,流程有兩種情況,如圖4-2所示。,圖3-4- 2 循環(huán)結(jié)構(gòu)程序流程圖,【例3】:51單片機(jī)晶振為6MHz,分析下列循環(huán)進(jìn)行了多少次?下面程序運(yùn)行共需要多長(zhǎng)時(shí)間? MOV R7,#00H ; 1機(jī)器

21、周期 RYCL:NOP ; 1機(jī)器周期 NOP ; 1機(jī)器周期 NOP ; 1機(jī)器周期 DJNZ R7,RYCL ; 2機(jī)器周期 RET ; 2機(jī)器周期 程序運(yùn)行共需要機(jī)器周期=1+5*256+2=1283 1機(jī)

22、器周期=12/6M=2us 1283*2us=2566us,3.4.3.5 查表程序設(shè)計(jì),查表程序是一種常用程序,它廣泛使用于LED顯示控制、 打印機(jī)打印控制、數(shù)據(jù)補(bǔ)償、數(shù)值計(jì)算、轉(zhuǎn)換等功能程序中, 這類程序具有簡(jiǎn)單、執(zhí)行速度快等特點(diǎn)。  查表, 首先要求建立一個(gè)表格。表格數(shù)據(jù)一般應(yīng)存放在程序存儲(chǔ)器中,在編程時(shí)可以很方便地通過(guò)DB或DW偽指令實(shí)現(xiàn)。然后,根據(jù)自變量x(可以為規(guī)則變量或非規(guī)則變量),通過(guò)查表指令,在表

23、格中查找與其相對(duì)應(yīng)的值y(可以是單字節(jié)、多字節(jié)等情況)。 MCS – 51具有很強(qiáng)的查表功能,其查表指令有如下兩條:  MOVC A, @A+PC MOVC A, @A+DPTR,【例3】:設(shè)有一個(gè)巡回檢測(cè)報(bào)警裝置, 需對(duì)16路輸入進(jìn)行控制, 每路有一個(gè)額定的最大值, 是雙字節(jié)數(shù)。當(dāng)檢測(cè)量大于該路對(duì)應(yīng)的最大值時(shí), 就越限報(bào)警。假設(shè) R2 為保存檢測(cè)路數(shù)的寄存器, 將其對(duì)應(yīng)的最大額定值存放于31H和32H單元中。,

24、查找最大額定值的程序如下: FMAX: MOV A, R2 ADD A, R2 ;表中一個(gè)額定值為2個(gè)字節(jié) MOV 31H, A MOV DPTR, #TAB ;表首址 MOVC A, @A+DPTR ;查表讀取第一個(gè)字節(jié),XCH A, 31H ;第一個(gè)字節(jié)內(nèi)容存入31H IN

25、C DPTR MOVC A, @A+DPTR ;查表讀取第二個(gè)字節(jié) MOV 32H, A ;第二字節(jié)的內(nèi)容存入32H ORG 2000H TAB: DW 1230H, 1450H, 1020H,... DW 2230H, 2440H, 1356H,...,3.4.3.6 子程序設(shè)計(jì),子程序的概念 在程序設(shè)計(jì)的實(shí)踐中,經(jīng)常會(huì)遇到在不同的程序中或

26、在同一程序不同的地方,要求實(shí)現(xiàn)某些相同的操作,為了簡(jiǎn)化程序設(shè)計(jì)、縮短程序設(shè)計(jì)的周期、節(jié)省內(nèi)存空間,通常把這些基本操作編寫為獨(dú)立的、標(biāo)準(zhǔn)化的通用程序段, 以供不同程序或同一程序反復(fù)調(diào)用,這些獨(dú)立的程序段稱為子程序。 子程序調(diào)用 主程序?qū)ψ映绦虻恼{(diào)用是通過(guò)調(diào)用指令A(yù)CALL或LCALL實(shí)現(xiàn)的。子程序的首址必須有地址標(biāo)號(hào)以供調(diào)用指令尋址。 子程序執(zhí)行結(jié)束后必須返回主程序,返回指令為RET。,參數(shù)傳遞 為使子程序具有通

27、用性,子程序處理過(guò)程中用到的數(shù)據(jù)都由主程序提供,主程序在調(diào)用子程序時(shí)必須將具體的數(shù)據(jù)傳遞給子程序,這些數(shù)據(jù)稱為入口參數(shù)。 另一方面,子程序的某些執(zhí)行結(jié)果也必須送回到主程序,供主程序使用,這些結(jié)果數(shù)據(jù)稱為出口參數(shù)。參數(shù)傳遞的方法通常有: 寄存器或累加器傳遞 寄存器間址傳遞 堆棧傳遞,MCS-51程序總體結(jié)構(gòu) MCS-51匯編語(yǔ)言源程序一般由主程序、完成特定操作的子程序(可能不止一個(gè))及相應(yīng)功能的中斷服務(wù)程序等

28、部分組成,結(jié)構(gòu)如下:;----------程序頭(即定義變量和等值符號(hào))---------SCLBIT P1.2;定義SCL位變量ByteConDATA 30H ;定義字節(jié)變量ByteCon……,3.4.4 單片機(jī)匯編語(yǔ)言程序設(shè)計(jì)舉例,補(bǔ)充:,;------------------程序區(qū)------------------------ ORG 0000H

29、 LJMP Main;------------------中斷矢量區(qū)----------------- ORG 0003H LJMP INT0 ……;------------------主程序--------------------- ORG yyyy ;其中yyyy就是主程序代碼存放區(qū)的首地址Main:MOV SP, #5FH ;

30、初始化有關(guān)寄存器,如設(shè)置堆棧指針SP、選擇 ;工作寄存器組、初始化中斷控制寄存器等 …… ; 主程序?qū)嶓w,具體指令由程序功能決定 LCALL SUB1 ; 調(diào)用子程序1,其中SUB1為子程序名 ……,;------------------子程序結(jié)構(gòu)------------------------ ORG zzzz

31、 ;其中zzzz就是子程序代碼存放區(qū)的首地址, ;可以不用ORG指令,直接將子程序存放主程序后SUB1:PUSH PSWPUSH Acc ;通過(guò)PUSH指令保護(hù)子程序中用到的有關(guān)寄存器, ;如Acc、PSW等,即保護(hù)現(xiàn)場(chǎng)?!?;子程序?qū)嶓w,具體指令由程序功能決定POP AccPOP PSW ;恢復(fù)現(xiàn)場(chǎng)RET ;子程序最后一

32、條指令,使子程序指令運(yùn)行結(jié)束 ;后,返回主程序斷點(diǎn),;----------中斷服務(wù)程序結(jié)構(gòu)------------------------ ORG kkkk;其中kkkk就是中斷程序代碼存放區(qū)的首地址PUSH PSWPUSH Acc;保護(hù)現(xiàn)場(chǎng)。 ……;中斷服務(wù)程序?qū)嶓w,具體指令由程序功能決定POP AccPOP PSW;恢復(fù)現(xiàn)場(chǎng)CLR TI ;清除中斷標(biāo)志(在MC

33、S-51中,對(duì)于電平觸發(fā)的 ;外中斷INT0和INT1、串行接收及發(fā)送中斷RI、 ;TI等,不自動(dòng)清除,需要通過(guò)CLR指令清除。RETI;中斷服務(wù)程序最后一條指令,返回主程序斷點(diǎn);----------匯編結(jié)束------------------------END,例:定時(shí)程序設(shè)計(jì) 在單片機(jī)的控制應(yīng)用中,常有定時(shí)的需要,如定時(shí)中斷、定時(shí)檢測(cè)和定時(shí)掃描等。定時(shí)功能除了可以使

34、用定時(shí)器/計(jì)數(shù)器實(shí)現(xiàn)之外,還可以使用軟件定時(shí)程序來(lái)完成。 定時(shí)程序是典型的循環(huán)程序,它可以通過(guò)執(zhí)行一個(gè)具有固定延遲時(shí)間的循環(huán)體來(lái)實(shí)現(xiàn)延時(shí)。利用單循環(huán)實(shí)現(xiàn)短定時(shí) DL: MOV R5,#TIME LOOP: NOP NOP DJNZ R5,LOOP RET設(shè)晶振頻率為6MHz,則這個(gè)程序的最長(zhǎng)定時(shí)時(shí)間為:256×8us,利用多重循環(huán)

35、實(shí)現(xiàn)較長(zhǎng)時(shí)間定時(shí) 多重循環(huán),即在一個(gè)循環(huán)體中又包含了其它的循環(huán),是實(shí)現(xiàn)延時(shí)程序的常用方法。 【例2】設(shè)晶振頻率為12MHz,設(shè)計(jì)延遲時(shí)間為100ms的子程序。 使用“DJNZ”指令實(shí)現(xiàn)延遲,晶振頻率為12MHz,則一個(gè)機(jī)器周期為1us,執(zhí)行一條DJNZ Rn,rel的指令的時(shí)間為兩個(gè)機(jī)器周期即2μs。即使指定寄存器或存儲(chǔ)單元初值為FFH,減到0的延遲時(shí)間也只有256×2μs

36、,遠(yuǎn)小于所需的延遲時(shí)間,因此需要雙循環(huán)結(jié)構(gòu)。 對(duì)于雙循環(huán)結(jié)構(gòu),在知道系統(tǒng)的晶振頻率之后,延時(shí)時(shí)間主要與兩個(gè)因素有關(guān): 1)內(nèi)循環(huán)中指令的執(zhí)行時(shí)間; 2)外循環(huán)時(shí)間常數(shù)(內(nèi)循環(huán)的循環(huán)次數(shù))的設(shè)置。,; ***********延遲100 ms子程序**************; 子程序名稱:Delay100 Delay100: PUSH PSW CLR

37、 RS0 SETB RS1 MOV R7,#0C7H LOOP1: MOV R6,#0FAHLOOP2: DJNZ R6, LOOP2 ; DJNZ指令執(zhí)行時(shí)間為2個(gè)機(jī)器周期,而R6初值 ;為FAH(即250),則R6減到0,需500us。 DJNZ R7, LOOP1 ; 重裝R6初值指令及

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論