前面章節(jié)介紹了單片機(jī)的基礎(chǔ)知識(shí)和AT89S51單片機(jī)的主要結(jié)構(gòu)_第1頁
前面章節(jié)介紹了單片機(jī)的基礎(chǔ)知識(shí)和AT89S51單片機(jī)的主要結(jié)構(gòu)_第2頁
前面章節(jié)介紹了單片機(jī)的基礎(chǔ)知識(shí)和AT89S51單片機(jī)的主要結(jié)構(gòu)_第3頁
前面章節(jié)介紹了單片機(jī)的基礎(chǔ)知識(shí)和AT89S51單片機(jī)的主要結(jié)構(gòu)_第4頁
前面章節(jié)介紹了單片機(jī)的基礎(chǔ)知識(shí)和AT89S51單片機(jī)的主要結(jié)構(gòu)_第5頁
已閱讀5頁,還剩66頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、前面章節(jié)介紹了單片機(jī)的基礎(chǔ)知識(shí)和at89s51單片機(jī)的主要結(jié)構(gòu),本章將主要介紹at89s51單片機(jī)的指令系統(tǒng)。3.1 指令系統(tǒng)概述 單片機(jī)的指令系統(tǒng)是一套控制單片機(jī)執(zhí)行操作的編碼,通常稱為機(jī)器語言,機(jī)器語言指令是單片機(jī)唯一能夠識(shí)別和執(zhí)行的指令。為了容易理解和編程,通常使用匯編語言指令(符號(hào)指令)和高級(jí)語言(用自然語言描述)來描述計(jì)算機(jī)的指令系統(tǒng)。匯編指令需通過匯編程序或人工方法匯編成機(jī)器能夠識(shí)別和執(zhí)行的機(jī)器語言指令,高級(jí)語言需要經(jīng)過編譯或解釋成機(jī)器能識(shí)別和執(zhí)行的機(jī)器語言指令。本章采用intel公司的標(biāo)準(zhǔn)格式匯編指令來分析at89s51指令系統(tǒng)的功能和使用方法。3.1.1 指令格式匯編語言指令是

2、能匯編成機(jī)器語言代碼的指令。at89s51的匯編指令格式兼容mcs-51,其匯編語言指令的格式如下:標(biāo)號(hào):操作碼操作數(shù)1,操作數(shù)2,操作數(shù)3;注釋整個(gè)語句必須在一行內(nèi)寫完,分為4個(gè)部分。(1)第1部分標(biāo)號(hào),可以省略,它是用戶定義的符號(hào),標(biāo)號(hào)實(shí)際上是符號(hào)地址,標(biāo)號(hào)值代表這條指令在程序存儲(chǔ)器中的存放地址。標(biāo)號(hào)可以從字母開始,后跟18個(gè)英文字母或數(shù)字,并以冒號(hào)“:”結(jié)尾。(2)第2部分第2部分為指令操作,由25個(gè)英文字符組成,因不同的指令而不同,它反映了指令的功能,具體不同功能的指令,讀者可以查閱at89s51的匯編手冊(cè)。(3)第3部分第3部分為操作數(shù),根據(jù)不同的指令,可以有1個(gè)、2個(gè)、3個(gè)操作數(shù),

3、或者根本沒有操作數(shù)。它與操作助記符之間至少有一個(gè)空格,可以有多個(gè)空格,操作數(shù)之間用逗號(hào)“,”分開。它反映的是指令的對(duì)象。(4)第4部分第4部分為注釋,注釋也可以省略,它以分號(hào)“;”開始,是用戶對(duì)該條指令或程序的說明,注釋必須在一行之內(nèi)寫完,換行時(shí)需另外以分號(hào)“;”開始,注釋內(nèi)容可以為任何字符。3.1.2 at89s51的偽匯編指令匯編語言除了定義了匯編指令外,還定義了一些匯編偽指令,以支持匯編的運(yùn)行。偽指令是匯編時(shí)不產(chǎn)生機(jī)器語言代碼的指令,是cpu不能執(zhí)行的指令,僅提供匯編用的某些控制信息。at89s51匯編語言常用的偽指令有如下幾條。(1)org定位偽指令格式:org mm一般是16位二進(jìn)制

4、數(shù),m指出在該指令后的(偽)指令的匯編地址,即生成的機(jī)器指令的起始存儲(chǔ)器地址。它必須放在每段源程序或數(shù)據(jù)段的開始行,在一個(gè)匯編語言的源程序中允許存在多條定位偽指令,但其中每一個(gè)m值都應(yīng)和前面生成的機(jī)器指令存放地址不重疊。例如下面的代碼。 org 1000h start: mov a,#10h org 2000h second: clr a第1條定位偽指令指定了標(biāo)號(hào)start的地址為1000h,“mov a,#10h”指令及其后面的指令匯編成的機(jī)器碼放在從1000h開始的存儲(chǔ)單元中。第2條定位偽指令指定了標(biāo)號(hào)second的地址為2000h。從start開始的程序段所占用的存儲(chǔ)地址最多為1fffh

5、,否則與從second開始的程序段地址重疊,程序在編譯時(shí)不會(huì)發(fā)生錯(cuò)誤,但在運(yùn)行時(shí)就會(huì)發(fā)生錯(cuò)誤。(2)db定義字節(jié)偽指令格式:標(biāo)號(hào):db x1,x2,xn標(biāo)號(hào)可有可無,xi是單字節(jié)數(shù)據(jù),它可為十進(jìn)制數(shù)或十六進(jìn)制數(shù),可以為一個(gè)表達(dá)式,也可以是在括在引號(hào)中的字符串,表示ascii碼的字符,兩個(gè)數(shù)據(jù)之間用逗號(hào)“,”分開。它通知匯編程序從當(dāng)前rom地址開始,保留存儲(chǔ)單元,并存入db后面的數(shù)據(jù)。例如下面的代碼。 org 1000h db 0aahsdata: db 25,25h經(jīng)匯編后,從地址1000h處的存儲(chǔ)器的內(nèi)容如下:(1000h)=aah(1001h)=19h(1002h)=25h(3)dw定義字

