微機(jī)原理課后習(xí)題及答案_第1頁
微機(jī)原理課后習(xí)題及答案_第2頁
微機(jī)原理課后習(xí)題及答案_第3頁
微機(jī)原理課后習(xí)題及答案_第4頁
微機(jī)原理課后習(xí)題及答案_第5頁
已閱讀5頁,還剩59頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第一章

1-1請說明CPU的功能以及CPU是如何執(zhí)行指令和程序的。

答:CPU的功能是執(zhí)行程序和統(tǒng)籌處理計算機(jī)系統(tǒng)中各類事務(wù)。

CPU執(zhí)行指令分為3步:取指令、分析指令、執(zhí)行指令;計算機(jī)程序

是由一條條指令按一定的順序排列組成的,CPU執(zhí)行程序的過程就是

一條條指令累計執(zhí)行的過程,其方式分為串行作業(yè)方式和流水線作業(yè)

方式。

1-2請說明單片機(jī)內(nèi)部主要是由哪些部件組成的,并說明各部件的作

用。

答:CPU:由控制器和運算器構(gòu)成,控制器的作用是執(zhí)行指令和協(xié)調(diào)

系統(tǒng)各部件的工作;運算器的作用是進(jìn)行邏輯運算和算術(shù)運算。

存儲器:存儲計算機(jī)工作時使用的信息,即指令代碼和數(shù)據(jù)代碼。

I/O接口電路:具有數(shù)據(jù)緩沖、數(shù)據(jù)隔嚼及數(shù)據(jù)轉(zhuǎn)換的功能。

1-3請問對于容量位8K的存儲器芯片,它的地址線是多少根?

答:8K=8192=213,故地址線為13根。

另附:存儲器的數(shù)據(jù)線由存儲器的字長決定,例如一塊32Kxi6(存

儲器容量顯示格式:存儲單元數(shù)X存儲單元的字長)的存儲器,其地

址線為15根,數(shù)據(jù)線為16根。

1-4將十進(jìn)制數(shù)78,134,分別用二進(jìn)制數(shù)、十六進(jìn)制數(shù)和8421BCD

嗎表示。

答:(78)D=(1001110)B=(4E)H=(01111000)8421BCD

(134)D=(10000110)B=(86)H=(000100110100)842IBCD

i

注:8421BCD碼為4位表示一個十進(jìn)制數(shù)符,本質(zhì)是符號不是數(shù)值,

所以不可省略0。

1-5將下列真值分別轉(zhuǎn)化為用8位和16位二進(jìn)制數(shù)表示的原碼、補

碼和反碼。

X=1000100;

[XL位原=[Xh位反=[X]8位補=01000100;[X]16位原=[X]16位反=[XL位補

=0000000001000100

X=-1000100

兇$位原二11000100,兇8位反二10111011,兇8位補=10111100;

兇怖位原二1000000001000100,[X]16位反=1111111110111011,[X]15位補

=1111111110111100;

X=-0111111

位反位補

[XLM=10111111,兇8=11000000,兇8=11000001;

[X]16原=1000000000111111,兇歷位反=1111111111000000,[X]15位補

=1111111111000001;

1-6將下列補碼轉(zhuǎn)化成二進(jìn)制數(shù)的真值。

[X]補=00101100;

X=101100

[X]補=11111111;

X=-l

[X]補=10000000;

X=-10000000

1-7已知下列補碼兇補和[Y]補,分別求[X+Y]補、[X-Y]補。并判斷運算結(jié)果

是否出現(xiàn)溢出。

[X]補=10011001,[Y]補=00101100;

卜Y]補=11010100,[X+Y]4=[X]4+[Y]4=11000101不溢出;[X-Y]補二兇補H-Y]

補<X]補?[Y]產(chǎn)01101101溢出;

[Xj^llllllll,[Y]>t=10000000;

卜/9位補=010000000,[X+Y]補,X]補+[Y]補=0111X111溢出;[X?Y]補=兇補+卜丫]

補,X]補?[Y]補=01111111不溢出;

兇補二00110111,[Y]補=11100000;

卜Y]補=00100000,[X+Y]補=[X]補+[Y]補=00010111不溢出;[X-Y]補=[X]補+卜丫]

補<X]補-[Y]產(chǎn)01010111不溢出;

[X]補=10000111,[Y]補=11000000;

[Y]補=01000000,}+丫]補=兇補+[Y]補=01000111溢出;[X?Y]產(chǎn)兇補+卜Y]補

=兇補?[丫]產(chǎn)11000111不溢出;

方法提示:由于補碼是按序列排列的,所以可以直接進(jìn)行加和減,即

[X+Y]補,X]補+[Y]補;[X-Y]補,X]補?[修補

另補碼減法也可用加法實現(xiàn)[X-Y]補=[X]補+卜丫]補。上題的第2小題,由于

8

[Y]8^h=10000000=2,Y=28,所以(-Y)二28,已不能用8位補碼表示,可

