版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第3章89C51單片機(jī)匯編語言簡介教學(xué)目標(biāo)本章主要介紹89C51單片機(jī)的尋址方式、指令系統(tǒng)、基本程序結(jié)構(gòu)及匯編語言程序的編寫,并給出了兩個(gè)簡單的應(yīng)用實(shí)例。通過本章節(jié)的學(xué)習(xí),讀者應(yīng)初步掌握89C51單片機(jī)匯編語言的基本指令,并能夠完成一些簡單程序的編寫和調(diào)試。任務(wù)導(dǎo)入:基于匯編語言的靜態(tài)LED顯示系統(tǒng)的實(shí)現(xiàn):利用89C51單片機(jī)的I/O端口驅(qū)動(dòng)一個(gè)共陽極數(shù)碼管,在數(shù)碼管上循環(huán)顯示09數(shù)字,時(shí)間間隔0.5秒。任務(wù)分析要實(shí)現(xiàn)用一個(gè)數(shù)碼管循環(huán)顯示數(shù)字09的功能,我們可把數(shù)碼管的段選線連接到單片的I/O口上,再通過程序讓單片機(jī)的I/O口分時(shí)輸出09對(duì)應(yīng)的段碼就可以了。單片機(jī)的程序又如何編寫呢?通過本章的
2、學(xué)習(xí),就可以用單片機(jī)的匯編語言讓數(shù)碼管按照要求進(jìn)行顯示。任務(wù)必備知識(shí)3.189C51單片機(jī)指令系統(tǒng)3.1.189C51單片機(jī)指令分類89C51單片機(jī)指令系統(tǒng)共有111條指令。這些指令可按不同方法進(jìn)行分類:1按字節(jié)數(shù)分單字節(jié)指令(49條)、雙字節(jié)指令(45條)、三字節(jié)指令(17條)。2按指令的執(zhí)行時(shí)間分單機(jī)器周期指令(64條)、雙機(jī)器周期指令(45條)、四機(jī)器周期指令(2條)。3按指令的功能分?jǐn)?shù)據(jù)傳送指令(28條)、算術(shù)運(yùn)算指令(24條)、邏輯運(yùn)算指令(25條)、控制轉(zhuǎn)移指令(17條)、位操作指令(17條)。指令一般由兩部分組成,即操作碼和操作數(shù)。在介紹指令系統(tǒng)前,我們先了解一些特殊符號(hào)的意義,
3、這對(duì)今后程序的編寫是相當(dāng)有用的。Rn當(dāng)前選中的寄存器區(qū)的8個(gè)工作寄存器R0R7(n=0-7)。Ri當(dāng)前選中的寄存器區(qū)中可作為地址寄存器的兩個(gè)寄存器R0和R1(i=0,1)direct內(nèi)部數(shù)據(jù)存儲(chǔ)單元的8位地址。包含0127(255)內(nèi)部存儲(chǔ)單元地址和特殊功能寄存地址。#data指令中的8位常數(shù)。#data16指令中的16位常數(shù)。addr16用于LCALL和LJMP指令中的16目的地地址,目的地址的空間為64kB程序存儲(chǔ)器地址。#addr11用于ACALL和AJMP指令中的11目的地地址,目的地址必須放在與下條指令第一個(gè)字節(jié)同一個(gè)2kB程序存儲(chǔ)器空間之中。rel8位帶符號(hào)的偏移字節(jié),用于所有的條
4、件轉(zhuǎn)移和SJMP等指令中,偏移字節(jié)對(duì)于下條指令的第一個(gè)字節(jié)開始的-128+127范圍內(nèi)。間接寄存器尋址或基址寄存器的前綴。/為操作的前綴,聲明對(duì)該位操作數(shù)取反。DPTR數(shù)據(jù)指針。bit內(nèi)部RAM和特殊功能寄存器的直接尋址位。A累加器。B累加器B,用于乘法和除法指令中。C進(jìn)位標(biāo)志位。(x)某地址單元中的內(nèi)容。(x)由X尋址單元中的內(nèi)容。3.1.2匯編指令格式各種匯編語言的語句格式是基本相同的,表示如下:標(biāo)號(hào): 操作碼助記符 第一操作數(shù) ,第二操作數(shù) ,第三操作數(shù) ;注釋 即一條匯編語句是由標(biāo)號(hào)、操作碼、操作數(shù)和注釋四個(gè)都分所組成。其中方括號(hào)括起來的是可選擇部分,可有可無,視需要而定。1標(biāo)號(hào)標(biāo)號(hào)是
5、表示指令位置的符號(hào)地址,它是以英文字母開始的字母或數(shù)字組成的字符串,并以“:”結(jié)尾。通常在子程序入口或轉(zhuǎn)移指令的目標(biāo)地址處才賦予標(biāo)號(hào)。有了標(biāo)號(hào),程序中的其它語句才能訪問該語句。89C51匯編語言有關(guān)標(biāo)號(hào)的規(guī)定如下:1)標(biāo)號(hào)是由ASCII字符組成,但頭一個(gè)字符必須是字母,其余字符可以是字母、數(shù)字或其它特定字符。2)不能使用本匯編語言已經(jīng)定義了的符號(hào)作為標(biāo)號(hào),如指令助記符,偽指令助記符以及寄存器的符號(hào)名稱等。3)標(biāo)號(hào)后邊必須跟以冒號(hào)。4)同一標(biāo)號(hào)在一個(gè)程序中只能定義一次,不能重復(fù)定義。5)一條語句可以有標(biāo)號(hào),也可以沒有標(biāo)號(hào),標(biāo)號(hào)的有無決定著本程序中的其它語句是否需要訪問這條語句。下面例舉一些例子,
6、以加深了解。錯(cuò)誤的標(biāo)號(hào) 正確的標(biāo)號(hào)2BT:(以數(shù)字開頭) LOOP4:BEGIN(無冒號(hào)) STABL:TB+5T:(“+”號(hào)不能在標(biāo)號(hào)中出現(xiàn)) TABLE:ADD:(用了指令助記符) Q¥:2操作碼操作碼助記符是表示指令操作功能的英文縮寫。每條指令都有操作碼,它是指令的核心部分。操作碼用于規(guī)定本語句執(zhí)行的操作,操作碼可為指令的助記符或偽指令的助記符,操作碼是匯編指令中唯一不能空缺的部分。3操作數(shù)操作數(shù)用于給指令的操作提供數(shù)據(jù)或地址。在一條指令中,可能沒有操作數(shù),也可能只包括一項(xiàng),也可能包括二項(xiàng)、三項(xiàng)。各操作數(shù)之間以逗號(hào)分隔,操作碼與操作數(shù)之間以空格分隔。操作數(shù)可以是立即數(shù),如果立即數(shù)是二進(jìn)制
7、數(shù),則最低位之后加“B”;如果立即數(shù)是十六進(jìn)制數(shù),則最低位之后加“H”;如果立即數(shù)是十進(jìn)制數(shù),則數(shù)字后面不加任何標(biāo)記。操作數(shù)可以是本程序中已經(jīng)定義過的標(biāo)號(hào)或標(biāo)號(hào)表達(dá)式,例如MOON是一個(gè)已經(jīng)定義的標(biāo)號(hào),則表達(dá)式MOON+1或MOON-1都可以作為地址來使用。操作數(shù)也可以是寄存器名。此外,操作數(shù)還可以是位符號(hào)或表示偏移量的操作數(shù)。相對(duì)轉(zhuǎn)移指令中的操作數(shù)還可使用一個(gè)特殊的符號(hào)“$”,它表示本相對(duì)轉(zhuǎn)移指令所在的地址,例如:JNB TF0,$ 表示當(dāng)TF0位不為0時(shí),就轉(zhuǎn)移到該指令本身,以達(dá)到程序在“原地踏步”等待的目的。4注釋注釋不屬于語句的功能部分,它只是對(duì)每條語句的解釋說明,它可使程序的文件編制
8、顯得更加清楚,是為了方便閱讀程序的一種標(biāo)注。只要用“;”開頭,即表明后面為注釋內(nèi)容,注釋的長度不限,一行不夠時(shí),可以換行接著寫,但換行時(shí)應(yīng)注意在開頭使用“;”號(hào)。5分界符(分隔符)分界符可以是空格、冒號(hào)、分號(hào)和逗號(hào)等。這些分界符的使用情況如下:1)冒號(hào)(:)用于標(biāo)號(hào)之后。2)空格( )用于操作碼和操作數(shù)之間。3)逗號(hào)(,)用于操作數(shù)之間。4)分號(hào)(;)用于注釋之前。例如MOV A,#0AH表示取一個(gè)立即數(shù)0AH(十六進(jìn)制,如轉(zhuǎn)換成二進(jìn)制為00001010B)傳送到A累加器。3.1.3尋址方式尋址的“地址”即為操作數(shù)所在單元的地址,絕大部分指令執(zhí)行時(shí)都需要用到操作數(shù),那么到哪里去取得操作數(shù)呢?最
9、易想到的就是告訴CPU操作數(shù)所在的地址單元,從那里可取得響應(yīng)的操作數(shù),這便是“尋址”之意。89C51的尋址方式很多,使用起來也相當(dāng)方便,功能也很強(qiáng)大,靈活性強(qiáng)。下面我們分別討論幾種尋址方式的原理。1直接尋址方式指令中操作數(shù)直接以單元地址形式出現(xiàn),例如:MOVA,35H這條指令的意義是把內(nèi)部RAM中的35H單元中的數(shù)據(jù)內(nèi)容傳送到累加器A中。值得注意的是直接尋址方式只能使用8位二進(jìn)制地址,因此這種尋址方式僅限于內(nèi)部RAM進(jìn)行尋址。低128位單元在指令中直接以單元地址的形式給出。對(duì)于特殊功能寄存器可以使用其直接地址(MOVA,80H)進(jìn)行訪問,還可以以它們的符號(hào)形式(MOVA,P0)給出,但是特殊功
10、能寄存器只能用直接尋址方式訪問,而無其它方法。2寄存器尋址方式寄存器尋址對(duì)選定的8個(gè)工作寄存器R0-R7進(jìn)行操作,即操作數(shù)在寄存器中,因此指定了寄存器就得到了操作數(shù),寄存器尋址的指令中以寄存器的符號(hào)來表示寄存器,例如:MOVA,R3這條指令的意義是把所用的工作寄存器組中的R3的內(nèi)容送到累加器A中。需要注意的是工作狀態(tài)寄存器的選擇是通過程序狀態(tài)字寄存器來控制的,在這條指令前,應(yīng)通過PSW設(shè)定當(dāng)前工作寄存器組。3寄存器間接尋址寄存器尋址方式在寄存器中存放的是操作數(shù),而寄存器間接尋址方式在寄存器中存放的則為操作數(shù)的地址,也即操作數(shù)是通過寄存器所指向的地址單元得到的,這便是寄存器間接尋址名稱的由來。例
11、如:MOVA,R1這條指令的意義是R0寄存器指向地址單元中的內(nèi)容送到累加器A中。假如R1=#67H,那么是將67H單元中的數(shù)據(jù)送到累加器A中。寄存器間接尋址方式可用于訪問內(nèi)部RAM或外部數(shù)據(jù)存儲(chǔ)器。訪問內(nèi)部RAM或外部數(shù)據(jù)存儲(chǔ)器的低256字節(jié)時(shí),只通過R0和R1作為間接寄存器。然而內(nèi)部RAM的高128字節(jié)地址與專用寄存器的地址是重疊的,所以這種尋址方式不能用于訪問特殊功能寄存器。外部數(shù)據(jù)存儲(chǔ)器的存儲(chǔ)空間為64KB,可采用DPTR作為間址寄存器進(jìn)行訪問,例如:MOVXA,DPTR這條指令的意義是與上述類似,不再贅述。4立即尋址立即尋址就是把操作數(shù)直接在指令中給出,即操作數(shù)包含在指令中,指令操作碼
12、的后面緊跟著操作數(shù),一般把指令中的操作數(shù)稱為立即數(shù)。為了與直接尋址方式相區(qū)別,在立即數(shù)前加上“#”符號(hào),例如:MOVA,#0CH這條指令的意義是將0CH這個(gè)操作數(shù)送到累加器A中。立即數(shù)存放在程序存儲(chǔ)器中。5變址尋址變址尋址是以DPTR或PC作為基址寄存器,以累加器A作為變址寄存器,將兩寄存器的內(nèi)容相加形成16位地址作為操作數(shù)的實(shí)際地址。例如:MOVA,A+DPTRMOVX A,A+PCJMPA+DPTR在這三條指令中,A作為偏移量寄存器,DPTR或PC作為變址寄存器,A作為無符號(hào)數(shù)與DPTR或PC的內(nèi)容相加,得到訪問的實(shí)際地址。其中前兩條是程序存儲(chǔ)器讀指令,后一條是無條件轉(zhuǎn)移指令。6位尋址在8
13、9C51單片機(jī)中,RAM中的20H2FH字節(jié)單元對(duì)應(yīng)的位地址為00H7FH,特殊功能寄存器中的某些位也可進(jìn)行位尋址,這些單元既可以采用字節(jié)方式訪問它們,也可采用位尋址的方式訪問它們。7相對(duì)尋址相對(duì)尋址方式是為了程序的相對(duì)轉(zhuǎn)移而設(shè)計(jì)的,以PC的內(nèi)容為基址,加上給出的偏移量作為轉(zhuǎn)移地址,從而實(shí)現(xiàn)程序的轉(zhuǎn)移。轉(zhuǎn)移的目的地址可參見如下表達(dá)式:目的地址=轉(zhuǎn)移指令所在地址+轉(zhuǎn)移指令字接數(shù)+偏移量值得注意的是,偏移量是有正負(fù)號(hào)之分的,偏移量的取值范圍是當(dāng)前PC值的-128+127之間。偏移量是以補(bǔ)碼形式給出的。3.1.4數(shù)據(jù)傳送類指令數(shù)據(jù)傳送指令共有28條,數(shù)據(jù)傳送指令一般的操作是把源操作數(shù)傳送到目的操作數(shù)
14、,指令執(zhí)行完成后,源操作數(shù)不變,目的操作數(shù)等于源操作數(shù)。如果要求在進(jìn)行數(shù)據(jù)傳送時(shí),目的操作數(shù)不丟失,則不能用直接傳送指令,而采用交換型的數(shù)據(jù)傳送指令,數(shù)據(jù)傳送指令不影響標(biāo)志CY,AC和OV,但可能會(huì)對(duì)奇偶標(biāo)志P有影響。1以累加器A為目的操作數(shù)類指令(4條)這4條指令的作用是把源操作數(shù)指向的內(nèi)容送到累加器A。有直接、立即數(shù)、寄存器和寄存器間接尋址方式:MOV A, data;(data)(A)直接單元地址中的內(nèi)容送到累加器A。MOV A, #data; #data(A)立即數(shù)送到累加器A。MOV A, Rn;(Rn)(A)Rn中的內(nèi)容送到累加器A。 MOV A, Ri;(Ri)(A)Ri內(nèi)容指向
15、的地址單元中的內(nèi)容送到累加器A。2以寄存器Rn為目的操作數(shù)的指令(3條)這3條指令的功能是把源操作數(shù)指定的內(nèi)容送到所選定的工作寄存器Rn中。有直接、立即和寄存器尋址方式:MOV Rn, data;(data)(Rn)直接尋址單元中的內(nèi)容送到寄存器Rn。MOV Rn, #data;#data(Rn)立即數(shù)直接送到寄存器Rn。MOV Rn, A;(A)(Rn)累加器A中的內(nèi)容送到寄存器Rn。3以直接地址為目的操作數(shù)的指令(5條)這組指令的功能是把源操作數(shù)指定的內(nèi)容送到由直接地址data所選定的片內(nèi)RAM中。有直接、立即、寄存器和寄存器間接4種尋址方式:MOV data, data;(data)(d
16、ata)直接地址單元中的內(nèi)容送到直接地址單元。MOV data, #data;#data(data)立即數(shù)送到直接地址單元。MOV data, A;(A)(data)累加器A中的內(nèi)容送到直接地址單元。MOV data, Rn;(Rn)(data)寄存器Rn中的內(nèi)容送到直接地址單元。MOV data, Ri;(Ri)(data)寄存器Ri中的內(nèi)容指定的地址單元中數(shù)據(jù)送到直接地址單元。4以間接地址為目的操作數(shù)的指令(3條)這組指令的功能是把源操作數(shù)指定的內(nèi)容送到以Ri中的內(nèi)容為地址的片內(nèi)RAM中。有直接、立即和寄存器3種尋址方式:MOV Ri, data;(data)(Ri)直接地址單元中的內(nèi)容送
17、到以Ri中的內(nèi)容為地址的RAM單元。MOV Ri,#data;#data(Ri)立即數(shù)送到以Ri中的內(nèi)容為地址的RAM單元。MOV Ri,A ;(A)(Ri)累加器A的內(nèi)容送到以Ri中的內(nèi)容為地址的RAM單元。5查表指令(2條)指令的功能是對(duì)存放在程序存儲(chǔ)器中的數(shù)據(jù)表格進(jìn)行查找傳送,使用變址尋址方式:MOVC A,A+DPTR; (A)+(DPTR)(A)表格地址單元中的內(nèi)容送累加器A。MOVC A,A+PC;(PC)+1(A),(A)+(PC)(A)表格地址單元中的內(nèi)容送累加器A。6累加器A與片外數(shù)據(jù)存儲(chǔ)器RAM傳送指令(4條)這4條指令的作用是累加器A與片外RAM間的數(shù)據(jù)傳送。使用寄存器尋
18、址方式:MOVX DPTR,A;(A)(DPTR)累加器中的內(nèi)容送到數(shù)據(jù)指針指向的片外RAM地址中。MOVX A, DPTR;(DPTR)(A)數(shù)據(jù)指針指向的片外RAM地址中的內(nèi)容送到累加器A。MOVX A, Ri ;(Ri)(A)寄存器Ri指向片外RAM地址中的內(nèi)容送到累加器A。MOVX Ri,A ;(A)(Ri)累加器中的內(nèi)容送到寄存器Ri指向的片外RAM地址中。7堆棧操作類指令(2條)這類指令只有兩條,下面的第一條常稱為入棧操作指令,第二條稱為出棧操作指令。需要指出的是,單片機(jī)開機(jī)復(fù)位后,(SP)默認(rèn)為07H,但一般都需要重新賦值,設(shè)置新的SP首址。入棧的第一個(gè)數(shù)據(jù)必須存放于SP+1所指
19、存儲(chǔ)單元,故實(shí)際的堆棧底為SP+1所指的存儲(chǔ)單元。PUSH data;(SP)+1(SP),(data)(SP)堆棧指針首先加1,直接尋址;單元中的數(shù)據(jù)送到堆棧指針SP所指的單元。POP data;(SP)(data),(SP)-1(SP)堆棧指針SP所指的單元數(shù)據(jù)送到直接尋址單元中,堆棧指針SP再進(jìn)行減1操作。8交換指令(4條)這4條指令的功能是把累加器A中的內(nèi)容與源操作數(shù)所指的數(shù)據(jù)相互交換。XCH A, Rn;(A)(Rn)累加器與工作寄存器Rn中的內(nèi)容互換。XCH A, Ri;(A)(Ri)累加器與Ri所指的存儲(chǔ)單元中的內(nèi)容互換。XCH A, data;(A)(data)累加器與直接地址
20、單元中的內(nèi)容互換。XCHD A, Ri;(A3-0)(Ri)3-0)累加器與工作寄存器Ri所指的存儲(chǔ)單元中的低半字節(jié)內(nèi)容互換。916位數(shù)據(jù)傳送指令(1條)這條指令的功能是把16位常數(shù)送入數(shù)據(jù)指針寄存器。MOV DPTR,#data16;#dataH(DPH),#dataL(DPL)16位常數(shù)的高8位送到DPH,低8位送到DPL。3.1.5算數(shù)運(yùn)算類指令算術(shù)運(yùn)算指令共有24條,算術(shù)運(yùn)算主要是執(zhí)行加、減、乘、除法四則運(yùn)算。另外89C51指令系統(tǒng)中有一部分是進(jìn)行加、減1操作,BCD碼的運(yùn)算和調(diào)整,我們都?xì)w類為運(yùn)算指令。雖然89C51單片機(jī)的算術(shù)邏輯單元ALU僅能對(duì)8位無符號(hào)整數(shù)進(jìn)行運(yùn)算,但利用進(jìn)位標(biāo)
21、志C,則可進(jìn)行多字節(jié)無符號(hào)整數(shù)的運(yùn)算。同時(shí)利用溢出標(biāo)志,還可以對(duì)帶符號(hào)數(shù)進(jìn)行補(bǔ)碼運(yùn)算。需要注意的是,除加、減1指令外,這類指令大多數(shù)都會(huì)對(duì)PSW(程序狀態(tài)字)有影響。1加法指令(4條)這4條指令的作用是把立即數(shù),直接地址、工作寄存器及間接地址內(nèi)容與累加器A的內(nèi)容相加,運(yùn)算結(jié)果存在A中。ADD A, #data;(A)+#data(A)累加器A中的內(nèi)容與立即數(shù)#data相加,結(jié)果存放在A。ADD A, data;(A)+(data)(A)累加器A中的內(nèi)容與直接地址單元中的內(nèi)容相加,結(jié)果存放在A。ADD A,Rn;(A)+(Rn)(A)累加器A中的內(nèi)容與工作寄存器Rn中的內(nèi)容相加,結(jié)果存放在A。A
22、DD A,Ri;(A)+(Ri)(A)累加器A中的內(nèi)容與工作寄存器Ri所指向的地址單元中的內(nèi)容相加,結(jié)果存放在A。 2帶進(jìn)位加法指令(4條)這4條指令除與1功能相同外,在進(jìn)行加法運(yùn)算時(shí)還需考慮進(jìn)位問題。ADDC A, data;(A)+(data)+(C)(A)累加器A中的內(nèi)容與直接地址單 元的內(nèi)容連同進(jìn)位位相加,結(jié)果存放在A。 ADDC A, #data;(A)+#data +(C)(A)累加器A中的內(nèi)容與立即數(shù)連同進(jìn) 位位相加,結(jié)果存放在A。 ADDC A, Rn;(A)+Rn+(C)(A)累加器A中的內(nèi)容與工作寄存器Rn中的內(nèi)容、連同進(jìn)位位相加,結(jié)果存放在A。 ADDC A, Ri;(A
23、)+(Ri)+(C)(A)累加器A中的內(nèi)容與工作寄存器Ri指向地址單元中的內(nèi)容、連同進(jìn)位位相加,結(jié)果存放在A。 3帶借位減法指令(4條)這組指令包含立即數(shù)、直接地址、間接地址及工作寄存器與累加器A連同借位位CY內(nèi)容相減,結(jié)果送回累加器A中。這里我們對(duì)借位位CY的狀態(tài)作出說明,在進(jìn)行減法運(yùn)算中,CY=1表示有借位,CY=0則無借位。在進(jìn)行減法運(yùn)算前,如果不知道借位標(biāo)志位C的狀態(tài),則應(yīng)先對(duì)CY進(jìn)行清零操作。SUBB A,data;(A)-(data)-(C)(A)累加器A中的內(nèi)容與直接地址單元中的內(nèi)容、連同借位位相減,結(jié)果存放在A。 SUBB A,#data;(A)-#data-(C)(A)累加器
24、A中的內(nèi)容與立即數(shù)、連同借位位相減,結(jié)果存放在A。 SUBB A,Rn;(A)-(Rn)-(C)(A)累加器A中的內(nèi)容與工作寄存器中的內(nèi)容、連同借位位相減,結(jié)果存放在A。 SUBB A,Ri;(A)-(Ri)-(C)(A)累加器A中的內(nèi)容與工作寄存器Ri指向的地址單元中的內(nèi)容、連同借位位相減,結(jié)果存放在A。 4乘法指令(1條)這條指令的作用是把累加器A和寄存器B中的8位無符號(hào)數(shù)相乘,所得到的是16位乘積,結(jié)果的低8位存在累加器A,結(jié)果的高8位存在寄存器B中。如果OV=1,說明乘積大于FFH,否則OV=0,但進(jìn)位標(biāo)志位CY總是等于0。MUL AB;(A)(B)(A)和(B)累加器A中的內(nèi)容與寄存
25、器B中的內(nèi)容相乘,結(jié)果存放在A、B。 5除法指令(1條)這條指令的作用是把累加器A中的8位無符號(hào)整數(shù)除以寄存器B中的8位無符號(hào)整數(shù),所得到的商存放在累加器A,而余數(shù)存放在寄存器B中。除法運(yùn)算總是使OV和進(jìn)位標(biāo)志位CY等于0。如果OV=1,表明寄存器B中的內(nèi)容為00H,那么執(zhí)行結(jié)果為不確定值,表示除法有溢出。DIV AB;(A)(B)(A)和(B)累加器A中的內(nèi)容除以寄存器B的內(nèi)容,商存放在累加器A,而余數(shù)存放在寄存器B。6加1指令(5條)這5條指令的的功能均為原寄存器的內(nèi)容加1,結(jié)果送回原寄存器。上述提到,加1指令不會(huì)對(duì)任何標(biāo)志有影響,如果原寄存器的內(nèi)容為FFH,執(zhí)行加1后,結(jié)果就會(huì)是00H。
26、這組指令共有直接、寄存器、寄存器減間址等尋址方式:INC A;(A)+1(A)累加器A中的內(nèi)容加1,結(jié)果存放在A。 INC data;(data)+1(data)直接地址單元的內(nèi)容加1,結(jié)果送回原單元中。INC Ri;(Ri)+1(Ri)寄存器內(nèi)容指向的地址單元中的內(nèi)容加1,結(jié)果送回原地址單元中。INC Rn;(Rn)+1(Rn)寄存器Rn的內(nèi)容加1,結(jié)果送回原地址單元中。INC DPTR;(DPTR)+1(DPTR)數(shù)據(jù)指針的內(nèi)容加1,結(jié)果送回?cái)?shù)據(jù)指針中。在INC data這條指令中,如果直接地址是I/O,其功能是先讀入I/O鎖存器的內(nèi)容,然后在CPU進(jìn)行加1操作,再輸出到I/O上,這就是“
27、讀修改寫”操作。7減1指令(4條)這組指令的作用是把所指的寄存器內(nèi)容減1,結(jié)果送回原寄存器,若原寄存器的內(nèi)容為00H,減1后即為FFH,運(yùn)算結(jié)果不影響任何標(biāo)志位。這組指令有直接、寄存器、寄存器間址等尋址方式,當(dāng)直接地址是I/O口鎖存器時(shí),“讀修改寫”操作與加1指令類似。DEC A; (A)-1(A)累加器A中的內(nèi)容減1,結(jié)果送回累加器A。 DEC data; (data)-1(data)直接地址單元中的內(nèi)容減1,結(jié)果送回原單元中。DEC Ri; (Ri)-1(Ri)寄存器內(nèi)容指向的地址單元中的內(nèi)容減1,結(jié)果送回原地址單元中。DEC Rn ; (Rn)-1(Rn)寄存器Rn中的內(nèi)容減1,結(jié)果送回
28、寄存器Rn。 8十進(jìn)制調(diào)整指令(1條)在進(jìn)行BCD碼運(yùn)算時(shí),這條指令總是跟在ADD或ADDC指令之后,其功能是將執(zhí)行加法運(yùn)算后存于累加器A中的結(jié)果進(jìn)行調(diào)整和修正。DA A3.1.6邏輯運(yùn)算類指令邏輯運(yùn)算和移位指令共有25條,有與、或、異或、求反、左右移位、清0等邏輯操作,有直接、寄存器和寄存器間址等尋址方式。這類指令一般不影響程序狀態(tài)字(PSW)標(biāo)志。1循環(huán)移位指令(4條)這4條指令的作用是將累加器中的內(nèi)容循環(huán)左或右移一位,后兩條指令是連同進(jìn)位位CY一起移位。RL A;累加器A中的內(nèi)容左移一位。RR A;累加器A中的內(nèi)容右移一位。RLC A;累加器A中的內(nèi)容連同進(jìn)位位CY左移一位。RRC A;
29、累加器A中的內(nèi)容連同進(jìn)位位CY右移一位。2累加器半字節(jié)交換指令(1條)SWAP A ; 累加器中的內(nèi)容高低半字節(jié)互換。3求反指令(1條)這條指令將累加器中的內(nèi)容按位取反。CPL A; 累加器中的內(nèi)容按位取反。4清零指令(1條)這條指令將累加器中的內(nèi)容清0。CLR A; 0(A),累加器中的內(nèi)容清0。5邏輯與操作指令(6條)這組指令的作用是將兩個(gè)單元中的內(nèi)容執(zhí)行邏輯與操作。如果直接地址是I/O地址,則為“讀修改寫”操作。ANL A, data;累加器A中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在寄存器A。ANL data, #data;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行與邏輯操作。結(jié)果存
30、在直接地址單元中。ANL A, #data;累加器A的內(nèi)容和立即數(shù)執(zhí)行與邏輯操作。結(jié)果存在累加器A。 ANL A, Rn;累加器A的內(nèi)容和寄存器Rn中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在累加器A。 ANL data, A;直接地址單元中的內(nèi)容和累加器A的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在直接地址單元中。ANL A, Ri;累加器A的內(nèi)容和工作寄存器Ri指向的地址單元中的內(nèi)容執(zhí)行與邏輯操作。結(jié)果存在累加器A。 6邏輯或操作指令(6條)這組指令的作用是將兩個(gè)單元中的內(nèi)容執(zhí)行邏輯或操作。如果直接地址是I/O地址,則為“讀修改寫”操作。ORL A, data;累加器A中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行邏輯或操作。
31、結(jié)果存在寄存器A。 ORL data, #data;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行邏輯或操作。結(jié)果存在直接地址單元。ORL A, #data;累加器A的內(nèi)容和立即數(shù)執(zhí)行邏輯或操作。結(jié)果存在累加器A。ORL A, Rn;累加器A的內(nèi)容和寄存器Rn中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在累加器A。 ORL data, A;直接地址單元中的內(nèi)容和累加器A的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存直接地址單元。ORL A, Ri;累加器A的內(nèi)容和工作寄存器Ri指向的地址單元中的內(nèi)容執(zhí)行邏輯或操作。結(jié)果存在累加器A。7邏輯異或操作指令(6條)這組指令的作用是將兩個(gè)單元中的內(nèi)容執(zhí)行邏輯異或操作。如果直接地址是I/O地址,則為
32、“讀修改寫”操作。XRL A, data;累加器A中的內(nèi)容和直接地址單元中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在寄存器A。 XRL data, #data;直接地址單元中的內(nèi)容和立即數(shù)執(zhí)行邏輯異或操作。結(jié)果存在直接地址單元中。XRL A, #data;累加器A的內(nèi)容和立即數(shù)執(zhí)行邏輯異或操作。結(jié)果存在累加器A。XRL A, Rn ;累加器A的內(nèi)容和寄存器Rn中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在累加器A。 XRL data, A;直接地址單元中的內(nèi)容和累加器A的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在直接地址單元中。XRL A, Ri;累加器A的內(nèi)容和工作寄存器Ri指向的地址單元中的內(nèi)容執(zhí)行邏輯異或操作。結(jié)果存在累
33、加器A中。3.1.7控制轉(zhuǎn)移類指令控制轉(zhuǎn)移指令用于控制程序的流向,所控制的范圍即為程序存儲(chǔ)器區(qū)間,89C51系列單片機(jī)的控制轉(zhuǎn)移指令相對(duì)豐富,有可對(duì)64kB程序空間地址單元進(jìn)行訪問的長調(diào)用、長轉(zhuǎn)移指令,也有可對(duì)2KB字節(jié)進(jìn)行訪問的絕對(duì)調(diào)用和絕對(duì)轉(zhuǎn)移指令,還有在一頁范圍內(nèi)短相對(duì)轉(zhuǎn)移及其它無條件轉(zhuǎn)移指令,這些指令的執(zhí)行一般都不會(huì)對(duì)標(biāo)志位有影響。 1無條件轉(zhuǎn)移指令(4條)這組指令執(zhí)行后,程序會(huì)無條件轉(zhuǎn)移到指令所指向的地址。長轉(zhuǎn)移指令訪問的程序存儲(chǔ)器空間為16位地址64KB空間,絕對(duì)轉(zhuǎn)移指令訪問的程序存儲(chǔ)器空間為11位地址2KB空間。LJMP addr16;addr16(PC),給程序計(jì)數(shù)器賦予新值(
34、16位地址) 。AJMP addr11;(PC)+2(PC),addr11(PC10-0)程序計(jì)數(shù)器賦予新值(11位地址),(PC15-11)不改變。SJMP rel;(PC)+2+rel(PC),當(dāng)前程序計(jì)數(shù)器先加上2再加上偏移量給程序計(jì)數(shù)器賦予新值。JMP A+DPTR;(A)+(DPTR)(PC),累加器所指向地址單元的值加上數(shù)據(jù)指針的值給程序計(jì)數(shù)器賦予新值。2條件轉(zhuǎn)移指令(8條)程序可利用這組豐富的指令根據(jù)當(dāng)前的條件進(jìn)行判斷,看是否滿足某種特定的條件,從而控制程序的轉(zhuǎn)向。JZ rel; A=0,(PC)+2+rel(PC),累加器中的內(nèi)容為0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)
35、行。JNZ rel; A0,(PC)+2+rel(PC),累加器中的內(nèi)容不為0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行。CJNE A, data, rel; A(data),(PC)+3+ rel(PC),累加器中的內(nèi)容不等于直接地址單元的內(nèi)容,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行。CJNE A, #data, rel; A#data,(PC)+3+ rel(PC),累加器中的內(nèi)容不等于立即數(shù),則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行。CJNE Rn, #data, rel; (Rn)#data, (PC)+3+ rel(PC),工作寄存器Rn中的內(nèi)容不等于立即數(shù),則轉(zhuǎn)移到偏
36、移量所指向的地址,否則程序往下執(zhí)行。CJNE Ri, #data, rel;(Ri)#data,(PC)+3+ rel(PC),工作寄存器Ri指向地址單元中的內(nèi)容不等于立即數(shù),則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行。DJNZ Rn, rel;(Rn)-1(Rn),(Rn)0,(PC)+2+rel(PC)工作寄存器Rn減1不等于0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行。DJNZ data, rel; (data)-1(data),(data)0,(PC)+2+rel(PC)直接地址單元中的內(nèi)容減1不等于0,則轉(zhuǎn)移到偏移量所指向的地址,否則程序往下執(zhí)行。3子程序調(diào)用指令(1條)子程序
37、是為了便于程序編寫,減少那些需反復(fù)執(zhí)行的程序占用多余的地址空間而引入的程序分支,從而有了主程序和子程序的概念,需要反復(fù)執(zhí)行的一些程序,我們在編程時(shí)一般都把它們編寫成子程序,當(dāng)需要用它們時(shí),就用一個(gè)調(diào)用命令使程序按調(diào)用的地址去執(zhí)行,這就需要子程序的調(diào)用指令和返回指令。LCALL addr16;長調(diào)用指令,可在64kB空間調(diào)用子程序。此時(shí)(PC)+3(PC),(SP)+1(SP),(PC7-0)(SP),(SP)+ 1(SP),(PC15-8)(SP),addr16(PC),程序的PC為addr16對(duì)應(yīng)的地址。ACALL addr11;絕對(duì)調(diào)用指令,可在2kB空間調(diào)用子程序。此時(shí)(PC)+2(PC
38、),(SP)+1(SP),(PC7-0)(SP),(SP)+1(SP),(PC15-8)(SP),addr11(PC10-0)。RET ; 子程序返回指令此時(shí)(SP)(PC15-8),(SP)-1(SP),(SP)(PC7-0),(SP)-1(SP)。RETI ; 中斷返回指令此指令除具有RET功能外,還具有恢復(fù)中斷邏輯的功能,需注意的是,RETI指令不能用RET代替。4空操作指令(1條)這條指令將累加器中的內(nèi)容清0??捎糜诙虝r(shí)間的延時(shí)。NOP; 這條指令除了使PC加1,消耗一個(gè)機(jī)器周期外,不執(zhí)行任何操作3.1.8位操作指令布爾處理功能是89C51系列單片機(jī)的一個(gè)重要特征,這是出于實(shí)際應(yīng)用需要
39、而設(shè)置的。布爾變量也即開關(guān)變量,它是以位(bit)為單位進(jìn)行操作的。在物理結(jié)構(gòu)上,89C51系列單片機(jī)有一個(gè)布爾處理機(jī),它以進(jìn)位標(biāo)志做為累加位,以內(nèi)部RAM可尋址的128個(gè)為存儲(chǔ)位。1位傳送指令(2條)位傳送指令就是可尋址位與累加位CY之間的傳送,指令有兩條。MOV C,bit;bitCY,某位數(shù)據(jù)送CY。MOV bit,C;CYbit,CY數(shù)據(jù)送某位。2位置位復(fù)位指令(4條)這些指令對(duì)CY及可尋址位進(jìn)行置位或復(fù)位操作,共有四條指令。CLR C; 0CY,清CY。CLR bit; 0bit,清某一位。SETB C; 1CY,置位CY。SETB bit; 1bit,置位某一位。3位運(yùn)算指令(6條
40、)位運(yùn)算都是邏輯運(yùn)算,有與、或、非三種指令,共六條。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;()bit。4位控制轉(zhuǎn)移指令(5)位控制轉(zhuǎn)移指令是以位的狀態(tài)作為實(shí)現(xiàn)程序轉(zhuǎn)移的判斷條件。JC rel; (CY)=1轉(zhuǎn)移,(PC)+2+relPC,否則程序往下執(zhí)行,(PC)+2PC。JNC rel; (CY)=0轉(zhuǎn)移,(PC)+2+relPC,否則程序往下執(zhí)行,(PC)+2PC。JB bit, rel;位狀態(tài)為1轉(zhuǎn)移。JNB bi
41、t, rel;位狀態(tài)為0轉(zhuǎn)移。JBC bit, rel;位狀態(tài)為1轉(zhuǎn)移,并使該位清“0” 。后三條指令都是三字節(jié)指令,如果條件滿足,(PC)+3+relPC,否則程序往下執(zhí)行,(PC)+3PC。3.1.9偽指令匯編語言除了定義了匯編指令外,還定義了一些匯編偽指令,以支持匯編的運(yùn)行。偽指令是匯編時(shí)不產(chǎn)生機(jī)器語言代碼的指令,是CPU不能執(zhí)行的指令,僅提供匯編用的某些控制信息。AT89C51匯編語言常用的偽指令有以下幾條。1ORG定位偽指令格式:ORG mm一般是16位二進(jìn)制數(shù),m指出在該指令后的(偽)指令的匯編地址,即生成的機(jī)器指令的起始存儲(chǔ)器地址。它必須放在每段源程序或數(shù)據(jù)段的開始行,在一個(gè)匯編
42、語言的源程序中允許存在多條定位偽指令,但其中每一個(gè)m值都應(yīng)和前面生成的機(jī)器指令存放地址不重疊。例如下面的代碼:ORG1000HSTART:MOVA,#10HORG2000HSECOND:CLRA第1條定位偽指令指定了標(biāo)號(hào)START的地址為1000H,“MOV A,#10H”指令及其后面的指令匯編成的機(jī)器碼放在從1000H開始的存儲(chǔ)單元中。第2條定位偽指令指定了標(biāo)號(hào)SECOND的地址為2000H。從START開始的程序段所占用的存儲(chǔ)地址最多為1FFFH,否則與從SECOND開始的程序段地址重疊,程序在編譯時(shí)不會(huì)發(fā)生錯(cuò)誤,但在運(yùn)行時(shí)就會(huì)發(fā)生錯(cuò)誤。2DB定義字節(jié)偽指令格式:標(biāo)號(hào):DBX1,X2,Xn
43、標(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ù)。例如下面的代碼。ORG1000HDB0AAHSDATA:DB25,25H經(jīng)匯編后,從地址1000H處的存儲(chǔ)器的內(nèi)容如下:(1000H)=AAH(1001H)=19H(1002H)=25H3DW定義字偽指令格式:標(biāo)號(hào):DWY1,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)前R
44、OM地址開始,保留存儲(chǔ)單元,并存入DW后面的數(shù)據(jù)。存放時(shí)高8位存放在低地址,低8位存放在高地址,如下所示。ORG1000HDW1234HDW2000經(jīng)匯編后,從地址1000H處的存儲(chǔ)器的內(nèi)容如下:(1000H)=12H(1001H)=34H(1002H)=07H(1003H)=D0H4EQU賦值偽指令格式:字符名稱EQU項(xiàng)(數(shù)或匯編符號(hào))EQU偽指令是把“項(xiàng)”賦給“字符名稱”,需要注意的是,這里的字符名稱不同于標(biāo)號(hào)(其后面沒有冒號(hào)),但它是必需的,其中的項(xiàng)可以是數(shù)也可以是匯編符號(hào)。用EQU賦過值的符號(hào)名稱必須先定義后使用,這些被定義的字符名稱可以用做數(shù)據(jù)地址、代碼地址、位地址或一個(gè)立即數(shù)。因此
45、它可以是8位的,也可以是16位的。例如下面的代碼。AAEQUR1MOVA, AA這里AA就代表了工作寄存器R1。5DATA數(shù)據(jù)地址賦值命令格式:字符名稱DATA數(shù)據(jù)或表達(dá)式此命令把數(shù)據(jù)地址或代碼地址賦予標(biāo)號(hào)段規(guī)定的字符名稱。被定義的字符名稱也可以先使用后定義。例如下面的代碼。ORG8000HINDEXJDATA8096HLJMPINDEXJ等價(jià)于如下代碼。ORG8000HLJMP8096HDATA和EQU的區(qū)別在于用DATA定義的字符名稱作為標(biāo)號(hào)登記在符號(hào)表中,故可先使用后定義;而用EQU定義的字符名稱必須先定義后使用,其原因是EQU不定義在符號(hào)表中。6DS定義存儲(chǔ)空間偽指令在匯編時(shí),從指令地
46、址開始保留DS之后表達(dá)式的值所規(guī)定的存儲(chǔ)單元。例如下面的代碼。ORG1000HDS07HDB20H, 20DW12H經(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)行初始化。7BIT定義位符號(hào)偽指令格式:字符名稱BIT位地址這里的字符名稱與標(biāo)號(hào)不同,但它是必需的,其功能是把BIT之后的位地址賦給字符名稱。例如下面的代碼。P11BITP1.1這樣,P1口的位1地址91H就賦給了P11。8END匯編結(jié)束偽指令EN
47、D偽指令通知匯編程序結(jié)束匯編,在END之后即使還有指令,匯編程序也不做處理。3.2匯編語言程序結(jié)構(gòu)3.2.1程序設(shè)計(jì)概述程序是若干指令的有序集合,單片機(jī)的運(yùn)行就是執(zhí)行這一指令序列的過程,編寫這一指令序列的過程稱為程序設(shè)計(jì)。即應(yīng)用計(jì)算機(jī)所能識(shí)別的、接受的語言把要解決的問題的步驟有序地描述出來。1程序設(shè)計(jì)語言的種類:(1)機(jī)器語言:機(jī)器語言是用二進(jìn)制代碼表示的計(jì)算機(jī)惟一能識(shí)別和執(zhí)行的最原始的程序設(shè)計(jì)語言。 (2)匯編語言:利用指令助記符來描述的程序設(shè)計(jì)語言。(3)高級(jí)語言:高級(jí)語言接近于人的自然語言,是面向過程而獨(dú)立于機(jī)器的通用語言。2匯編語言的編輯 源程序的編輯:編寫程序,并以文件的形式存于磁盤
48、中的過程稱為源程序的編輯。編輯好的源程序應(yīng)以“ .ASM”擴(kuò)展名存盤,以備匯編程序調(diào)用。計(jì)算機(jī)上進(jìn)行源程序的編輯的過程:利用計(jì)算機(jī)中常用的編輯軟件或利用開發(fā)系統(tǒng)中提供的編輯環(huán)境。3匯編語言的匯編 匯編:把匯編語言源程序翻譯成目標(biāo)代碼(機(jī)器碼)的過程稱為匯編。匯編語言源程序的匯編的分類:(1)人工匯編:是指利用人腦直接把匯編語言源程序翻譯成機(jī)器碼的過程。其特點(diǎn)是簡單易行,但效率低、出錯(cuò)率高。(2)機(jī)器匯編:利用軟件(稱為匯編程序)自動(dòng)把匯編語言源程序翻譯成目標(biāo)代碼的過程。匯編工作由計(jì)算機(jī)完成,一般的單片機(jī)開發(fā)系統(tǒng)中都能實(shí)現(xiàn)匯編語言源程序的匯編。源程序經(jīng)過機(jī)器匯編后,形成的若干文件中含有兩個(gè)主要文件,一是列表文件(.LST),另一個(gè)是燒錄文件(.HEX)。3.2.2順序結(jié)構(gòu)順序結(jié)構(gòu)程序是最簡單、最基本的程
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 通信行業(yè)物聯(lián)網(wǎng)與智能設(shè)備方案
- 精密儀器課程設(shè)計(jì)
- 通訊設(shè)備公司財(cái)務(wù)專員招聘合同
- 旅游包車協(xié)議書范本
- 灑水車專項(xiàng)施工方案
- 高中數(shù)學(xué)第1章立體幾何初步1.2.3直線與平面的位置關(guān)系備課蘇教版必修
- 瀑布公園設(shè)施安裝協(xié)議
- 真石漆施工合同花鳥市場外墻翻新
- 污水處理深水井施工協(xié)議
- 網(wǎng)絡(luò)公司客服招聘協(xié)議
- 湖南省益陽市2023-2024學(xué)年高二上學(xué)期普通高中期末質(zhì)量檢測數(shù)學(xué)試題 含解析
- 物業(yè)項(xiàng)目移交清單表
- 2024-2030年中國核醫(yī)學(xué)行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報(bào)告
- VTE評(píng)分量表解讀 課件2024.8
- 手術(shù)室安全核查制度及流程課件
- 2024-2025學(xué)年高中英語選擇性必修 第二冊北師大版(2019)教學(xué)設(shè)計(jì)合集
- 高標(biāo)準(zhǔn)農(nóng)田跟蹤審計(jì)、工程中間計(jì)量、變更價(jià)格調(diào)整及竣工結(jié)算審核項(xiàng)目 投標(biāo)方案(技術(shù)方案)
- 感恩節(jié)英文課件
- 慈溪市2024-2025學(xué)年四上數(shù)學(xué)期末教學(xué)質(zhì)量檢測模擬試題含解析
- 人教版小學(xué)一年級(jí)語文上冊全冊試卷全套含答案
- 2025年高考化學(xué)二、三輪復(fù)習(xí)策略講座
評(píng)論
0/150
提交評(píng)論