6、偽指令格式:標(biāo)號(hào):dw y1,y2,yn標(biāo)號(hào)可有可無,yi是雙字節(jié)數(shù)據(jù),它可為十進(jìn)制數(shù)或十六進(jìn)制數(shù),可以為一個(gè)表達(dá)式,兩個(gè)數(shù)據(jù)之間用逗號(hào)“,”分開。它通知匯編程序從當(dāng)前rom地址開始,保留存儲(chǔ)單元,并存入dw后面的數(shù)據(jù)。存放時(shí)高8位在前,低8位在后,如下所示。org 1000hdw 1234hdw 2000經(jīng)匯編后,從地址1000h處的存儲(chǔ)器的內(nèi)容如下:(1000h)=12h(1001h)=34h(1002h)=07h(1003h)=d0h(4)equ賦值偽指令格式:字符名稱 equ 項(xiàng)(數(shù)或匯編符號(hào))equ偽指令是把“項(xiàng)”賦給“字符名稱”,需要注意的是,這里的字符名稱不同于標(biāo)號(hào)(其后面沒有冒

7、號(hào)),但它是必需的,其中的項(xiàng)可以是數(shù)也可以是匯編符號(hào)。用equ賦過值的符號(hào)名稱必須先定義后使用,這些被定義的字符名稱可以用做數(shù)據(jù)地址、代碼地址、位地址或一個(gè)立即數(shù)。因此它可以是8位的,也可以是16位的。例如下面的代碼。aa equ r1mov a, aa這里aa就代表了工作寄存器r1。(5)data數(shù)據(jù)地址賦值命令格式:字符名稱 data 數(shù)據(jù)或表達(dá)式此命令把數(shù)據(jù)地址或代碼地址賦予標(biāo)號(hào)段規(guī)定的字符名稱。被定義的字符名稱也可以先使用后定義。例如下面的代碼。 org 8000hindexj data 8096h ljmp indexj等價(jià)于如下代碼。org 8000hljmp 8096hdata和

8、equ的區(qū)別在于用data定義的字符名稱作為標(biāo)號(hào)登記在符號(hào)表中,故可先使用后定義;而用equ定義的字符名稱必須先定義后使用,其原因是equ不定義在符號(hào)表中。(6)ds定義存儲(chǔ)空間偽指令在匯編時(shí),從指令地址開始保留ds之后表達(dá)式的值所規(guī)定的存儲(chǔ)單元。例如下面的代碼。org 1000hds 07hdb 20h, 20dw 12h經(jīng)匯編后,從地址1000h開始保留7個(gè)單元,然后從1007h處存儲(chǔ)器的內(nèi)容如下:(1007h)=20h(1008h)=14h(1009h)=00h(100ah)=12hdb、dw、ds偽指令都只對(duì)程序存儲(chǔ)器起作用,它們不能對(duì)數(shù)據(jù)存儲(chǔ)器進(jìn)行初始化。(7)bit定義位符號(hào)偽指令

9、格式:字符名稱 bit 位地址這里的字符名稱與標(biāo)號(hào)不同,但它是必需的,其功能是把bit之后的位地址賦給字符名稱。例如下面的代碼。p11 bit p1.1這樣,p1口的位1地址91h就賦給了p1.1。(8)end匯編結(jié)束偽指令end偽指令通知匯編程序結(jié)束匯編,在end之后即使還有指令,匯編程序也不做處理。在程序中可以有多條end指令,一般在程序的最后需要一條end偽指令,否則匯編程序會(huì)提示警告錯(cuò)誤。當(dāng)然這不會(huì)影響程序的正常執(zhí)行。3.2 at89s51單片機(jī)的尋址方式所謂尋址方式就是如何尋找存放操作數(shù)的空間地址,并把操作數(shù)提取出來的方法,它是單片機(jī)的重要性能指標(biāo)之一,也是匯編語言程序設(shè)計(jì)的最基本的

10、內(nèi)容之一。在匯編程序設(shè)計(jì)中,數(shù)據(jù)的存放、傳送、運(yùn)算都要通過指令來完成,編程過程中必須自始至終都十分清楚操作數(shù)的位置,以便將它們傳送到適當(dāng)?shù)目臻g去操作,這些都要針對(duì)系統(tǒng)的硬件環(huán)境編程。因此,如何尋找存放操作數(shù)的空間位置和提取操作數(shù)就十分重要。mcs-51單片機(jī)有8種尋址方式,分別為寄存器尋址、直接尋址、立即尋址、寄存器間接尋址、基寄存器加變址寄存器間接尋址、相對(duì)尋址、位尋址和頁面尋址,下面作詳細(xì)講解。3.2.1 立即尋址立即尋址方式中操作數(shù)包含在指令字節(jié)中,操作碼后面緊跟的是1b或2b操作數(shù)(稱為立即數(shù)),即操作數(shù)以指令字節(jié)的形式存放于程序存儲(chǔ)器中,在編寫程序時(shí)用井號(hào)“#”開頭表示立即數(shù),以區(qū)別

11、于直接地址。例如下面的代碼。mov a, #5ah ;5ah amov dptr, #2000h ;2000h dptr3.2.2 直接尋址直接尋址方式在指令中直接給出操作數(shù)所在存儲(chǔ)單元的地址,該地址指出了參與運(yùn)算或傳送的數(shù)據(jù)所在的字節(jié)單元或位的地址。直接尋址方式用來訪問以下三種存儲(chǔ)空間。(1)特殊功能寄存器(特殊功能寄存器只能用直接尋址方式訪問,即可以用它們的地址,也可以用它們的名字);(2)內(nèi)部數(shù)據(jù)存儲(chǔ)器的低128b(對(duì)于8032系列芯片,其內(nèi)部數(shù)據(jù)存儲(chǔ)器高128b,地址為 80h0ffh不能用直接尋址方式訪問);(3)位地址空間。例如下面的代碼。mov a, 5ah ;(5ah) a是把