以先擴(kuò)補位9位補瑪,然后進(jìn)行運算,或直接用[X-Y]產(chǎn)[X,-[Y]補進(jìn)行

計算。判斷結(jié)果是否溢出,可按下列方法:加法時,如果正負(fù)數(shù)相加

(即兩數(shù)的符號位不同),則結(jié)果肯定不溢出;如果同號數(shù)相加,結(jié)果

與被加數(shù)和加數(shù)異號的則溢出(即正正相加結(jié)果為負(fù)或負(fù)負(fù)相加結(jié)果

為正時)。減法時,如果同號數(shù)相減(即兩數(shù)的符號位相同),則結(jié)果肯

定不溢出;如果異號數(shù)相減,結(jié)果與被加數(shù)異號的則溢出(即正負(fù)相

減結(jié)果為負(fù)或負(fù)正相減結(jié)果為正時)。此法比用變形補碼直觀,加和

3

答:特殊功能寄存器(SFR)中存放的是一些專用信息,這些信息與

下列內(nèi)容有關(guān):計算機(jī)指令的執(zhí)行條件及狀態(tài)標(biāo)志,定時/計數(shù)器的

使用控制、中斷系統(tǒng)的使用、并行I/O及串行I/O接口的使用。

工作寄存器只是用于暫時存放指令執(zhí)行過程中一般的被操作數(shù)據(jù)。

2-6特殊功能寄存器的地址空間如何?

答:特殊功能寄存器(SFR)的地址為8為二進(jìn)制編碼,地址范圍為

80H?OFFH,但各特殊功能寄存器的地址并非連續(xù)分布的。指令通過

直接尋址的方式才能訪問到。

2-751單片機(jī)中的位尋址區(qū)在哪里?它們的地址空間如何?

答:51單片機(jī)的位尋址區(qū)分布在兩個地方。一部分位于內(nèi)部數(shù)據(jù)存

儲器中字節(jié)地址為20H-2FH的16個單元中,這部分包括128個位,

位地址空間為00H?7FH;另一部分位于字節(jié)地址能被8整除的特殊

功能寄存器中,位地址空間為80H?0FFH。

2-8請指出下列位地址所在的內(nèi)部數(shù)據(jù)存儲器單元的字節(jié)地址或

SFR名稱。

答:00H內(nèi)部RAM的20H單元;(2OH).O

20H內(nèi)部RAM的24H單元;(24H).O

0A0HP2;P2.0

0B0HP3;P3.0

5

64H內(nèi)部RAM的部H單元;(2CH).4

E6H累加器ACC;ACC.60

提示:1)內(nèi)部數(shù)據(jù)存儲器內(nèi)的可尋址位,其位地址(00H?7FH)與所在

單元的字節(jié)地址(20H?2FH)間的關(guān)系如下:

位地址=(字節(jié)地址一20H)X8+DX,DX—該位在字節(jié)單元中的位置

(DO?D7)

位地址+8,商+20H=字節(jié)地址,余數(shù)=DX

2)SFR中的可位尋址(位地址80H?OFFH)的寄存器,其最低位的位地

址與其字節(jié)地址相同。關(guān)系如下:

位地址+8,商*8=SFR的字節(jié)地址,余數(shù)=DX,DX—該位在SFR中

的位置(D0~D7)

2-9若某51單片機(jī)應(yīng)用系統(tǒng)將FOOOH-FFFFH地址空間分配給它外部

的I/O接口,那么該單片機(jī)應(yīng)用系統(tǒng)最多給外部數(shù)據(jù)存儲器分配多少

單元?地址空間如何?

答:51單片機(jī)的外部I/O接口和外部數(shù)據(jù)存儲器是統(tǒng)一編制的,占用

同一個地址空間,地址空間的容量為64KB,地址范圍為0000H?FFFFH。

據(jù)題意,系統(tǒng)已將FOOOH-FFFFH地址空間分配給它外部的I/O接口,

則只剩下0000H?EFFFH可分配給外部數(shù)據(jù)存儲器,容量為60KB。

2-10在圖2-9中的電容C,如果它取值太小,對復(fù)位電路有何影峋?

答:51單片機(jī)上電復(fù)位,需要在RST引腳上保持10ms以上的高電平。

6

如果C太小,則其充電時間變短,上電后,RST引腳上高電平保持的

時間太短,則單片機(jī)內(nèi)部復(fù)位將不能完全完成,有些寄存器內(nèi)容將變

得不確定。

2-11上電復(fù)位和人工按鈕復(fù)位后對內(nèi)部數(shù)據(jù)存儲器具有什么不同的

影響?

答:上電:上電復(fù)位后數(shù)據(jù)存儲據(jù)存儲器中的不確確定的狀態(tài)

人工按鈕工按鈕復(fù)位后數(shù)據(jù)存儲據(jù)存儲器中的變(因為沒有斷電)。

2-1251應(yīng)用系統(tǒng)中,為何要對堆棧指針SP重新設(shè)置?

答:復(fù)位后(SP)=07H,則堆棧是從08H開始存放數(shù)據(jù)的。而內(nèi)部數(shù)據(jù)

存儲器中00H?1FH單元為工作寄存器區(qū),而20H?2FH單元為位尋

址區(qū),在實際的應(yīng)用系統(tǒng)中,這些區(qū)域都可能使用到。故一般將堆棧

設(shè)置在地址30H以后的單元中,所以需要對堆棧指針SP重新設(shè)置。

2-1351單片機(jī)中的I/O接口中,那個接口在作為準(zhǔn)雙向口時需要外

接電阻?若對某一接口進(jìn)行讀引腳的操作,必須事先對該接口做什么

操作?

答:P0口需外接上拉電阻(因為P0是集電極開路結(jié)構(gòu))。

若需對某個接口讀引腳(即讀取外部輸入信號的狀態(tài)),需要對該接

口的口鎖存器寫入1(例如:若需要讀取P1.0、Pl.l、Pl.2、P1.3的

引腳狀態(tài)時,需要先執(zhí)行MOVP1,#OFH。這也是為什么復(fù)位后(P0)=

(Pl)=(P2)=(P3)=0FFH的道理。)

7

第三章

3-1指令的格式是由哪些部分組成的?每部分的含義是什么?

答:指令由操作碼和操作數(shù)組成。在形式上操作碼和操作數(shù)都是二進(jìn)

制代碼。操作碼用來表示指令的種類和功能,經(jīng)由控制器中的指令譯

碼器譯碼后產(chǎn)生控制信號。操作數(shù)是指令的操作對象,表示被操作數(shù)

據(jù)或數(shù)據(jù)所在的存儲單元地址。

3-2什么是尋址方式?51系列指令系統(tǒng)有哪些尋址方式?

答:指令中給出操作數(shù)的方式叫做尋址方式051系列機(jī)給出的尋址

方式一般有7中:立即尋址、直接尋址、寄存器尋址、寄存器間接尋

址、變址尋址、相對尋址、位尋址(直接尋址的一個特例一一地址指

向位單元)。

3-3對于內(nèi)部數(shù)據(jù)存儲器OOH~1FH區(qū)域的訪問有哪些尋址方式?對于

外部數(shù)據(jù)存儲器的訪問有哪些尋址方式?對于特殊功能寄存器的訪

問有哪些尋址方式?

答:對于內(nèi)部數(shù)據(jù)存儲器OOH~1FH區(qū)域的訪問有直接尋址、寄存器

尋址、寄存器間接尋址二種方式。

對于外部數(shù)據(jù)存儲器的訪問只有寄存器間接尋址一種方式(以DPTR

或RO、R1為指針)。

對于特殊功能寄存器的訪問只有直接尋址一種方式。同時對于內(nèi)部數(shù)

據(jù)存儲器80H?OFFH的128個單元的訪問只有寄存器間接尋址一種

8

方式(以RO、R1或SP為指針);借助于兩種不同的尋址方式,可以

將在地址上重合(80H?OFFH)的SFR和內(nèi)部RAM高128字節(jié)單元的

兩部分空間加以區(qū)分。

3-451系列單片機(jī)有哪些標(biāo)志位?這些標(biāo)志位存放在哪里?

答:51單片機(jī)在程序運行時通常需要一下標(biāo)志位:

Cy,AC,OV,P,RSI,RSO,它們都存放在特殊功能寄存器PSW(程

序狀態(tài)字寄存器)中。

3-5分析下列各指令的操作數(shù),指出它們的尋址方式。

MOVR4,38H;寄存器尋址,直接尋址

ADDA,@R1;寄存器尋址,寄存器間接尋址

MOVCA,@A+DPTR;寄存器尋址,變址尋址(又稱基址寄

存器加變址寄存器間接尋址)

MOVXA,@DPTR;寄存器尋址,寄存器間接尋址

DECB;直接尋址

SETB24H;位尋址(直接尋址的一種,只是給出的

直接地址是位地址)

CJNEA,#100,NEXT;寄存器尋址,立即尋址,相對尋址

ANL30H,#00H;直接尋址,立即尋址

PUSHPl;寄存器間接尋址(指針為SP,只是在堆棧

操作指令中省略了),直接尋址

9

堆棧操作除了用PUSH和POP指令,完全可以用其它指令來完成,

舉例如下:

PUSHPl

可用下列程序段完成

INCSP

MOVRO,SP

MOV@R0,Pl

POPPl

可用下列程序段完成

MOVRO,SP

MOVPl,@R0

DECSP

提示:上題答案中按操作數(shù)先后順序給出其對應(yīng)的尋址方式。

10

3-6下列各指令或指令組執(zhí)行前有關(guān)寄存器和存儲器的狀態(tài)如下表,

要求分析各指令或指令組執(zhí)行后有關(guān)寄存器、存儲器和標(biāo)志位的狀態(tài)。

內(nèi)部數(shù)據(jù)存儲器和特殊功能外部數(shù)據(jù)存儲程序存儲器

寄存器器

寄存內(nèi)容單元內(nèi)容單元地內(nèi)容單元地內(nèi)容程序計數(shù)器

器名地址址址內(nèi)容

B64H73H10H900BH12H1206H35H(PC)=1200H

ACC03H72H11H900AH83H1205H34H

PSW80H71H00H9009HD1H1204H33H標(biāo)號及標(biāo)號

DPL05H70H80H9008H79H1203H32HNEXTl=0800H

DPH90H9007HOCH1201H31HNEXT2=0900H

SP71H36HF8H9006H23H1200H30HNEXT3=1280H

R000H35H2BH9005H13HLOOP=1148H

R136H34H36H9004H4DH

R235H33H74H9003H2EH

R3B7H32H59H9002H7FH

R403H9001H54H

R5F6H26H66H9000H38H

R6E4H25H55H

R721H24H44H

P07CH

11

P290H

提示:在上表中需注意幾點:故

(PSW)=80H,BlCy=lzAC=OZRSI=RSO=0(

當(dāng)前工作寄存器區(qū)為0區(qū))。工作寄存器區(qū)為0區(qū)時,R0~R7指向內(nèi)部

數(shù)據(jù)存儲器的00H~07H,所以當(dāng)指令中出現(xiàn)直接地址OOH?07H中的

某個時,其初始條件即為R0?R7中某個對應(yīng)的寄存器的值。另,因

為(DPH)=90H,(DPL)二05H,所以(DPTR)二9005H。標(biāo)號值實質(zhì)上是代表標(biāo)

號所在處的指令在程序存儲器中的地址,標(biāo)號往往出現(xiàn)在程序轉(zhuǎn)移指

令中,指出轉(zhuǎn)移指令的目標(biāo)地址。

1)MOVR0,#32;(R0)=32=20H

2)MOV25H,@R1;(25H)=0F8H

3)MOVXA,@DPTR;(A)=13HP=1

4)MOVXA,@RO;(A)=38HP=1

5)MOVCA,@A+PC;(A)=33HP=0

6)MOVA,04H;(A)=03HP=0

7)XCHA,34H;(A)=36H(34H)=03H

8)XCHDA,@R1;(A)=08H(36H)=0F3H

9)PUSHDPL;(SP)=72H(72H)=05H

10)POPDPH;(DPH)=00H(SP)=70H

11)SUBBA,RI;(A)=OCCHCy=lP=0

AC=1ov=o

12)ADDA,R6;(A)=0E7HCy=OP=0

12

AC=OOV=0

13)ADDC:A,36H;(A)=OFCHCy=OP=0

AC=OOV=0

14)MULAB;(A)=2CH(B)=01H

15)INCRO;(R0)=01H

16)DECA;(A)=02HP=1

17)ADDA,#49H;

DA,A;(A)=52HCy=OP=1

18)ANLA,RI;(A)=02H(R1)=36HP=1

19)0RLA,32H;(A)=5BHP=1

20)ORL26H,#35H;(26H)=77HP=0

21)XRLA,@RO;(A)=03卜1P=0

22)XRLA,ACC;(A)=0P=C?

23)XRLA,#OFFH;(A)=OFCHP=0

24)CPLA;(A)=OFCHP=Ci

25)RLA;(A)=06HCy=l

26)RRCA;(A)=81HCy=l

27)MOVC,(25H).2;Cy=l

28)MOVFO,C;(PSW)=0A0H

29)SETBRSO;(PSW)=88H

30)CLRc;(PSW)=0

31)ANLC,(24H).0Cy=O

13

32)JZNEXT1;(PC)=1202H

33)JCNEXT2;(PC)=0900H

34)CJNEA,25H,NEXT3;(PC)=1280HCy=l