12、片內(nèi)ram中的5ah這個(gè)地址單元的內(nèi)容送入累加器a。又如下面的代碼。mov a, p1 ;(p1) a是把sfr中p1口的內(nèi)容送入累加器a,它也可以寫成如下形式。mov a, 90h其中90h就是p1口的地址。直接尋址的地址需占1個(gè)字節(jié),所以一條直接尋址方式的指令至少需要占兩個(gè)內(nèi)存單元。3.2.3 寄存器尋址寄存器尋址就是由指令指出某一個(gè)寄存器的內(nèi)容為操作數(shù),對(duì)所選的工作寄存器組r0r7進(jìn)行操作,累加器acc、寄存器b、數(shù)據(jù)指針dptr和進(jìn)位c(布爾處理機(jī)的累加器c)也可用寄存器尋址的方式進(jìn)行訪問,只是它們的尋址具體寄存器名會(huì)隱含在操作碼中。例如下面的代碼。mov a, r0 ;(r0)amo

13、v p1, a ;(a) p1口3.2.4 寄存器間接尋址操作數(shù)的地址事先存放在某個(gè)工作寄存器中,寄存器間接尋址方式是把指定寄存器的內(nèi)容作為地址,由該地址所指定的單元內(nèi)容作為操作數(shù)。at89s51單片機(jī)規(guī)定r0和r1為間接尋址寄存器,即地址指針(對(duì)堆棧操作指令用堆棧指針sp),它可尋址內(nèi)部ram低128b地址單元的內(nèi)容。寄存器間接尋址方式也可適用于訪問外部擴(kuò)展的數(shù)據(jù)存儲(chǔ)器,用r0、r1或dptr作為數(shù)據(jù)指針,當(dāng)用r0、r1作為數(shù)據(jù)指針訪問片外ram時(shí)又稱為頁面尋址。寄存器間接尋址用符號(hào)開頭表示操作數(shù)。例如下面的代碼。mov a, r0 ;(r0) a指令中所規(guī)定的工作寄存器r0的內(nèi)容為地址指針

14、,將該地址指針單元的內(nèi)容發(fā)送給累加器a。3.2.5 相對(duì)尋址相對(duì)尋址方式是以當(dāng)前的pc值為基準(zhǔn),加上指令中給定的偏移量rel,所得的結(jié)果作為轉(zhuǎn)移地址。一般將相對(duì)轉(zhuǎn)移指令操作碼所在的地址稱為源地址,轉(zhuǎn)移后的地址稱為目的地址,則目的地址的計(jì)算方法如下:目的地址=源地址+相對(duì)轉(zhuǎn)移指令字節(jié)數(shù)+relat89s51單片機(jī)指令中相對(duì)轉(zhuǎn)移指令字節(jié)數(shù)既有2個(gè)字節(jié)的,也有3個(gè)字節(jié)的,偏移量為有符號(hào)數(shù),其取值范圍為-128b+127b,在程序中一般以補(bǔ)碼表示。3.2.6 基址加變址尋址基址寄存器加變址寄存器間接尋址的尋址方式是以16位的pc或dptr作為寄存器的,以8位的累加器a作為變址寄存器,基址寄存器和變址寄

15、存器的內(nèi)容相加形成新的16位的地址,該地址為操作數(shù)的地址。在mcs-51單片機(jī)中,用變址尋址方式只能訪問程序存儲(chǔ)器。訪問時(shí)只能從rom中讀取數(shù)據(jù)而不能寫入數(shù)據(jù)。故這種尋址方式多用于查表操作。例如下面的代碼。movc a, a+dptr表示基址寄存器dptr的內(nèi)容與變址寄存器累加器a的內(nèi)容相加形成新的16位地址,該地址單元的內(nèi)容發(fā)送到累加器a。3.2.7 位尋址在計(jì)算機(jī)中,操作數(shù)不僅可以按字節(jié)為單位進(jìn)行存取和操作,而且也可以按8位二進(jìn)制數(shù)中的某一位為單位進(jìn)行存取和操作。位尋址方式是其操作數(shù)是8位二進(jìn)制中的某一位。在指令中給出的是位地址,即給出片內(nèi)ram某一單元中的一位。位地址在指令中用bit表示

16、。at89s51單片機(jī)片內(nèi)ram有兩個(gè)區(qū)域可以進(jìn)行位尋址,其一是20h2fh的16個(gè)單元的 128位;其二是字節(jié)地址為8的倍數(shù)的特殊功能寄存器。at89s51單片機(jī)中位尋址常用以下兩種方式表示。(1)直接使用位地址。對(duì)于20h2fh的16個(gè)單元共128位的位地址一般采用直接使用位地址的方式,如位地址08h表示21h單元的0位。(2)對(duì)于特殊功能寄存器,還可以直接用寄存器名字加位數(shù)表示,如psw.3(或位地址0d3h)。例如下面的代碼。mov c, 01h ;01h為位地址3.2.8 頁面尋址用寄存器間接尋址方式訪問外部擴(kuò)展的數(shù)據(jù)存儲(chǔ)器,當(dāng)用r0、r1作為地址指針訪問片外ram時(shí)的尋址方式稱為頁

17、面尋址。頁面地址由p2口的內(nèi)容決定,頁面內(nèi)的地址由r0或r1的內(nèi)容決定。例如下面的代碼:mov p2, #0a0hmov r0, #01hmov a, #10hmov ro, a表示將累加器a中的數(shù)據(jù)10h傳送到頁面為a0h,頁內(nèi)地址為01h的外部數(shù)據(jù)存儲(chǔ)器地址單元,即實(shí)際傳送到0a001h地址單元。3.2.9 尋址方式與存儲(chǔ)器的對(duì)應(yīng)雖然at89s51單片機(jī)的尋址方式有很多種,但指令對(duì)哪一個(gè)存儲(chǔ)器空間進(jìn)行操作是由指令的操作碼和尋址方式確定的。一般來說,有以下幾點(diǎn)。 程序存儲(chǔ)器:只能采用立即尋址和基寄存器加變址寄存器間接尋址的尋址方式; 特殊功能寄存器空間:只能采用直接尋址方式,不能采用寄存器間