35)DJNZR7,L00P;(PC)=1148H(R7)=20H

36)LCALL1800H;(PC)=1800H(SP)=73H(72H)=03H

(73H)=12H

37)RET;(PC)=0080H(SP)=6FH

38)ANLC,/32H;Cy=O(32H)=1,提示此處32H為

位存儲器

39)STOP:JBCP0.3,STOP;(PC)=1200H(P0)=74H

40)JNBP0.4,NEXT1;(PC)=1203H

紅色部分為附加題,答案就在本期內(nèi)找八八,看看你們的本事了,

哈哈哈哈

3-7分析下列程序段的功能。

1)MOVA,R3

MOVR4,A

功能:將R3中的內(nèi)容送入R4,即(R3LR4

2)MOVA,R5

CPLA

MOVR5,A

14

功能:R5中的數(shù)據(jù)按位取反后送回R5

3)MOVA,R4

MOVB,R5

DIVAB

MOVR4ZB

MOVR5,A

功能:R4中的數(shù)除以R5中的數(shù),結(jié)果商送入R5,余數(shù)送

入R4

4)MOVC,P1.1

ANLC,Pl.2

ANLC,/Pl.3

MOVPl.6,C

功能:P1.1AP1.2APL3^P1.6

5)MOVC,0

ORLC,1

MOVFO,C

MOVC,2

ORLC,3

ANLC,FO

MOVPl.7,C

功能:((20H).0V(20H).l)A((20H).2V(20H),3)fPl.7

15

6)CLRC

MOVA,R4

RLCA

MOVR4,A

MOVA,R3

RLCA

MOVR3,A

功能:R3、R4中的內(nèi)容左移一位,R4最低位移入0,R4最高位

移入R3最低位,R3最高位移出至Cy。

7)CLRC

MOVA,R5

RLCA

ADDA,R5

MOVR5,A

功能:(R5)x37R5

8)CLRA

MOVRO,A

MOVR7,A

LOOP:MOV@RO,A

INCRO

DJNZR7,LOOP

STOP:SJMPSTOP

16

功能:將內(nèi)部數(shù)據(jù)存儲器OOH-OFFH256個單元全部清零。

9)PUSHACC

PUSHB

POPACC

POPB

功能:利用堆棧將ACC與B中的內(nèi)容互換,即(ACC)-(B)

10)MOVRO,#30H

XCHDA,@R0

SWAPA

INCRO

XCHDA,@R0

SWAPA

MOV40H,A

功能:將ACC的低四位送入30H單元低四位,ACC的高四位送入31H

的低四位,而原先30H單元的低四位送入40H單元的低四位,原31H

單元的低四位送入40H單元的高四位。

舉例說明如下,設(shè)程序段運行前有

(ACC)=12H,(30H)=34H,(31H)=56H;

則程序段運行后有(30H)=32H,(31H)=51H,(ACC)=(40H)=64H

3-8指出下列指令中哪些是合法指令,哪些是非法指令。

MOVPl,R4;合法

MOVR2,R4;非法

17

CLRR3;非法

RLCR5;非法

MOV30H,31H;合法

MOVOOH,P;非法

ORL40H,R7;非法

PUSHR6;非法

POPRO;非法

INCDPTR;合法

注:常見的錯誤還有類似:MOVRO,C;ADD3OH,31H;MOVA,@R5;

DECDPTR等,編程時切記勿錯!

3-9按要求編制下列各程序段。

將內(nèi)部數(shù)據(jù)存儲器30H和31H單元的內(nèi)容互換。

法一:

MOVA,30H

XCHA,31H

MOV30H,A

法二:

XCHA,30H

XCHA,31H

XCHA,30H

比較法一、法二的優(yōu)缺點,你認(rèn)為哪個方法更好?

將寄存器R7的內(nèi)容向右循環(huán)移位一次。

XCHA,R7

RRA

18

XCHA,R7

將寄存器R3的內(nèi)容乘以4(結(jié)果不超出8為二進(jìn)制數(shù)的范圍)。

法一:

MOVA,R3

MOVB,#4

MULAB

MOVR3,A

法二:

XCHA,R3

RLA

RLA

XCHA,R3

將寄存器DPTR的內(nèi)容減1。

法一:判斷DPL=O否?如是,法二:

減后,也減;否則,

DPL1DPH1(DPH)(DPL)-1-DPHZDPL(BPDPTR)

DPH不變。CLRC

XCHA,DPLXCHA,DPL

JNZNOBSUBBA,#1

DECDPHXCHA,DPL

NBO:XCHA,DPLXCHA,DPH

DECDPLSUBBA,#0

XCHA,DPH

法三:

(DPH)(DPL)+OFFFFH-DPTR

XCHA,DPL

ADDA,#OFFH

XCHA,DPL

XCHA,DPH

ADDCA,#OFFH

XCHA,DPH

比較以上各方法,其中法三利用了的補碼是OFFFFH的原理,將減

法改為了加法。

19

將寄存器R6的內(nèi)容壓入堆棧(設(shè)寄存器工作在3區(qū))

PUSH1EH

將R4,R5寄存器連接起來循環(huán)右移一位。(設(shè)R4為高8位,R5

為低8位;執(zhí)行完后R4R5中的內(nèi)容右移一位,R4的最低位移入R5

的最高位,同時R5的最低位移入R4的最高位)

XCHA,R4;將R4中的內(nèi)容送入ACC,同時將ACC的內(nèi)容放入

R4中暫存。

RRCA;ACC中原先R4的內(nèi)容右移一位,同時Cy移入最高位,

而原先R4的最低位移入Cv位

XCHA,R5;R5中的內(nèi)容送入ACC,上一步中產(chǎn)生的ACC的內(nèi)容

送入R5暫存

RRCA;ACC中原先R5的內(nèi)容右移一位,Cv(即原R4的最低

位)移入最高位,而原R5的最低位移入Cv位

XCHA,R5;將結(jié)果送入R5(R5移位已完成),同時將第三步暫

存在R5中的內(nèi)容取出。

MOVACC.7,C;將Cy位中存放的原R5的最低位送入ACC的最高位

(即送入R4的最高位)

XCHA,R4;將結(jié)果送入R4,同時取出ACC原來的值

20

第四章

4-1用偽指令將下列常數(shù)依次定義在1600H為首地址的程序存儲器

中。

0,1,4,9,16,25,36,49,64,81

答:ORG1600H

DB0,1,4,9,16,25,36,49,64,81

4-2用偽指令將下列常數(shù)依次定義在1700H為首地址的程序存儲器

中,要求數(shù)據(jù)類型一致C

0,1,8,27,64,125,216,343,512,729

答:提示:因為343,512,729為雙字節(jié)數(shù)據(jù)(>255),所以所有數(shù)據(jù)

均應(yīng)以雙字節(jié)存入C

ORG1700H

DW0,1,8,27,64,125,216,343,512,729

4-3用偽指令將字節(jié)型變量XI、X2定義在內(nèi)部數(shù)據(jù)存儲器30H、31H

單元中,將字節(jié)型變量Yl、Y2定義在外部數(shù)據(jù)存儲器2000H、2001H

單元中。

答:XIDATA30H

X2DATA31H

Y1XDATA2000H

Y2XDATA2001H

21

4-4用偽指令將ASCII碼字符串“Beijing用jtds!”定義在1200H為首地

址的程序存儲器中。

答:ORG1200H

DB'Beijing,tjjtds!'

4-5用偽指令將邏輯變量Al、A2定義在OOH、01H位單元中

答:AlBIT00H

A2BITO1H

4-6編一程序段,將1400H為首地址的外部數(shù)據(jù)存儲器中200個單字

節(jié)數(shù)據(jù)轉(zhuǎn)移至1500H為首地址的外部數(shù)據(jù)存儲器中。

MOVDPTR,#1400H;用DRTR指向源數(shù)據(jù)塊單元地址

MOVP2,#15H;用P2,R0指向目標(biāo)地址

MOVR0,#00H

MOVR7,#200;數(shù)據(jù)個數(shù)送入R7

LOOP:MOVXA,@DPTR

MOVX@R0,A

INCDPTR;修改源數(shù)據(jù)塊指針

INCRO;修改目標(biāo)單元地址指針

DJNZR7,LOOP

SJMP$

22

4-7編一程序段,將30H為首地址的內(nèi)部數(shù)據(jù)存儲器中20個單字節(jié)

補碼數(shù)據(jù)中的負(fù)數(shù)傳送至2400H為首地址的外部數(shù)據(jù)存儲器中。

MOVRO,#30H;用R0指向源數(shù)據(jù)塊首地址

MOVDPTR,#2400H;用DRTR指向目標(biāo)區(qū)首地址

MOVR7,#20;數(shù)據(jù)個數(shù)送入R7

LOOP:MOVA,@R0;取出源數(shù)據(jù)

JNBACC.7,NEXT;若源數(shù)據(jù)最高位=0,則表示數(shù)據(jù)

為非負(fù)數(shù),無需傳送,可直接取下個數(shù)據(jù)

MOVX@DPTR,A;若取出的數(shù)據(jù)為負(fù)數(shù),則傳送到外部RAM,同

時修改DPTR

INCDPTR

NEXT:INCRO

DJNZR7,LOOP

SJMP$

4-8編一程序段,將40H為首地址的內(nèi)部數(shù)據(jù)存儲器中25個單字節(jié)

數(shù)據(jù),依次下移一個單元。

提示:根據(jù)題意即將40H~58H中的數(shù)據(jù)依次送入41H~59H中

XCHA,40H;ACC內(nèi)容送入40H暫存保護(hù),同時取出40H單

元中內(nèi)容

MOVR0,#41H;R0指向目標(biāo)單元首地址

23

MOVR7,#25;數(shù)據(jù)長度送R7

LOOP:XCHA,@R0;前一個單元數(shù)送后一個單元,同時取

出后一個單元原先的數(shù)據(jù)暫存入ACC

INCR0

DJNZR7,LOOP

MOVA,40H;恢復(fù)ACC原來的內(nèi)容

STOP:SJMPSTOP

4-9編一程序段,完成函數(shù)y=x2+5x+6的計算。設(shè)OWxWlO。

提示:據(jù)題意6Wy<156,即結(jié)果為單字節(jié)數(shù)據(jù)。

XDATA30H

YDATA31H

MOVA,X

MOVB,X

MULAB

MOVY,A;X2->Y

MOVAZX

MOVB,#5

MULAB

ADDA,Y;X2+5XfACC

ADDA,#6;X2+5X+6ACC

MOVY,A;X2+5X+6Y

24

STOP:SJMPSTOP

討論:有時仔細(xì)分析問題,可以將程序變得更簡單,如上題中

2則程序為

y=x+5x+6=(x+2)(x+3)/

XDATA30H

YDATA31H

MOVA,X

ADDA,#2

MOVB,A;(x+2)

INCA;(x+3)

MULAB

MOVY,A;X2+5X+6fY

STOP:SJMPSTOP

4-10編一程序段,完成邏輯函數(shù)L=XVZ的計算。

提示:此程序按照51匯編程序標(biāo)準(zhǔn)格式編寫,整個程序構(gòu)成一個完

整結(jié)構(gòu),單片機(jī)運行時將反復(fù)執(zhí)行該程序,即當(dāng)輸入變量發(fā)生變化時,

輸出邏輯函數(shù)L將立刻發(fā)生相應(yīng)的變化。

XBITP1.0

YBITP1.1

ZBITP1.2;分別定義變量X,YZ由P1口的低三位

(P1.0,Pl.l,P1.2)輸入

LBITP1.7;定義函數(shù)L由P1.7輸出

25

ORG0;用戶程序第一條指令必須放在程序存儲器

0000H單元中

UMPMAIN;此處安排一條長調(diào)換指令,跳到主程序處,目

的:避開03H開始的中斷入口

ORG200H;主程序安排在程序存儲器200H單元開始

MAIN:MOVC,X

ANLC,/Y

ANLC,Z

CPLC

MOV

SJMPMAIN;真正的實用程序必須構(gòu)成一個死循環(huán)結(jié)構(gòu),使得單片

機(jī)可以反復(fù)地執(zhí)行

;用戶設(shè)定的功能