18、接尋址方式; 內(nèi)部數(shù)據(jù)存儲(chǔ)器高128b:只能采用寄存器間接尋址方式,不能采用直接尋址方式; 內(nèi)部數(shù)據(jù)存儲(chǔ)器低128b:既能采用寄存器間接尋址方式,又能采用直接尋址方式; 外部擴(kuò)展的數(shù)據(jù)存儲(chǔ)器:只能采用movx指令訪問。3.3at89s51單片機(jī)的數(shù)據(jù)傳送指令at89s51單片機(jī)指令系統(tǒng)共有42種操作助記符來描述33種操作功能,由111條指令組成。其中單字節(jié)指令49條,雙字節(jié)指令45條,三字節(jié)指令17條,下面分別介紹。cpu在進(jìn)行算術(shù)和邏輯操作時(shí),絕大多數(shù)指令都有操作數(shù),所以數(shù)的傳送是一種最基本、最主要的操作。在通常的應(yīng)用程序中,傳送指令在程序中占著極大的比例,數(shù)據(jù)傳送是否靈活、迅速,對(duì)整個(gè)程序

19、的編寫和執(zhí)行都起著很大的作用。mcs-51單片機(jī)為用戶提供了極豐富的數(shù)據(jù)傳送指令,功能很強(qiáng),其數(shù)據(jù)傳送指令可以在累加器a、工作寄存器r0r7、內(nèi)部數(shù)據(jù)存儲(chǔ)器、外部數(shù)據(jù)存儲(chǔ)器和程序存儲(chǔ)器之間進(jìn)行,其中對(duì)累加器a和r0r7的操作較多。其中數(shù)據(jù)傳送指令又可分為三類,即數(shù)據(jù)傳送、數(shù)據(jù)交換和棧操作。這類指令有mov、movx、movc、xch、xchd、swap、pop、push8種操作助記符。數(shù)據(jù)傳送指令一般的操作是把源操作數(shù)的內(nèi)容傳到目的操作數(shù),指令執(zhí)行后,一般是源操作數(shù)的內(nèi)容不變,目的操作數(shù)的內(nèi)容修改為源操作數(shù)的內(nèi)容,或者源操作數(shù)和目的操作數(shù)的內(nèi)容互換。3.3.1 以累加器a為目的操作數(shù)的指令以累

20、加器a為目的操作數(shù)的指令如下所示。 mov a, rn ; 寄存器尋址,(rn) a, n=07 mov a, direct ; 直接尋址,(direct) a mov a,ri ; 間接尋址,(ri) a,i=0或1 mov a,#data ; 立即尋址,data a這組指令的功能是把源操作數(shù)的內(nèi)容送到累加器a,源操作數(shù)的內(nèi)容不發(fā)生改變。3.3.2 以rn為目的操作數(shù)的指令以rn為目的操作數(shù)的指令如下所示。 mov rn, a ; 寄存器尋址,(a)rn mov rn, direct ; 直接尋址,(direct) rn mov rn,#data ; 立即尋址,data rn這組指令的功能是

21、把源操作數(shù)的內(nèi)容送到當(dāng)前工作寄存器組r0r7中的某一個(gè),源操作數(shù)的內(nèi)容不發(fā)生改變。3.3.3 以直接地址為目的操作數(shù)的指令以直接地址為目的操作數(shù)的指令如下所示。 mov direct, a ; 寄存器尋址,(a) (direct) mov direct, rn ; 直接尋址,(rn) (direct) mov direct1,direct2 ; 直接尋址,(direct2) (direct1) mov direct,ri ; 寄存器間接尋址,(ri) (direct) , i = 0 1 mov direct,#data ; 立即尋址,data (direct)這組指令的功能是把源操作數(shù)的內(nèi)容

22、送到直接地址指出的存儲(chǔ)單元。3.3.4 以間接地址為目的操作數(shù)的指令以間接地址為目的操作數(shù)的指令如下所示。 mov ri, a ; 寄存器尋址,(a)(ri) , i = 0 1 mov ri, direct ; 直接尋址,(direct)(ri) , i = 0 1 mov ri,#data ; 立即尋址,data (ri) , i = 0 1這組指令的功能是把源操作數(shù)的內(nèi)容送到以r0或r1內(nèi)容為地址的內(nèi)部ram存儲(chǔ)單元。3.3.5 16位數(shù)據(jù)傳送的指令16位數(shù)據(jù)傳送的指令如下所示。mov dptr,#data16 ; 立即尋址,data16dptr或datahdph,dataldpl這條指

23、令的功能是把16位立即數(shù)傳送到數(shù)據(jù)指針dptr,16位數(shù)據(jù)的高8位送入dph,低8位送入dpl。3.3.6 查表指令查表指令如下所示。 movc a, a+pc ; 基寄存器加變址寄存器間接尋址,(a)+(pc)a movc a, a+dptr ; 基寄存器加變址寄存器間接尋址,(a)+(dptr)a這組指令的功能是以基寄存器(pc或dptr)的內(nèi)容與變址寄存器a的內(nèi)容作為無符號(hào)數(shù)相加,組成新的16位地址,該地址單元的內(nèi)容送累加器a。這兩條指令專門用于當(dāng)數(shù)據(jù)放在程序存儲(chǔ)器中時(shí)來查數(shù)據(jù)表。這里應(yīng)特別注意pc總是指向下一條指令的地址。對(duì)于第條查表指令,因?yàn)楫?dāng)前的pc值是由查表指令本身的存儲(chǔ)空間決定

24、的,而變址寄存器a的內(nèi)容為0255,所以(a)和(pc)相加所得到的新地址只能在該表指令的下一個(gè)256個(gè)單元內(nèi),因此表格的大小受到了限制。第條查表指令與該指令存放的地址無關(guān),只是與數(shù)據(jù)指針dptr和累加器a的內(nèi)容有關(guān),因此數(shù)據(jù)表格大小和位置可以在64kb程序存儲(chǔ)器中任意安排。3.3.7 累加器a與片外ram數(shù)據(jù)傳送指令累加器a與片外ram數(shù)據(jù)傳送指令如下所示。 movx a, ri ; 頁面尋址,(p2)(ri) a , i = 0 1 movx a, dptr ; 寄存器間接尋址,(dptr) a movx ri, a ; 頁面尋址,(a)p2(ri) , i = 0 1 movx dptr