討論一:若上列函數(shù)改為1_=乂丫+乂2+丫乙如何編程,給兩個答案,自己

比較體會!

MOVc,x

ANLC,Y

MOVFO,C

MOVC,X

ANLc,z

ORLC,F0

MOVFO,C

MOVC,Y

ANLc,z

ORLC,F0

MOVL,C

26

MOVC,X

ANLC,Y

JCOUT

MOVc,x

ANLc,z

JCOUT

MOVC,Y

ANLc,z

OUT:MOVL,C

討論二:若上列函數(shù)改為L=(X+Y)(X+Z)(Y+Z),如何編程,給兩個答案,

結(jié)合討論一自己比較體會!

MOVC,X

ORLC,Y

MOVFO,C

MOVC,X

ORLc,z

ANLC,FO

MOVFO,C

MOVC,Y

ORLc,z

ANLC,FO

MOVL,C

MOVc,x

ORLC,Y

JNCOUT

MOVc,x

ORLc,z

JNCOUT

MOVC,Y

ORLc,z

OUT:MOVL,C

27

4-11閱讀下列各程序段,并說明其功能。

START:MOVDPTR,#1000H

MOVR7,#10

MOVXA,@DPTR

MOVB,A;取出外部RAM單元1000H單元中的數(shù)送入B

LOOP:INCDPTR;每次循環(huán)逐個取出外部RAM單元1001H

開始的單元中的內(nèi)容

MOVXA,@DPTR

CJNEA,B,COMP;比較(A)和⑻,無論是否相等,均轉(zhuǎn)向

下條指令,判斷Cy位

COMP:JCNEXT;Cy=l,則(A)V(B),不作處理,直接進(jìn)

下個循環(huán),取下個數(shù)據(jù)判斷

MOVB,A;若Cy=O,則(A)2(B),將(A)fB

NEXT:DJNZR7,LOOP

STOP:SJMPSTOP

功能:判斷外部數(shù)據(jù)寄存器1000H開始的11個單元中的最大值,將

最大值送入寄存器Bo

START:MOVR2,#0

MOVR7,#8

MOVA,R3;(R3)->ACC

LOOP:RLCA;8次循環(huán),每次循環(huán),將R3中的內(nèi)容由

28

最低位開始,逐位移入Cy

JNCNEXT;Cy=O,則不做任何操作,直接進(jìn)入下個循

環(huán)

INCR2;若上句條件不成立,即R3中移出的位=1,則

(R2)+l-R2

NEXT:DJNZR7,LOOP

STOP:SJMPSTOP

功能:統(tǒng)計R3中1的個數(shù),并將統(tǒng)計結(jié)果送入R2。

START:MOV30H,#0

MOVRO,#50H

LOOP:MOVA,@R0

CJNEA,#OFFH,NEXT

SJMPSTOP

NEXT:INC30H

INCRO

SJMPLOOP

STOP:SJMPSTOP

功能:統(tǒng)計存放在內(nèi)部數(shù)據(jù)存儲器50H開始的數(shù)據(jù)塊的長度(即數(shù)據(jù)

塊占多少個字節(jié)),數(shù)據(jù)塊以O(shè)FFH為結(jié)束標(biāo)志。

4-12編一子程序,將一個非壓縮8421BCD碼(即單字節(jié)BCD碼)轉(zhuǎn)

29

換成七段顯示碼。設(shè)0?9的BCD碼對應(yīng)的七段顯示碼分別為3FH、

06H、6BH、4FH、66H、6DH、7DH、07H、7FH、6FH。進(jìn)子程序前,

BCD碼被放在累加器ACC中;子程序運行后,相應(yīng)的七段碼也放在

ACC中。(即入口參數(shù)和出口參數(shù)均在ACC中)。

;BCD碼轉(zhuǎn)換成顯示碼

;入口參數(shù):子程序名CHSEG,單字節(jié)BCD碼放在累加器ACC中

;出口參數(shù):七段顯示碼放在ACC中

CHSEG:ADDA,#1;加上偏移量,偏移量為MOVCA,@A+PC指

令與數(shù)據(jù)表首間的字節(jié)數(shù)

MOVCA,@A+PC

RET;單字節(jié)指令

;數(shù)據(jù)表一般緊

DB3FH,06H,6BH,4FH,66H,6DH,7DH,07H;7FH,6FH

跟著RET指令

有另一法,不需計算偏移量

CHSEG:ADDA,#SEGTB-SSG;用標(biāo)號表達(dá)式,讓編譯程序計算

偏移量

MOVCA,@A+PC

SSG:RET

SEGTB:DB3FH,06H,6BH,4FH,66H,6DH,7DH,07H,7FH,6FH

4-13編一子程序,將一個0?9的七段顯示碼轉(zhuǎn)換成對應(yīng)的格雷碼。

30

0?9的格雷碼請參閱本書表1-2。設(shè)進(jìn)子程序前,七段顯示碼被放在

內(nèi)部數(shù)據(jù)存儲器40H中;子程序運行后,相應(yīng)的格雷碼放在內(nèi)部數(shù)據(jù)

存儲器50H中。(即入口參數(shù)為40H,出口參數(shù)為50H)。

算法一提示:根據(jù)0?9的序號依次查出對應(yīng)的顯示碼,然后與40H

中的內(nèi)容比較,如果相等,則根據(jù)當(dāng)前序號查表得到對應(yīng)的格雷碼。

;顯示碼轉(zhuǎn)換成格雷碼

;入口參數(shù):子程序名CHGRY,七段顯示碼被放在內(nèi)部數(shù)據(jù)存儲器40H

中,影響ACC,B,Cy位

;出口參數(shù):格雷碼放在內(nèi)部數(shù)據(jù)存儲器50H中

CHGRY:PUSHACC;保護(hù)現(xiàn)場

PUSHB

PUSHPSW

;用記錄。?的序號

MOVBz#0B9

NEXT:MOVA,B;

;用標(biāo)號表達(dá)式,讓編譯程序計算偏移量

ADDAz#SEGTB-SSG

MOVCA,@A+PC;根據(jù)當(dāng)前序號,查取對應(yīng)的顯示碼

SSG:CJNEA,40H,NEQ;比較取得的顯示碼與源單元中的顯

示碼