25、,a ; 寄存器間接尋址,a (dptr)這組指令的功能是將累加器a和外部擴(kuò)展的ram/io口之間的數(shù)據(jù)傳送。由于外部ram/io口是統(tǒng)一編址的,共占一個(gè)64kb的空間,所以從指令本身看不出是對(duì)ram還是對(duì)i/o口操作,而只能由硬件的地址分配情況來確定。3.3.8 堆棧操作指令堆棧操作指令如下所示。 push direct ; 直接尋址,(sp)+ 1 sp,(direct)(sp)這條指令的功能是首先將sp的內(nèi)容自動(dòng)加1,然后把直接地址指出的內(nèi)容傳送到sp尋址的內(nèi)部ram單元中。 pop direct ; 直接尋址,(sp) direct,(sp) 1sp這條指令的功能是將sp尋址的內(nèi)部ra

26、m單元的內(nèi)容送到直接地址所對(duì)應(yīng)的內(nèi)部ram字節(jié)單元中,然后sp的內(nèi)容減1。堆棧操作一般用于子程序調(diào)用,中斷等操作,這時(shí)候需要保護(hù)數(shù)據(jù)或保護(hù)cpu現(xiàn)場(chǎng),應(yīng)特別注意任何情況下push和pop都必須成對(duì)出現(xiàn)。其中也存在一些隱含的push和pop指令,如子程序調(diào)用lcall指令隱含壓棧兩次,子程序返回指令ret隱含彈棧兩次。3.3.9 交換指令交換指令如下所示。 xch a, rn ; 寄存器尋址,(a)(rn) xch a, direct ; 直接尋址,(a) (direct) xch a, ri ; 寄存器間接尋址,(a)(ri) , i = 0 1 xchd a, ri ; 寄存器間接尋址,(a

27、)03 (ri), i = 0 1 swap a ; 寄存器尋址,(a)03 (a)47數(shù)據(jù)傳送類指令一般是把源操作數(shù)的內(nèi)容傳到目的操作數(shù),指令執(zhí)行后,一般源操作數(shù)的內(nèi)容不變。前三個(gè)為字節(jié)交換指令,其功能是將累加器a的內(nèi)容和源操作數(shù)的內(nèi)容互換。第4條指令為半字節(jié)交換指令,其功能是將累加器a的內(nèi)容的低4位和源操作數(shù)的低4位相互交換,操作數(shù)的高4位字節(jié)內(nèi)容不變。即字節(jié)交換指令的源操作數(shù)的內(nèi)容也會(huì)發(fā)生改變。最后一條為累加器a自身半字節(jié)交換指令,其功能是將累加器a的內(nèi)容的低4位和高4位交換。3.4 at89s51單片機(jī)的算術(shù)操作指令mcs-51算術(shù)運(yùn)算類指令包括加、減、乘、除基本四則運(yùn)算和增量(加1)

28、、減量(減1)運(yùn)算,執(zhí)行結(jié)果將使進(jìn)位(cy)、輔助進(jìn)位(ac)、溢出(ov)標(biāo)志置位或復(fù)位。但加1和減1指令不影響以上標(biāo)志。算術(shù)/邏輯運(yùn)算(alu)部件僅執(zhí)行無符號(hào)二進(jìn)制整數(shù)的算術(shù)運(yùn)算。借助溢出標(biāo)志,可對(duì)帶符號(hào)數(shù)進(jìn)行補(bǔ)碼運(yùn)算;借助進(jìn)位標(biāo)志,可進(jìn)行多精度加、減運(yùn)算,也可以對(duì)壓縮的bcd碼數(shù)進(jìn)行運(yùn)算。這類指令有add、addc、inc、subb、dec、da、mul、div8種操作助記符。bcd碼為用二進(jìn)制表示的十進(jìn)制數(shù),由于一個(gè)09的十進(jìn)制數(shù)只需4位二進(jìn)制編碼,故1b(8位)中的高、低4位均可存放一個(gè)bcd數(shù),這種在1b中存放兩個(gè)bcd碼表示的數(shù)稱為壓縮的bcd碼。3.4.1 不帶進(jìn)位的加法指令

29、不帶進(jìn)位的加法指令如下所示。 add a, rn ; (a) + (rn) a add a, direct ; (a) + (direct) a add a, ri ; (a) + (ri) a add a, #data ; (a) + data a這組指令的功能是把累加器a的內(nèi)容與工作寄存器的內(nèi)容或內(nèi)部ram單元的內(nèi)容或立即數(shù)的8位無符號(hào)二進(jìn)制數(shù)相加,其和的結(jié)果存放在累加器a中。如果位7有進(jìn)位輸出,則置位進(jìn)位標(biāo)志cy,否則清零cy;如果位3有進(jìn)位輸出,則置位半進(jìn)位標(biāo)志ac,否則清零ac;如果位6有進(jìn)位輸出而位7沒有,或者位7有進(jìn)位輸出而位6沒有,則置位溢出標(biāo)志ov,否則清零ov。3.4.2

30、帶進(jìn)位的加法指令帶進(jìn)位的加法指令如下所示。 addc a, rn ; (a) + (rn) + cy a addc a, direct ; (a) + (direct) + cy a addc a, ri ; (a) + (ri) + cy a addc a, #data ; (a) + data + cy a這組指令的功能是把累加器a的內(nèi)容,與工作寄存器的內(nèi)容,或者內(nèi)部ram單元的內(nèi)容,或者立即數(shù)的8位無符號(hào)二進(jìn)制數(shù),和進(jìn)位標(biāo)志一起相加,其結(jié)果存放在累加器a中。如果位7有進(jìn)位輸出,則置位進(jìn)位標(biāo)志cy,否則清零cy;如果位3有進(jìn)位輸出,則置位半進(jìn)位標(biāo)志ac,否則清零ac;如果位6有進(jìn)位輸出而位

31、7沒有,或者位7有進(jìn)位輸出而位6沒有,則置位溢出標(biāo)志ov,否則清零ov。當(dāng)進(jìn)位標(biāo)志為0時(shí),其結(jié)果與不帶進(jìn)位標(biāo)志位的加法指令的運(yùn)算結(jié)果相同。3.4.3 帶進(jìn)位的減法指令帶進(jìn)位的減法指令如下所示。 subb a, rn ; (a) - (rn) - cy a subb a, direct ; (a) - (direct) - cy a subb a, ri ; (a) - (ri) - cy a subb a, #data ; (a) - data - cy a這組指令的功能是把累加器a的內(nèi)容,減去工作寄存器的內(nèi)容,或者減去內(nèi)部ram單元的內(nèi)容,或者減去立即數(shù)的8位無符號(hào)二進(jìn)制數(shù),并減去進(jìn)位標(biāo)志,

32、其結(jié)果存放到累加器a中。如果位7需借位,則置位進(jìn)位標(biāo)志cy,否則清零cy;如果位3需借位,則置位半進(jìn)位標(biāo)志ac,否則清零ac;如果位6需借位而位7不需借位,或者位7需借位而位6不需借位,則置位溢出標(biāo)志ov,否則清零ov。3.4.4 增量(加1)指令增量(加1)指令如下所示。 inc a ; (a) + 1 a inc rn ; (rn) + 1 rn inc ri ; (ri) + 1 (ri) inc direct ; (direct) + 1 direct inc dptr ; (dptr) + 1dptr這組增量指令的功能是將操作數(shù)所指定單元的內(nèi)容加1,除對(duì)累加器a操作影響p標(biāo)志位外,此

33、操作不影響其他標(biāo)志位。3.4.5 減量(減1)指令減量(減1)指令如下所示。 dec a ; (a) - 1 a dec rn ; (rn) - 1 rn dec ri ; (ri) - 1 (ri) dec direct ; (direct) - 1 direct這組減量指令的功能是將操作數(shù)所指定單元的內(nèi)容減1,除對(duì)累加器a操作影響p標(biāo)志位外,此操作不影響其他標(biāo)志位。3.4.6 十進(jìn)制調(diào)整指令十進(jìn)制調(diào)整指令如下所示。da a這條指令跟在加法指令(add、addc)指令后,對(duì)累加器a中8位結(jié)果進(jìn)行調(diào)整,使它調(diào)整為壓縮的bcd碼表示的數(shù),以完成十進(jìn)制加法運(yùn)算功能。兩個(gè)壓縮的bcd碼按二進(jìn)制數(shù)相加

34、之后,必須經(jīng)該指令調(diào)整后才能得到壓縮的bcd碼的和數(shù),具體如下所示。 若a309或ac=1,則(a) + 06h a 若a749或cy=1,則(a) + 60h a3.4.7 乘法指令乘法指令如下所示。mul a b這條指令的功能是把累加器a和寄存器b中的兩個(gè)8位無符號(hào)數(shù)相乘,其16位積的低8位字節(jié)放在累加器a中,高8位字節(jié)放在寄存器b中。如果積大于255(0ffh),則置位溢出標(biāo)志ov,進(jìn)位標(biāo)志cy總是清零。3.4.8 除法指令除法指令如下所示。div a b這條指令的功能是把累加器a中的8位無符號(hào)數(shù),除以寄存器b中的8位無符號(hào)數(shù),所得商的整數(shù)部分存放在累加器a中,余數(shù)保留寄存器b中。如果原

35、來b中的內(nèi)容為0,即除數(shù)為0,則結(jié)果a和b中內(nèi)容不定,此時(shí)置位溢出標(biāo)志ov,進(jìn)位標(biāo)志cy總是清零。3.5 at89s51單片機(jī)的邏輯與移位指令mcs-51邏輯運(yùn)算類指令包括清除、求反、移位及與、或、異或等操作。這類指令有clr、cpl、rl、rlc、rr、rrc、anl、orl、xrl9種操作助記符。3.5.1 對(duì)累加器a的單操作數(shù)的邏輯操作指令對(duì)累加器a的單操作數(shù)的邏輯操作指令如下所示。 clr a ; (a)=0這條指令的功能是將累加器a的內(nèi)容清零,即(a)=0,不影響cy標(biāo)志位、ac標(biāo)志位和ov標(biāo)志位,只影響p標(biāo)志位。 cpl a ; (a) a這條指令的功能是將累加器a的內(nèi)容逐位邏輯取

36、反,不影響標(biāo)志位。 rl a這條指令的功能是將累加器a的內(nèi)容向左循環(huán)移1位,不影響標(biāo)志位。 rr a這條指令的功能是將累加器a的內(nèi)容向右循環(huán)移1位,不影響標(biāo)志位。 rlc a這條指令的功能是將累加器a的內(nèi)容和進(jìn)位標(biāo)志位cy一起向左循環(huán)移1位,不影響ac標(biāo)志位、ov標(biāo)志位。 rrc a這條指令的功能是將累加器a的內(nèi)容和進(jìn)位標(biāo)志位cy一起向右循環(huán)移1位,不影響ac標(biāo)志位、ov標(biāo)志位。3.5.2 兩個(gè)操作數(shù)的邏輯操作指令兩個(gè)操作數(shù)的邏輯操作指令如下所示。(1)邏輯與操作指令 anl a, rn ; (a)(rn) a anl a, direct ; (a)(direct) a anl a, #dat

37、a ; (a)data a anl a, ri ; (a)(ri) a anl direct, a ; (direct)(a) direct anl direct, #data ; (direct)data direct這組指令的前4條指令是將累加器a的內(nèi)容,與第二操作數(shù)所指出的內(nèi)容,按位進(jìn)行邏輯與操作,結(jié)果存放在a中。后兩條指令是將直接地址單元中的內(nèi)容,與第二操作數(shù)所指出的內(nèi)容按位進(jìn)行邏輯與操作,結(jié)果存放在直接地址單元中。(2)邏輯或操作指令 orl a, rn ; (a)(rn) a orl a, direct ; (a)(direct) a orl a, #data ; (a)data

38、a orl a, ri ; (a)(ri) a orl direct, a ; (direct)(a) direct orl direct, #data ; (direct)data direct這組指令的前4條指令是將累加器a的內(nèi)容,與第二操作數(shù)所指出的內(nèi)容,按位進(jìn)行邏輯或操作,結(jié)果存放在a中。后兩條指令是將直接地址單元中的內(nèi)容,與第二操作數(shù)所指出的內(nèi)容,按位進(jìn)行邏輯或操作,結(jié)果存放在直接地址單元中。(3)邏輯異或操作指令 xrl a, rn ; (a)(rn) a xrl a, direct ; (a)(direct) a xrl a, #data ; (a)data a xrl a, r