MOVA,B;如果相等,則根據(jù)當(dāng)前序號,查取對

應(yīng)的格雷碼

ADDA,#GRYTB-SGR

MOVCA,@A+PC

31

SGR:MOV50H,A;將查取的格雷碼送入目標(biāo)單元

POPPSW;恢復(fù)現(xiàn)場

POPB

POPACC

RET;返回

NEQ:INCB;如果不想等,則將序號增1,查取下個顯

示碼作比較

SJMPNEXT

SEGTB:DB3FH,06H,6BH,4FH,66H,6DH,7DH,07H,7FH,6FH;顯示碼

格雷碼

GRYTB:DBOOH,01H,03H,02H,04H,05H,07H,06H,08H,09H;

算法二提示:直接將顯示碼轉(zhuǎn)化成格雷碼,程序煩了些,但方法很簡

單。

;顯示碼轉(zhuǎn)換成格雷碼

;入口參數(shù):子程序名CHGRY,七段顯示碼被放在內(nèi)部數(shù)據(jù)存儲器40H

中,影響ACC,Cy位

;出口參數(shù):格雷碼放在內(nèi)部數(shù)據(jù)存儲器50H中

CHGRY:PUSHACC;保護(hù)現(xiàn)場

PUSHPSW

MOVA,40H

32

CJNEA,#3FH,NEQO

MOV50H,#00H;40H單元中的內(nèi)容=0的顯示碼,則將0

的格雷碼送入50H

NEQO:CJNEA,#06H,NEQ1

MOV50H,#01H;40H單元中的內(nèi)容=1的顯示碼,則將1

的格雷碼送入50H

NEQ1:CJNEA,#6BH,NEQ2

MOV50H,#03H;40H單元中的內(nèi)容=2的顯示碼,則將2

的格雷碼送入50H

NEQ2:CJNEA,#4FH,NEQ3

MOV50H,#02H;40H單元中的內(nèi)容=3的顯示碼,則將3

的格雷碼送入50H

NEQ3:CJNEA,#66H,NEQ4

MOV50H,#04H;40H單元中的內(nèi)容=4的顯示碼,則將4

的格雷碼送入50H

NEQ4:CJNEA,#6DH,NEQ5

MOV50H,#05H;40H單元中的內(nèi)容=5的顯示碼,則將5

的格雷碼送入50H

NEQ5:CJNEA,#7DH,NEQ6

MOV50H,#07H;40H單元中的內(nèi)容:6的顯示碼,則將6

的格雷碼送入50H

NEQ6:CJNEA,#07H,NEQ7

33

MOV50H,#06H;40H單元中的內(nèi)容=7的顯示碼,則將7

的格雷碼送入50H

NEQ7:CINEA,#7FH,NEQ8

MOV50H,#08H;40H單元中的內(nèi)容=8的顯示碼,則將8

的格雷碼送入50H

NEQ8:CINEA,#6FH,QUIT

MOV50H,#09H;40H單元中的內(nèi)容=9的顯示碼,則將9

的格雷碼送入50H

QUIT:POPPSW;恢復(fù)現(xiàn)場

POPACC

RET

4-14編一子程序,完成兩雙字節(jié)無符號數(shù)相加。設(shè)加數(shù)和被加數(shù)分

別放在0區(qū)寄存器R2、R3和R4、R5中,運算結(jié)果存放在0區(qū)寄存

器R6、R7中。若運算結(jié)果發(fā)生進(jìn)位,使00H位單元=1;反之,使00H

位單元二0。

;雙字節(jié)無符號數(shù)相加

;入口參數(shù):子程序名NADD,加數(shù)和被加數(shù)分別放在。區(qū)寄存器R2、

R3和R4、R5中,影響ACC,位Cy

;出口參數(shù):運算結(jié)果存放在。區(qū)寄存器R6、R7中,00H位單元存放

雙字節(jié)相加的進(jìn)位標(biāo)志

NADD:PUSHACC;保護(hù)現(xiàn)場

34

PUSHPSW

MOVA,R2;(R2)+(R4)fR6

ADDA,R4

MOVR6,A

MOVA,R3;(R3)+(R5)-R7

ADDCA,R5

MOVR7,A

MOVOOH,C;CyfOOH

POPPSW

POPACC4灰復(fù)現(xiàn)場

RET

4-15編制一子程序,完成10ms較精確延時功能。設(shè)系統(tǒng)時鐘頻率為

24MHz。

提示:時鐘頻率為24M為,則每個機(jī)器周期T=0.5us,10ms延時即

需要lOOOOus/0.5us=20000=500X40個機(jī)器周期To軟件延時子程序,

就是用循環(huán)結(jié)構(gòu)反復(fù)執(zhí)行一些指令,而指令執(zhí)行時都需要時間,所以

執(zhí)行完該子程序后,即完成了延時功能。

;軟件延時10ms

;入口參數(shù):子程序名DELAY,影響2區(qū)寄存器R0,R1

;出口參數(shù):無

DELAY:PUSHPSW;1T

35

MOVPSW,#18H;1T

MOVRO,#40;1T

DL:MOVRI,#248;1T*4O

DL1:DJNZRI,DL1;2T*248*40=19840T

NOP;1T*4O

DJNZRO,DL;2T*40

POPPSW;1T

RET;2T總延時

3T+40T+19840T+40T+80T+3T=200067;誤差6T=3us,相當(dāng)準(zhǔn)了

4-16編制一子程序,將10個非壓縮BCD碼轉(zhuǎn)換成5個壓縮BCD碼。

設(shè)進(jìn)子程序前,非壓縮BCD碼被放在40H為首地址的內(nèi)部數(shù)據(jù)存儲

器中;子程序運行后,壓縮BCD碼放在50H為首地址的內(nèi)部數(shù)據(jù)存

儲器中。

功能說明:若進(jìn)子程序前40H-49H單元中的內(nèi)容為

01H,02H,03H,04H,05H,06H,07H,08H,09H,00H,貝U子程序運行后

50H~54H中的內(nèi)容為12H,34H,56H,78H,90H

;BCD碼壓縮

;入口參數(shù):子程序名BCDCH,非壓縮BCD碼被放在40H為首地址的