39、i ; (a)(ri) a xrl direct, a ; (direct)(a) direct xrl direct, #data ; (direct)data direct這組指令的前4條指令是將累加器a的內(nèi)容,與第二操作數(shù)所指出的內(nèi)容,按位進(jìn)行邏輯異或操作,結(jié)果存放在a中。后兩條指令是將直接地址單元中的內(nèi)容,與第二操作數(shù)所指出的內(nèi)容,按位進(jìn)行邏輯異或操作,結(jié)果存放在直接地址單元中。3.6 at89s51單片機(jī)的程序控制流指令計(jì)算機(jī)在運(yùn)行過程中,有時(shí)因?yàn)椴僮鞯男枰蛞虺绦蜉^復(fù)雜,程序指令往往不能按順序逐條運(yùn)行,需要改變程序運(yùn)行方向,即將程序跳轉(zhuǎn)到某個(gè)指定的地址處再執(zhí)行。某些指令具有修改pc

40、的功能(如位操作指令jc、jnc、jb、jnb、jbc等),因?yàn)閜c的內(nèi)容總是指向?qū)⒁獔?zhí)行的下一條指令地址,所以計(jì)算機(jī)執(zhí)行這一類指令就能控制程序轉(zhuǎn)移到新的pc地址去執(zhí)行。除部分位操作指令能控制轉(zhuǎn)移外,mcs-51還有豐富的控制轉(zhuǎn)移類指令,包括無條件轉(zhuǎn)移、條件轉(zhuǎn)移,以及調(diào)用和返回指令。這類指令有ajmp、ljmp、sjmp、jmp、jz、jnz、cjnz、djnz、acall、lcall、ret、reti、nop13種操作助記符。3.6.1 無條件轉(zhuǎn)移指令無條件轉(zhuǎn)移指令如下所示。(1)絕對(duì)跳轉(zhuǎn)指令ajmp addr11 ; (pc)+2pc, addr100pc100這是2kb尋址范圍內(nèi)的無條件

41、轉(zhuǎn)移指令,是絕對(duì)跳轉(zhuǎn)。跳轉(zhuǎn)的目的地址必須與ajmp的下一條指令的第一個(gè)字節(jié)在同一個(gè)2kb尋址范圍內(nèi),這是因?yàn)樘D(zhuǎn)的目的地址與ajmp的下一條指令的第一個(gè)字節(jié)的高5位addr1511相同。這條指令是為與mcs-48兼容而保留的指令,現(xiàn)在一般很少使用。(2)相對(duì)跳轉(zhuǎn)指令sjmp rel ; (pc)+2rel pc這條指令執(zhí)行的時(shí)候先將pc的內(nèi)容加2,再加相對(duì)偏移量rel,計(jì)算出跳轉(zhuǎn)目的地址。rel是一個(gè)帶符號(hào)的字節(jié)數(shù),在程序中用補(bǔ)碼表示,其值范圍為-128b+127b,當(dāng)rel為正數(shù)時(shí)表示正向跳轉(zhuǎn),為負(fù)數(shù)時(shí)表示負(fù)向跳轉(zhuǎn)。(3)長跳轉(zhuǎn)指令ljmp addr16 ; addr16 pc這條指令執(zhí)行時(shí)

42、把16位操作數(shù)的高低8位分別裝入pc的pch和pcl,無條件地轉(zhuǎn)向指定地址。跳轉(zhuǎn)的目的地址可以在64kb程序存儲(chǔ)器地址空間的任何地方,不影響任何標(biāo)志位。(4)間接跳轉(zhuǎn)指令jmp a+dptr這條指令的功能是把累加器a中的8位無符號(hào)數(shù)與數(shù)據(jù)指針dptr中的16位地址相加,相加形成的16位新地址送入pc。指令執(zhí)行過程不改變累加器和數(shù)據(jù)指針的內(nèi)容,也不影響標(biāo)志位。3.6.2 條件轉(zhuǎn)移指令條件轉(zhuǎn)換指令如下所示。(1)判零跳轉(zhuǎn)指令 jz rel ; 若(a)=0,則pc+2+relpc,若(a)0,則pc+2 pc jnz rel ; 若(a)0,則pc+2+relpc,若(a)=0,則pc+2 pc這

43、組指令的功能是若滿足條件則轉(zhuǎn)移到目的地址去執(zhí)行,不滿足條件則順序執(zhí)行下一條指令。目的地址在以下一條指令的起始地址為中心的256b范圍內(nèi)(-128b+127b)。(2)比較不相等跳轉(zhuǎn)指令cjne a, direct, rel該指令執(zhí)行的過程如下:(a)=(direct),則(pc)+3pc, cy=0(a)(direct),則(pc)+3+relpc, cy=0(a)data,則(pc)+3+relpc, cy=0(a)data,則(pc)+3+relpc, cy=0(rn)data,則(pc)+3+relpc, cy=0(ri)data,則(pc)+3+relpc, cy=1這組指令的功能是比

44、較兩個(gè)操作數(shù)的大小,如果它們的值不相等,則跳轉(zhuǎn)。當(dāng)?shù)谝徊僮鲾?shù)內(nèi)容小于第二操作數(shù)的內(nèi)容,則置位進(jìn)位標(biāo)志cy,否則清零cy。(3)減1不為0跳轉(zhuǎn)指令djnz rn, rel該指令執(zhí)行過程如下:(pc)+ 2 pc(rn)- 1 rn 若(rn)0,則(pc)+ rel pc,若(rn)=0,則循環(huán)結(jié)束,程序往下執(zhí)行djnz direct,rel該指令執(zhí)行過程如下:(pc)+3 pc(direct)-1 direct 若(direct)0,則(pc)+relpc,若(direct)=0,則循環(huán)結(jié)束,程序往下執(zhí)行這組指令的功能是程序每執(zhí)行一次本指令,將其第一操作數(shù)所指向的地址單元的內(nèi)容減1,然后判斷其