內(nèi)部數(shù)據(jù)存儲器中

;影響ACC,2區(qū)寄存器R0,RI,R7

;出口參數(shù):壓縮BCD碼放在50H為首地址的內(nèi)部數(shù)據(jù)存儲器

36

BCDCH:PUSHACC;保護(hù)現(xiàn)場

PUSHPSW

MOVPSW,#10H;設(shè)定當(dāng)前工作寄存器區(qū)為2區(qū)

MOVRO,#40H;R0指向源數(shù)據(jù)塊首地址

MOVRI,#50H;R1指向目標(biāo)數(shù)據(jù)塊首地址

MOVR7,#5;轉(zhuǎn)換5次

LOOP:MOVA,@R0;前一單元內(nèi)的BCD碼送入ACC的高四位

SWAPA

INCRO;R0指向下個源數(shù)據(jù)

ORLA,@R0;后一單元內(nèi)的BCD碼送入ACC的低四

位,同時并未改變源數(shù)據(jù)

MOV@R1,A;壓縮BCD碼送入目標(biāo)地址

INCRI;R1指向下個目標(biāo)單元

DJNZR7,LOOP

POPPSW;恢復(fù)現(xiàn)場

POPACC

RET;返回

37

4-17編制一子程序,完成15個單字節(jié)補碼數(shù)據(jù)按絕對值大小從小到

大進(jìn)行排隊。設(shè)數(shù)據(jù)放在30H為首地址的內(nèi)部數(shù)據(jù)存儲器中。

提示:排序的基礎(chǔ)是比較!無論是對原碼、補碼還是絕對值排序,基

本算法都可沿用無符號數(shù)冒泡法的算法,只是在讀取數(shù)據(jù)時需對數(shù)據(jù)

進(jìn)行一些處理,或在比較兩個數(shù)的大小時改變一下方法(比如符號位

的判斷)。補碼按絕對值排序的算法我想到了兩種(當(dāng)然不排除有其

它方法)。一種是將補碼轉(zhuǎn)換成原碼,由于原碼是在最高位表示符號,

而其余各位表示數(shù)值部分(即絕對值),這樣只需比較原碼的低7位

即可;或者直接將其中負(fù)數(shù)的補碼轉(zhuǎn)換成其相反數(shù)的補碼(這樣所有

比較的數(shù)據(jù)均為正數(shù)的補碼,形式上也就是其絕對值,轉(zhuǎn)換的方法是

連同符號位一起取反后加1,這種方法也適用于對-128的補碼進(jìn)行轉(zhuǎn)

換)。另一種方法,判斷兩個待比較數(shù)的符號,同號時相減,如果差

數(shù)與減數(shù)異號,則被減數(shù)絕對值〈減數(shù)絕對值;兩數(shù)異號時相加,如

果和與被加數(shù)異號(或與加數(shù)同號),則被加數(shù)絕對值V加數(shù)絕對值;

無論加減,結(jié)果為0,則兩數(shù)絕對值必定相同。

;絕對值排序,算法一

;入口參數(shù):子程序名PAIXU,影響ACC,寄存器B,2區(qū)寄存器RO,R2,

R3,標(biāo)志位Cy,FO

;出口參數(shù):排序后數(shù)據(jù)仍放在30H開始的15個內(nèi)部數(shù)據(jù)存儲器單元

38

PAIXU:PUSHACC;保護(hù)現(xiàn)場

PUSHPSW

MOVPSW,#10H;設(shè)定2區(qū)寄存器區(qū),同時OfFO

MOVR3,#14;暫存比較次數(shù)fR3

CLRFO;進(jìn)入循環(huán)前,清除交換標(biāo)志FO

NEXT:MOVRO,#30H;首地址-*R0

MOVR2,13H;當(dāng)前比較次數(shù)(R3)fR2

LOOP:MOVA,@RO;取出前一個數(shù)

CJNEA,#80H,LOP1;判斷正負(fù)

LOP1:JCFPOS;如果為正數(shù),則不轉(zhuǎn)換

CPLA;如果是負(fù)數(shù),取相反數(shù)補碼

INCA;即得負(fù)數(shù)的絕對值

;前數(shù)的絕對值

FPOS:MOVBZAfB

INCRO;R0指向下個數(shù)

MOVA,@R0

CJNEA,#80H,LOP2

LOP2:JCCOMP;如果是負(fù)數(shù),取相反數(shù)補碼

CPLA

INCA;后數(shù)的絕對值fACC

COMP:CJNEA,B,NEQ;比較前后兩絕對值

SJMPNEXCH;后=前,不交換

NEQ:JNCNEXCH;后〉前,不交換

SETBF0;后<前,交換位置,置標(biāo)志F0

MOVA,@R0;后數(shù)fACC

DECRO;R0指向前單元

XCHA.@R0;后數(shù)一前單元,前數(shù)一ACC

INCRO;R0恢復(fù)指向后單元

MOV@R0,A;前數(shù)一后單元

;判斷一次冒泡是否完成

NEXCH:DJNZR2ZLOOP

DECR3;修改每次冒泡中的比較次數(shù)

JBCFO,NEXT;判斷冒泡中有無交換,清除F0

POPPSW;若上次冒泡中無交換,則排序完成

POPACC

RET

對上述程序稍作改動,程序的效率就高了(每次比較時執(zhí)行的指令少

了,速度就快了)

39

PAIXU:PUSHACC

PUSHPSW

MOVPSW,#10H

MOVR3,#14

CLRFO;進(jìn)入循環(huán)前,清除交換標(biāo)志F0

NEXT:MOVRO,#30H

MOVR2,13H

MOVA,@R0

CJNEA,#80HzL0P1

LOP1:JCFPOS

CPLA

INCA

FPOS:MOVB,A

LOOP:INCRO

MOVA,@R0

CJNEA,#80H,L0P2

L0P2:JCCOMP

CPLA

INCA

COMP:CJNEA,B,NEQ

NEQ:JCEXCH

XCHA,B;若不交換,則后〉前,將后一絕對值(較大)送入B,作為下次比較的前一個絕究

SJMPNEXCH

EXCH:SETBF0;置位交換標(biāo)志

M

溫馨提示

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

評論

0/150

提交評論