45、值是否為0,若不為0,則轉(zhuǎn)移到目的地址,繼續(xù)執(zhí)行循環(huán)程序,若為0則結(jié)束循環(huán)程序段的執(zhí)行,程序往下執(zhí)行。3.6.3 調(diào)用和返回指令調(diào)用和返回指令如下所示。(1)短調(diào)用指令acall addr11該指令執(zhí)行過程如下:(pc)+2 pc(sp)+1 sp,(pc07)(sp),pc低8位壓棧(sp)+1 sp,(pc815)(sp),pc高8位壓棧 addr015 pc010這是2kb尋址范圍內(nèi)的無條件短調(diào)用指令,所調(diào)用的目標(biāo)地址必須與acall的下一條指令的第一個(gè)字節(jié)在同一個(gè)2kb范圍內(nèi),這是因?yàn)檎{(diào)用的目的地址acall的下一條指令的第一個(gè)字節(jié)的高5位addr1511相同。這條指令隱含兩次壓棧操作

46、,壓棧時(shí)先壓pc的低8位,后壓pc高8位。這條指令是為與mcs-48兼容而保留的指令,現(xiàn)在一般很少使用。(2)長調(diào)用指令lcall addr16該指令執(zhí)行過程如下:(pc)+3 pc(sp)+1 sp,(pc07)(sp),pc低8位壓棧 (sp)+1 sp,(pc815)(sp),pc高8位壓棧 addr015 pc這條指令是無條件調(diào)用由addr16提供的16位目標(biāo)地址所指定的子程序,即子程序的首地址可設(shè)置在64kb程序存儲(chǔ)器地址空間的任何位置。這條指令隱含兩次壓棧操作,壓棧時(shí)先壓pc的低8位,后壓pc高8位。(3)從子程序返回指令ret該指令的執(zhí)行過程如下:(sp) pc815(sp)-1

47、 sp(sp) pc07(sp)-1 sp這條指令的功能是當(dāng)程序執(zhí)行到本指令時(shí),表示結(jié)束子程序的執(zhí)行,返回到調(diào)用子程序的指令(acall或lcall)的下一條指令處(端點(diǎn))繼續(xù)往下執(zhí)行。這條指令隱含兩次彈棧操作,彈棧時(shí)先彈pc的高8位,后彈pc低8位。(4)從中斷返回指令reti該指令執(zhí)行的過程如下:(sp) pc815(sp)-1 sp(sp) pc07(sp)-1 sp這條指令除了完成ret指令的功能外,還清除內(nèi)部相應(yīng)的中斷狀態(tài)寄存器觸發(fā)器(該觸發(fā)器是不可尋址的,由cpu響應(yīng)中斷時(shí)置位,指示cpu當(dāng)前是否處理高級(jí)或低級(jí)中斷)。因此,中斷服務(wù)程序一般以reti指令結(jié)束。cpu執(zhí)行reti指令

48、后至少需再執(zhí)行一條指令才能響應(yīng)新的中斷請(qǐng)求。同樣,這條指令隱含兩次彈棧操作,彈棧時(shí)先彈pc的高8位,后彈pc的低8位。3.6.4 空操作指令空操作指令如下所示。nop ; (pc)+1 pc該指令除了完成pc內(nèi)容加1外,不影響其他寄存器和標(biāo)志位。該指令常用來產(chǎn)生一個(gè)機(jī)器周期的延時(shí)。3.7 at89s51單片機(jī)的位操作指令mcs-51系列單片機(jī)內(nèi)有一個(gè)布爾處理機(jī),它具有一套處理位變量的指令集,它以進(jìn)位標(biāo)志cy作為累加器c,以ram地址20h2fh單元中的128位和地址為8的倍數(shù)的特殊功能寄存器的位地址單元作為操作數(shù),進(jìn)行位變量的傳送、位狀態(tài)控制、修改和位邏輯操作等操作。這類指令有mov、clr、

49、cpl、setb、anl、orl、jc、jnc、jb、jnb、jbc11種操作助記符。在匯編語言中位地址的描述方式有多種,如下所示。 直接位地址方式。如d4h。 操作符號(hào)方式(特殊功能寄存器名)。如psw.4、(d0h).4。 位地址方式。如rs1。 用戶定義方式。如用偽指令bit定義,代碼如下:gz.reg bit rs1經(jīng)定義后,允許指令中用gz.reg代替rs1。3.7.1 位數(shù)據(jù)傳送指令位數(shù)據(jù)傳送指令如下所示。 mov c, bit ; (bit) cy mov bit, c ; cy(bit)這組指令的功能是把由源操作數(shù)指向的位變量,送到目的操作數(shù)指定的位單元中。其中以進(jìn)位標(biāo)志cy作

50、為累加器c,即其中一個(gè)操作數(shù)為位累加器c,另一個(gè)操作數(shù)可以是任何直接尋址的位(如ram地址20h2fh單元中128個(gè)位地址和地址為8的倍數(shù)的特殊功能寄存器的位地址)。該指令不影響其他寄存器或標(biāo)志位。3.7.2 位變量修改指令位變量修改指令如下所示。 clr c clr bit cpl c cpl bit setb c setb bit這組指令的功能分別是清零、取反、置位進(jìn)位標(biāo)志位或直接尋址位,不影響其他寄存器或標(biāo)志位。3.7.3 位變量邏輯與、或指令位變量邏輯與、或指令如下所示。 anl c, bit ; (cy)(bit) cy anl c, /bit ; (cy)(/bit) cy orl

51、 c, bit ; (cy)(bit) cy orl c, /bit ; (cy)(/bit) cy這組指令的功能是把位累加器c的內(nèi)容與直接地址的內(nèi)容進(jìn)行邏輯與、或操作,結(jié)果送到位累加器c中。第二操作數(shù)前的斜杠“/”表示對(duì)該位取反后再參與邏輯運(yùn)算,但該位原來的值不發(fā)生改變。3.7.4 位變量條件轉(zhuǎn)移指令位變量條件轉(zhuǎn)移指令如下所示。 jc rel ; 若cy=1,則pc+2+relpc,若cy=0,則pc+2 pc jnc rel ; 若cy=0,則pc+2+relpc,若cy=1,則pc+2 pc jb bit, rel ; 若(bit)=1,則pc+3+relpc,若(bit)=0,則pc+3 pc jnb bit, rel ; 若(bit)=0,則pc+3+relpc,若(bit)=1,則pc

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(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)論