




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
微機(jī)原理匯編語言的學(xué)習(xí)1第一頁,共九十五頁,2022年,8月28日第三章匯編語言程序設(shè)計(jì)2第二頁,共九十五頁,2022年,8月28日§3.1匯編語言基本元素3第三頁,共九十五頁,2022年,8月28日
由匯編語言編寫的源程序是由許多語句(也可稱為匯編指令)組成的。每個(gè)語句由1~4個(gè)部分組成,其格式是:[標(biāo)識(shí)符]指令助記符[操作數(shù)][;注解]
其中用方括號(hào)括起來的部分,可以有也可以沒有。每部分之間用空格(至少一個(gè))分開,一行最多可有132個(gè)字符。3.1.1匯編語言的語句格式4第四頁,共九十五頁,2022年,8月28日(1)標(biāo)識(shí)符:給指令或某一存儲(chǔ)單元地址所起的名字。標(biāo)識(shí)符由下列字符組成:(以字母或圓點(diǎn)開頭)字母:A~Z,a~z;數(shù)字:0~9;特殊字符:?.@_$數(shù)字不能作標(biāo)識(shí)符的第一個(gè)字符,而.僅能作標(biāo)識(shí)符的第一個(gè)字符,標(biāo)識(shí)符最長為31個(gè)字符。標(biāo)識(shí)符后跟冒號(hào)時(shí)表示標(biāo)號(hào),代表該行指令的起始地址,標(biāo)號(hào)可以被轉(zhuǎn)移、調(diào)用指令直接引用。標(biāo)識(shí)符后不帶冒號(hào)時(shí)表示變量。偽指令前的標(biāo)識(shí)符不加冒號(hào)。
5第五頁,共九十五頁,2022年,8月28日(2)指令助記符
表示不同操作的指令,可以是8086/8088的指令助記符,也可以是偽指令。
(3)操作數(shù)
是指令執(zhí)行的對(duì)象。依指令的要求,可能有一個(gè)、兩個(gè)、沒有或者多個(gè)。
例如:RET;無操作數(shù)COUNT:INCCX;一個(gè)操作數(shù)
MOVCX,DI;兩個(gè)操作數(shù)
ADDAX,[BP十4];第二個(gè)操作數(shù)為表達(dá)式
(4)注釋該項(xiàng)可有可無,是為源程序所加的注解,用于提高程序的可讀性。
6第六頁,共九十五頁,2022年,8月28日匯編語言運(yùn)算符:是匯編程序在匯編時(shí)計(jì)算的,與運(yùn)算指令不同,指令是在程序運(yùn)行時(shí)計(jì)算的。1、算術(shù)運(yùn)算符、邏輯運(yùn)算符、關(guān)系運(yùn)算符如:+、-、×、/、AND、OR、LT等
MOVAX,[DI+BX]
ADDAX,FIRST+1MOVAX,((choiceLT20)AND5)OR((choiceGE20)AND6)3.1.2匯編語言運(yùn)算符7第七頁,共九十五頁,2022年,8月28日注意:算術(shù)運(yùn)算符總可以用于數(shù)字操作,其結(jié)果也是數(shù)字的。當(dāng)應(yīng)用于存儲(chǔ)器操作數(shù)時(shí),只有+,-運(yùn)算符有意義;邏輯運(yùn)算符的操作數(shù)也必須是數(shù)字,存儲(chǔ)器操作數(shù)不能進(jìn)行邏輯運(yùn)算;關(guān)系運(yùn)算符連接的兩個(gè)操作數(shù),必須都是數(shù)字的或是在同一段內(nèi)的存儲(chǔ)器地址。8第八頁,共九十五頁,2022年,8月28日2、取值運(yùn)算符
1)$運(yùn)算符$:當(dāng)前地址偏移量的值BLOCKDB‘HELLO!’NUMEQU$-BLOCK‘H’‘E’‘L’‘L’‘O’‘!’BLOCK$;NUM為69第九頁,共九十五頁,2022年,8月28日SEG和OFFSETSEG:求標(biāo)號(hào)或變量的段地址OFFSET:求標(biāo)號(hào)或變量的偏移地址例如,定義:SLOTDW25則:MOVAX,SLOT;
從SLOT地址中取一個(gè)字送入AXMOVAX,SEGSLOT;
將SLOT的段地址送入AXMOVAX,OFFSETSLOT;
將SLOT的段內(nèi)偏移地址送AX10第十頁,共九十五頁,2022年,8月28日3)TYPE返回標(biāo)號(hào)或存儲(chǔ)器操作數(shù)的類型值對(duì)存儲(chǔ)器操作數(shù):表示占用的字節(jié)數(shù)對(duì)標(biāo)號(hào):表示過程或指令地址的調(diào)用類型表3-1存儲(chǔ)器操作數(shù)的類型屬性及返回值字節(jié)字雙字NEARFAR124-1-211第十一頁,共九十五頁,2022年,8月28日4)LENGTH和SIZE(對(duì)用DUP定義數(shù)據(jù)的情況下)LENGTH:返回一個(gè)與存儲(chǔ)器操作數(shù)相聯(lián)系的基本數(shù)據(jù)個(gè)數(shù),
SIZE:返回一個(gè)為存儲(chǔ)器操作數(shù)分配的字節(jié)數(shù)關(guān)系:SIZE=LENGTH×TYPE例如:若MULT-WORDDW50DUP(0)則LENGTHMULT-WORD=50SIZEMULT-WORD=100TYPEMULT-WORD=212第十二頁,共九十五頁,2022年,8月28日3、屬性運(yùn)算符用來給指令中的操作數(shù)指定一個(gè)臨時(shí)的屬性,而暫時(shí)忽略操作數(shù)定義時(shí)的屬性。1)PTR定義操作數(shù)為新的類型一般格式:類型PTR操作數(shù)功能:建立一個(gè)存儲(chǔ)器操作數(shù),它與其后的存儲(chǔ)器操作數(shù)有相同的段地址和偏移地址,但有不同的類型。
F2DW3456HMOVAL,BYTEPTRF2MOV[BX],3MOVBYTEPTR[BX],3;AL:56H;錯(cuò),類型不明確;字節(jié)傳輸13第十三頁,共九十五頁,2022年,8月28日3.1.3表達(dá)式
是由運(yùn)算符和操作數(shù)組成的序列,在匯編時(shí)產(chǎn)生一個(gè)確定的值。這個(gè)值可以僅表示一個(gè)常量,也可以表示一個(gè)存儲(chǔ)單元的偏移地址,相應(yīng)的表達(dá)式稱為常量表達(dá)式和地址表達(dá)式。
14第十四頁,共九十五頁,2022年,8月28日1、常數(shù)二進(jìn)制(B),八進(jìn)制(Q),十六進(jìn)制(H),十進(jìn)制(D)(默認(rèn)),十進(jìn)制浮點(diǎn)數(shù),十六進(jìn)制實(shí)數(shù),字符和字符串10001100100B244Q64H‘BD’‘Thisisaclassroom.’15第十五頁,共九十五頁,2022年,8月28日2、常量操作數(shù)
常量操作數(shù)是一個(gè)數(shù)值操作數(shù),一般是常量或者是表示常量的標(biāo)識(shí)符。
如:COUNTEQU10NAME=‘J’
可以為數(shù)字常量操作數(shù)或字符串常量操作數(shù)。前者可采用二進(jìn)制、八進(jìn)制、十進(jìn)制或十六進(jìn)制等進(jìn)位計(jì)數(shù)形式;而后者所對(duì)應(yīng)的常量值為相應(yīng)字符的ASCII碼。
16第十六頁,共九十五頁,2022年,8月28日3、存儲(chǔ)器操作數(shù)
存儲(chǔ)器操作數(shù)是一個(gè)地址操作數(shù),代表一個(gè)存儲(chǔ)單元的地址,通常以標(biāo)識(shí)符的形式出現(xiàn)。變量:代表的是某個(gè)數(shù)據(jù)在數(shù)據(jù)段、附加段或堆棧段中的地址。變量所對(duì)應(yīng)的存儲(chǔ)單元內(nèi)容在程序的運(yùn)行過程中是可以改變的。標(biāo)號(hào):代表的是某條指令代碼在代碼段中的地址。標(biāo)號(hào)通常作為轉(zhuǎn)移指令或調(diào)用指令的目標(biāo)操作數(shù),在程序運(yùn)行過程中不能改變。
17第十七頁,共九十五頁,2022年,8月28日存儲(chǔ)器操作數(shù)有三個(gè)屬性段屬性(SEG)
:所對(duì)應(yīng)存儲(chǔ)單元的段地址偏移量屬性(OFFSET)
:所對(duì)于存儲(chǔ)單元在所在段內(nèi)的偏移地址(距段起點(diǎn)的字節(jié)數(shù))類型屬性(TYPE)變量的類型是占用存儲(chǔ)單元的字節(jié)數(shù),分為:DB(1個(gè)字節(jié))DW(2個(gè)字節(jié))DD(4個(gè)字節(jié))標(biāo)號(hào)的類型則反映了相應(yīng)存儲(chǔ)單元地址在作為轉(zhuǎn)移或調(diào)用指令的目標(biāo)操作數(shù)時(shí)的尋址方式,可有兩種情況,即NEAR和FAR。
18第十八頁,共九十五頁,2022年,8月28日DATASEGMENTXDB5,4YDW40HZDD2030HDATAENDS05H04H40H00H30H20H00H00HDS:0000HXYZX,Y,Z分別都有三個(gè)屬性:段地址,偏移地址和類型值,這三個(gè)屬性都有固定的值。19第十九頁,共九十五頁,2022年,8月28日4、常量表達(dá)式
由常量操作數(shù)及運(yùn)算符構(gòu)成,在匯編時(shí)產(chǎn)生一個(gè)常量。
如PORT、VAL十1、OFFSETSUM、SEGSUM、TYPECYCLE等。
20第二十頁,共九十五頁,2022年,8月28日5、地址表達(dá)式
由存儲(chǔ)器操作數(shù)與運(yùn)算符構(gòu)成,但由存儲(chǔ)器操作數(shù)構(gòu)成地址表達(dá)式時(shí),必須有明確的物理意義。
例如
SUM+2、CYCLE-5表達(dá)式SUM+2、CYCLE-5的值仍然是一個(gè)存儲(chǔ)器操作數(shù),該存儲(chǔ)器操作數(shù)的段地址與類型屬性分別與存儲(chǔ)器操作數(shù)SUM及CYCLE相同,但偏移地址分別比SUM及CYCLE大2或小5。表達(dá)式是在匯編時(shí)計(jì)算的,而變量單元的內(nèi)容在程序的運(yùn)行過程中可以改變。21第二十一頁,共九十五頁,2022年,8月28日3.1.4匯編語言程序匯編步驟22第二十二頁,共九十五頁,2022年,8月28日.ASM.OBJ.EXE匯編連接宏匯編程序:MASM.EXE連接程序:LINK.EXE編輯程序源程序連接程序匯編程序目標(biāo)程序執(zhí)行程序步驟:1)編寫源程序;2)匯編;3)連接;4)調(diào)試。23第二十三頁,共九十五頁,2022年,8月28日用戶編寫程序,程序在計(jì)算機(jī)中運(yùn)行,計(jì)算機(jī)的控制由操作系統(tǒng)交給用戶程序,運(yùn)行用戶程序,當(dāng)用戶程序運(yùn)行結(jié)束后,應(yīng)再將控制權(quán)交回操作系統(tǒng),所以,在程序中應(yīng)該有返回DOS的操作。在計(jì)算機(jī)中,返回DOS的操作由操作系統(tǒng)中的一個(gè)子程序來實(shí)現(xiàn),用戶使用時(shí)調(diào)用這個(gè)子程序即可。24第二十四頁,共九十五頁,2022年,8月28日每當(dāng)一個(gè)用戶的可執(zhí)行文件.EXE裝入內(nèi)存后,存儲(chǔ)器的分配情況如圖:系統(tǒng)占用程序段前綴用戶數(shù)據(jù)區(qū)用戶堆棧區(qū)用戶代碼段…………系統(tǒng)和ROM占用00000HDS,ES100個(gè)字節(jié)SS用戶程序空間FFFFFHCS25第二十五頁,共九十五頁,2022年,8月28日系統(tǒng)占用INT20H
程序段前綴用戶數(shù)據(jù)區(qū)用戶堆棧區(qū)用戶代碼段…………系統(tǒng)和ROM占用無論用戶程序有幾段,也無論這些段的排列順序如何,用戶程序的代碼前一定有100個(gè)字節(jié)的程序段前綴(ProgramSegmentPrefix,簡稱PSP),PSP給出了用戶的可執(zhí)行文件(.EXE)的若干控制信息。其中PSP的開始處(第1,2字節(jié))有一條中斷指令I(lǐng)NT20H的代碼,通過它可以結(jié)束用戶程序,返回操作系統(tǒng)。在用戶程序執(zhí)行完以后,通過執(zhí)行該條指令就可以返回DOS。26第二十六頁,共九十五頁,2022年,8月28日如何使用戶程序執(zhí)行完后返回來執(zhí)行這條指令?系統(tǒng)占用INT20H
程序段前綴用戶數(shù)據(jù)區(qū)用戶堆棧區(qū)用戶代碼段……RET系統(tǒng)和ROM占用DS,ESSSCS首先將用戶程序定義為一個(gè)遠(yuǎn)過程,當(dāng)可執(zhí)行文件裝入內(nèi)存后,DS,ES兩個(gè)段寄存器被CPU自動(dòng)設(shè)置為指向PSP的首址,所以一般程序的開始指令為:
PUSHDSMOVAX,0PUSHAX即將DS的內(nèi)容和0000H壓入堆棧,程序結(jié)束時(shí)的最后一條語句為RET,就把壓入堆棧的PSP段的段地址和偏移地址0000H彈出并送入CS和IP,轉(zhuǎn)而執(zhí)行返回DOS的指令I(lǐng)NT20H。00H00HPSPLPSPH堆棧情況27第二十七頁,共九十五頁,2022年,8月28日返回操作系統(tǒng)的另一個(gè)辦法是通過系統(tǒng)調(diào)用(調(diào)用號(hào)是4CH)。這時(shí),在用戶程序結(jié)束時(shí),用下面兩條指令:
MOVAH,4CHINT21H即可實(shí)現(xiàn)返回DOS。28第二十八頁,共九十五頁,2022年,8月28日§3.2偽指令29第二十九頁,共九十五頁,2022年,8月28日偽指令:偽指令不是CPU運(yùn)行的指令,而是程序員給匯編程序下達(dá)的命令。是在匯編源程序期間由匯編程序執(zhí)行的命令。偽指令用來對(duì)匯編程序進(jìn)行控制,對(duì)程序中的數(shù)據(jù)進(jìn)行存儲(chǔ)空間分配、實(shí)現(xiàn)條件匯編、列表等處理,其格式和匯編指令一樣,但不產(chǎn)生目標(biāo)代碼,即不直接命令CPU去執(zhí)行什么操作。30第三十頁,共九十五頁,2022年,8月28日3.2.1數(shù)據(jù)定義偽指令DB:定義字節(jié),其后的每個(gè)操作數(shù)占有一個(gè)存儲(chǔ)單元,連續(xù)存放;BUFFERDB2,3STRINGDB‘NO’‘O’‘N’03H02HBUFFERDW:定義字,其后的每個(gè)操作數(shù)占有兩個(gè)字節(jié);BUFDW2,3,505H00H00H03H00H02HBUFSTRINGDD:定義雙字,其后每個(gè)操作數(shù)占4個(gè)字節(jié);還有DQ(4個(gè)字長)、DT(10個(gè)字節(jié)長)31第三十一頁,共九十五頁,2022年,8月28日若僅保留單元,不初始化,用?代替初值;若數(shù)據(jù)重復(fù),用nDUP()代替,n為重復(fù)次數(shù)。ARRAYDB100DUP(?)保留100個(gè)字節(jié),首地址為ARRAY,不初始化,即100個(gè)字節(jié)內(nèi)均為隨機(jī)值DATA1DB100DUP(‘AB’)初始化200個(gè)字節(jié),內(nèi)有100個(gè)41H,42H(即41H42H41H42H
41H42H……)32第三十二頁,共九十五頁,2022年,8月28日例:有如下數(shù)據(jù)定義偽指令:VALDB1,4DUP(5,2DUP(FFH,0))則在VAL存儲(chǔ)區(qū)前10個(gè)字節(jié)單元的數(shù)據(jù)是:1,5,FFH,0,FFH,0,5,FFH,0,FFH若定義DW1,2,5DUP(‘YES’,2DUP(3)),則在存儲(chǔ)區(qū)的數(shù)據(jù)是什么?33第三十三頁,共九十五頁,2022年,8月28日3.2.2符號(hào)定義偽指令標(biāo)識(shí)符EQU表達(dá)式標(biāo)識(shí)符=表達(dá)式給標(biāo)識(shí)符定義一個(gè)值或其他符號(hào)名或一條可執(zhí)行語句,匯編時(shí),凡是出現(xiàn)該標(biāo)識(shí)符的地方就用定義的數(shù)據(jù)替代。注意:用EQU賦值的名字不能重新賦值,需用PURGE釋放后重新定義。如:PURGETIMESTIMESEQU100TIMESEQU50BUFDBTIMESDUP(?)等效于:BUFDB50DUP(?)BETA=TIMES-2BETA=TIMES+5;重新賦值34第三十四頁,共九十五頁,2022年,8月28日DATASEGMENTADW3BDW4LEQUB-ADATAENDS03H00H04H00HDS:0000H數(shù)據(jù)段L為常量,不占空間,值為235第三十五頁,共九十五頁,2022年,8月28日3.2.3段定義偽指令SEGMENT和ENDS一般的源程序分為4個(gè)段:代碼段Code、數(shù)據(jù)段Data、堆棧段Stack、附加段Extra。各個(gè)段從段定義語句開始,到段結(jié)束語句ENDS結(jié)束。段名
SEGMENT[定位類型][組合類型][類別]……段體……段名
ENDS用戶指定可任選定義36第三十六頁,共九十五頁,2022年,8月28日1)段名必須是合法的標(biāo)識(shí)符。2)定位類型:表示本段起始地址位于何處內(nèi)存可以看成是一本書,將其分成頁,段,字,和字節(jié)。每256個(gè)地址為一頁(PAGE),每頁的起始地址為二進(jìn)制:************0000000016進(jìn)制:***00H第一頁(256個(gè)地址)第二頁(256個(gè)地址)00000H000FFH00100H00200H001FFH37第三十七頁,共九十五頁,2022年,8月28日每16個(gè)地址為一段(PARA),每段的起始地址為二進(jìn)制:****************000016進(jìn)制:****0H第一段(16個(gè)地址)第二段(16個(gè)地址)***00H***0FH***10H***1FH***20H段(節(jié))是默認(rèn)的定位類型。38第三十八頁,共九十五頁,2022年,8月28日每2個(gè)地址為一個(gè)字(WORD),每個(gè)字的起始地址為偶數(shù);最基本的類型是字節(jié)(BYTE),每個(gè)字節(jié)只包含一個(gè)地址,可以是內(nèi)存的任何空間。定位類型表示所定義的段存放在內(nèi)存空間時(shí),段首地址對(duì)內(nèi)存空間的要求,即段起始點(diǎn)是放在一頁的起點(diǎn)上(PAGE)還是一段的起點(diǎn)上(PARA)等,如果不定義定位類型,編譯程序?qū)⒛J(rèn)其為段類型,即將段首地址放在從****0H開始的內(nèi)存空間。BYTE:
表示本段起始單元可以從任一地址開始;WORD:
表示本段起始單元從一個(gè)偶地址開始;PARA:
表示本段起始單元從一個(gè)段的邊界開始(默認(rèn));PAGE:
表示本段起始單元從一個(gè)頁的邊界開始。39第三十九頁,共九十五頁,2022年,8月28日3)組合類型告訴匯編程序,所定義的段與其他段的關(guān)系,即將該段存放內(nèi)存時(shí),是否將該段與其他段在物理上或邏輯上放在一起。NONE:
表示本段與其他段不發(fā)生任何關(guān)系,該段有自己的段基址,是默認(rèn)的組合關(guān)系。PUBLIC:在滿足定位類型的前提下與其他模塊的同名段連接在一起,形成一個(gè)新的邏輯段,共用一個(gè)段基址。40第四十頁,共九十五頁,2022年,8月28日COMMON:
表示產(chǎn)生一個(gè)覆蓋段。連接時(shí),把本段與其他也用COMMON說明的同名段置成相同的起始地址,重疊在一起,共享相同的存儲(chǔ)區(qū),其段長度由最長的段確定。STACK:
在每個(gè)匯編程序中,只能必須有一個(gè)堆棧段,連接時(shí),將本段與其他也用STACK說明的同名段連接成一個(gè)連續(xù)的STACK段,編譯程序自動(dòng)初始化SS和SP寄存器,使SS的內(nèi)容為該連續(xù)段的段基址,SP指向堆棧底部加1的存儲(chǔ)單元。41第四十一頁,共九十五頁,2022年,8月28日MEMORY:
表示本段在存儲(chǔ)器中應(yīng)定位在所有其他段的最高地址。AT<表達(dá)式>:表示本段從表達(dá)式指定的地址處開始裝入,這樣,在程序中用戶就可以直接定義段地址,這種方式不適用于代碼段。42第四十二頁,共九十五頁,2022年,8月28日4)類別是用單引號(hào)括起來的字符串,以表明該段的類別,如代碼段(CODE)、數(shù)據(jù)段(DATA)、堆棧段(STACK)等。當(dāng)然也允許用戶在類別中用其他的名,這樣進(jìn)行連接時(shí),連接程序便將同類別的段(但不一定同名)放在連續(xù)的存儲(chǔ)區(qū)內(nèi)。43第四十三頁,共九十五頁,2022年,8月28日3.2.4設(shè)定段寄存器偽指令A(yù)SSUME一般格式:ASSUME
段寄存器:段名[,段寄存器:段名,…]功能:通知匯編程序,哪一個(gè)段寄存器是該段的段寄存器,以便對(duì)使用變量或標(biāo)號(hào)的指令匯編出正確的目的代碼。
例如,CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK
44第四十四頁,共九十五頁,2022年,8月28日注意:
當(dāng)程序運(yùn)行時(shí),由于DOS的裝入程序負(fù)責(zé)把CS初始化成正確的代碼段地址,SS初始化為正確的堆棧段地址,因此用戶在程序中就不必設(shè)置。但是,在裝入程序中DS寄存器由于被用作其它用途,因此,在用戶程序中必須用兩條指令對(duì)DS進(jìn)行初始化,以裝入用戶的數(shù)據(jù)段段地址。當(dāng)使用附加段時(shí),也要用MOV指令給ES賦段地址。
例如,CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK
MOVAX,DATA;DATA段值送AX
MOV
DS,AX;AX內(nèi)容送DS,DS才有實(shí)際段值
CODEENDS45第四十五頁,共九十五頁,2022年,8月28日3.2.5過程定義偽指令PROC和ENDP
在程序設(shè)計(jì)中,可將具有一定功能的程序段看成為一個(gè)過程(相當(dāng)于一個(gè)子程序),它可以被別的程序調(diào)用。要求先定義后使用。
一個(gè)過程由偽指令PROC和ENDP來定義,其格式為:過程名PROC[類型]過程體
RET過程名
ENDP注意:PROC和ENDP要成對(duì)出現(xiàn)。過程名是為過程所起的名稱,不能省略
類型由FAR(遠(yuǎn)過程,為段間調(diào)用)和NEAR(近過程,為段內(nèi)調(diào)用)來確定,如果缺省類型,則該過程就默認(rèn)為近過程。過程體內(nèi)至少有一條RET指令46第四十六頁,共九十五頁,2022年,8月28日一個(gè)碼段中可以包含一個(gè)或許多過程。過程可以嵌套調(diào)用,可以遞歸調(diào)用,但不可以嵌套定義。MYCODESEGMENTASSUMECS:MYCODESUB1PROCFAR……RETSUB1
ENDPSUB2PROCNEAR……RETSUB2ENDP……CALLSUB2MYCODE
ENDSFAR:
該過程為遠(yuǎn)過程,調(diào)用該過程時(shí)為段間調(diào)用,即CS和IP均要重新賦值;NEAR:
該過程為近過程,調(diào)用該過程時(shí)為段內(nèi)調(diào)用,只修改IP。(默認(rèn))CALL:
調(diào)用過程SUB2,到此處才真正去執(zhí)行子程序。47第四十七頁,共九十五頁,2022年,8月28日例:延時(shí)100ms的子程序,編程定義如下:DELAYPROC
MOVBL,10AGAIN:MOVCX,2801HWAIT1:LOOPWAIT1DECBLJNZAGAINRETDELAYENDP任何一個(gè)過程都要求先定義,后調(diào)用。調(diào)用時(shí)才真正執(zhí)行該過程。一個(gè)過程產(chǎn)生一段目標(biāo)代碼。48第四十八頁,共九十五頁,2022年,8月28日在匯編語言書寫的源程序中,有的程序段要多次使用,為了簡化書寫,該程序段可以用一條特殊的指令來代替,這個(gè)特殊的指令就是宏指令。宏指令只是為了方便書寫,當(dāng)匯編程序匯編生成目標(biāo)代碼時(shí),在引用宏指令處仍會(huì)產(chǎn)生原來程序段應(yīng)生成的目標(biāo)代碼,引用一次生成一次。3.2.6宏指令49第四十九頁,共九十五頁,2022年,8月28日1)宏指令定義格式:宏指令名MACRO<形參列表>匯編程序段(宏體)ENDMMACRO與ENDM必須成對(duì)出現(xiàn),先定義后引用SHIFTMACROMOVCL,4SALAL,CLENDM宏名程序段:將AL左移4位(乘16)INAL,5FHSHIFTOUT5FH,AL在程序中引用宏指令如下:50第五十頁,共九十五頁,2022年,8月28日宏指令也可以接收參數(shù),如對(duì)X左移Y位。SHIFTMACROX,YMOVCL,YSALX,CLENDM形參列表MOVBX,WORDPTRBUFSHIFT
BX,4MOVWORDPTRBUF,BX在程序中引用宏指令如下:功能:BX的值左移4位。BXX4Y實(shí)參形參一一對(duì)應(yīng)51第五十一頁,共九十五頁,2022年,8月28日3.2.7定位偽指令格式:ORG表達(dá)式功能:指定在其后的指令或數(shù)據(jù)存放的偏移地址。CODESEGMENTORG0100HMOVAX,0CODEENDS指定MOV指令放在代碼段中偏移地址為0100H開始的位置。DATASEGMENTORG2000HNUMDB0,5DATAENDS指定NUM指向數(shù)據(jù)段中偏移地址為2000H開始的位置。52第五十二頁,共九十五頁,2022年,8月28日3.2.8匯編結(jié)束偽指令END匯編程序在匯編時(shí)遇到END,便知源程序已經(jīng)結(jié)束。一般格式:END表達(dá)式表達(dá)式為可執(zhí)行程序運(yùn)行的起始位置。一般是一個(gè)標(biāo)號(hào)。53第五十三頁,共九十五頁,2022年,8月28日完整結(jié)構(gòu)1DATASEGMENTXDB3YDB5DATAENDSSTACKSEGMENTSTACK‘STACK’DB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK
BEGIN:
MOVAX,DATAMOVDS,AX……………………
MOVAH,4CHINT21HCODEENDSENDBEGIN設(shè)置DS段寄存器內(nèi)容源程序結(jié)束,第一條指令的地址分配段寄存器首指令位置數(shù)據(jù)段堆棧段(可略)返回DOS54第五十四頁,共九十五頁,2022年,8月28日完整結(jié)構(gòu)2DATASEGMENTXDB3YDB5DATAENDSSTACKSEGMENTSTACK‘STACK’DB100DUP(?)STACKENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK
BEGINPROCFAR
PUSHDSXORAX,AXPUSHAXMOVAX,DATAMOVDS,AX…………
RETBEGINENDPCODEENDSENDBEGIN將PSP首址壓棧,以便返回DOS。設(shè)置DS段寄存器內(nèi)容源程序結(jié)束,第一條指令的地址分配段寄存器主過程名數(shù)據(jù)段堆棧段(可略)返回DOS55第五十五頁,共九十五頁,2022年,8月28日§3.3匯編程序設(shè)計(jì)56第五十六頁,共九十五頁,2022年,8月28日匯編語言編寫的程序也跟高級(jí)語言類似,程序結(jié)構(gòu)分三種:順序、分支、循環(huán);較復(fù)雜的程序也應(yīng)該是由眾多子程序組成的,每個(gè)子程序是一個(gè)過程,在程序中被顯式地調(diào)用。變量等數(shù)據(jù)部分被定義在數(shù)據(jù)段,所有程序都要顯式地定義堆棧段。匯編程序的每一條指令都與機(jī)器語言一一對(duì)應(yīng),因此,匯編生成的可執(zhí)行文件代碼少,適合于實(shí)時(shí)控制,但由于語法成分很少,不適合于復(fù)雜的算法、運(yùn)算。匯編程序主要的調(diào)試環(huán)境是DOS系統(tǒng)下的DEBUG程序。57第五十七頁,共九十五頁,2022年,8月28日一、順序程序設(shè)計(jì)順序程序設(shè)計(jì)是沒有分支,沒有循環(huán)的直線運(yùn)行程序,程序執(zhí)行按照IP內(nèi)容自動(dòng)增加的順序進(jìn)行。58第五十八頁,共九十五頁,2022年,8月28日例1利用查表法計(jì)算平方值。已知0~9的平方值連續(xù)存在以SQTAB開始的存儲(chǔ)區(qū)域中,求SUR單元內(nèi)容X的平方值,并放在DIS單元中。假定0≤X≤9且為整數(shù)。
分析:解這個(gè)問題,關(guān)鍵在兩方面,一是了解平方表的存放位置;二是根據(jù)X的值,找到X對(duì)應(yīng)X2在表中位置,在這里為表的首地址加上
X單元的內(nèi)容。也可以用查表指令。
59第五十九頁,共九十五頁,2022年,8月28日例2已知
Z=(X+Y)-(W+Z),其中X,Y,Z,W均為用壓縮BCD碼表示的數(shù),寫出程序段。
分析:注意是壓縮BCD碼相加減,因此正常運(yùn)算完要進(jìn)行相應(yīng)的十進(jìn)制調(diào)整。60第六十頁,共九十五頁,2022年,8月28日二、分支程序設(shè)計(jì)分支程序的基本思想是根據(jù)邏輯判斷的結(jié)果來形成程序的分支,如圖,若條件A成立,則執(zhí)行P1;否則執(zhí)行P2。一般情況下,兩個(gè)分支僅選其一執(zhí)行。
61第六十一頁,共九十五頁,2022年,8月28日例1試編寫完整程序,實(shí)現(xiàn)符號(hào)函
數(shù)。變量X的符號(hào)函數(shù)可表示為:
1X>0
Y=0X=0
-1X<0
分析:解這個(gè)問題,要注意對(duì)X的值的判別。這時(shí),根據(jù)判別的結(jié)果要出現(xiàn)三個(gè)分支,因此,需要進(jìn)行兩次判別。62第六十二頁,共九十五頁,2022年,8月28日例2將內(nèi)存數(shù)據(jù)區(qū)中從STR1開始的數(shù)據(jù)
塊傳送到STR2指示的另一區(qū)域中,
數(shù)據(jù)塊長度由STRCOUNT指示。
分析:采用串操作實(shí)現(xiàn)。首先判斷源數(shù)據(jù)塊和目的數(shù)據(jù)塊之間是否有重疊,若無則直接傳;若有則要判別:源地址+數(shù)據(jù)塊長度目的地址是則地址增量修改,反之地址減量修改。
63第六十三頁,共九十五頁,2022年,8月28日三、循環(huán)程序設(shè)計(jì)
循環(huán)程序是經(jīng)常遇到的程序結(jié)構(gòu),一個(gè)循環(huán)結(jié)構(gòu)通常由以下幾個(gè)部分組成。
1.循環(huán)初始化部分。一般要進(jìn)行地址指針、循環(huán)次數(shù)的設(shè)置,相關(guān)寄存器的清零等操作。只有正確地進(jìn)行了初始化設(shè)置,循環(huán)程序才能正確運(yùn)行,及時(shí)停止。2.循環(huán)體。是要求重復(fù)執(zhí)行的程序段部分。3.循環(huán)控制部分。由該部分修改并判斷控制循環(huán)的條件是否滿足,以決定是否繼續(xù)循環(huán)。4.循環(huán)結(jié)束部分。如保存循環(huán)運(yùn)行結(jié)果等。
64第六十四頁,共九十五頁,2022年,8月28日例1
將數(shù)據(jù)段中TABLE開始的連續(xù)100個(gè)
單元寫入0AAH,然后逐個(gè)讀出進(jìn)行
檢查,若發(fā)現(xiàn)有錯(cuò),則置FLAG=1,
反之,置FLAG=0。試編寫完整程序。分析:通過循環(huán),往指定存區(qū)寫入0AAH,然后逐個(gè)讀出,與0AAH相比較,全部相同時(shí),0
Flag
如有不相同時(shí),1Flag設(shè)置BX為地址指針,初值指向TABLE,循環(huán)控制變量初值為100。65第六十五頁,共九十五頁,2022年,8月28日例2
設(shè)內(nèi)存BUFF開始的單元中依次存放
著30個(gè)8位無符號(hào)數(shù),求它們的和并
放在SUM單元中,試編寫完整程序。
分析:這是一個(gè)求累加的程序。設(shè)置工作單元存放累加和,初始值送0。然后逐個(gè)
讀出數(shù)據(jù),做累加和+數(shù)據(jù)累加和,循環(huán)進(jìn)行N次。設(shè)置SI為地址指針,初值指向BUFF,循環(huán)控制變量初值為30。66第六十六頁,共九十五頁,2022年,8月28日例3
在ARRAY開始的存區(qū)中存放著一組字
數(shù)據(jù),個(gè)數(shù)由COUNT指示。試編寫程序
段尋找其中的最大數(shù),放在MAX中。
分析:設(shè)置工作單元,先把第一個(gè)數(shù)放入,然后逐個(gè)讀出數(shù)據(jù)與其相比較,如讀出的數(shù)據(jù)大時(shí),則數(shù)據(jù)工作單元如工作單元中的數(shù)據(jù)大時(shí),則不送。循環(huán)進(jìn)行N-1次。設(shè)置BX為地址指針,初值指向ARRAY,循環(huán)控制變量初值為COUNT-1。67第六十七頁,共九十五頁,2022年,8月28日例4
在給定的16位數(shù)組中,找出大于零、等于零和小于零的數(shù)據(jù)個(gè)數(shù),并緊跟著原數(shù)組存放。已知數(shù)據(jù)段定義如下:
DATA SEGMENT
BUFFDWX1,X2,X3,……,Xn
COUNTEQU$-BUFF;此時(shí),COUNT的
值為BUFF所占的字節(jié)數(shù)
PLUSDB?
ZERODB?
MINUS DB?
DATA ENDS
68第六十八頁,共九十五頁,2022年,8月28日分析:這是一個(gè)統(tǒng)計(jì)問題,須設(shè)定三個(gè)計(jì)數(shù)器分別統(tǒng)計(jì)三種情況下的結(jié)果。計(jì)數(shù)器的初始值送0。
然后逐個(gè)讀出數(shù)據(jù)進(jìn)行判別,滿足哪個(gè)條件,就在哪個(gè)計(jì)數(shù)器中做統(tǒng)計(jì)即計(jì)數(shù)器+1計(jì)數(shù)器,循環(huán)進(jìn)行N次。設(shè)置BX為地址指針,初值指向BUFF,DH、DL、
AH為計(jì)數(shù)器,分別存放=0、>0、<0的數(shù)據(jù)個(gè)數(shù)。循環(huán)控制變量初值為原始數(shù)據(jù)個(gè)數(shù)。69第六十九頁,共九十五頁,2022年,8月28日例5
要求從0FFH端口輸入一組100個(gè)字符,若
該字符是數(shù)字,則轉(zhuǎn)換成數(shù)值后以非壓縮
BCD碼的形式存放在以DATA開始的存區(qū),
并統(tǒng)計(jì)輸入的數(shù)字的個(gè)數(shù),存放在NUM
單元中。分析:如何確定輸入的是數(shù)字?判別:‘0’
≤X≤‘9’
如何將數(shù)字的ASCII碼轉(zhuǎn)換成非壓縮BCD碼?
XAND0FHX或X-30HX即可
設(shè)置BX為地址指針,初值指向DATA,DH為計(jì)數(shù)器進(jìn)行統(tǒng)計(jì)。循環(huán)進(jìn)行N次。循環(huán)控制變量初值為100。70第七十頁,共九十五頁,2022年,8月28日思考:
1、若題目沒有明確告知輸入的字符個(gè)數(shù),僅以‘$’表示輸入結(jié)束,程序如何修改?
2、若題目要求以壓縮BCD碼形式存放,程序又該如何修改?71第七十一頁,共九十五頁,2022年,8月28日DATASEGMENTORG1000HADDRDW?COUNTDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXXORCX,CXMOVAX,ADDRREPEAT:TESTAX,0FFFFHJZEXITSHRAX,1JNCNEXTINCCXNEXT:JMPREPEAT
EXIT:MOVCOUNT,CXMOVAX,4C00HINT21HCODEENDSENDSTART例6閱讀此程序,指出該程序完成了什么工作?統(tǒng)計(jì)在數(shù)據(jù)段1000H單元(ADDR)開始存放的16位數(shù)據(jù)中1的個(gè)數(shù),并將統(tǒng)計(jì)結(jié)果存放在COUNT單元中。72第七十二頁,共九十五頁,2022年,8月28日例7在當(dāng)前數(shù)據(jù)段從偏移地址BUFFER開始
順序存放著100個(gè)無符號(hào)16位數(shù),現(xiàn)要編
寫程序?qū)⑦@100個(gè)字?jǐn)?shù)據(jù)從大到小排序。分析:排序的方法有很多,我們采用冒泡法實(shí)現(xiàn)。
這時(shí),需要兩重循環(huán)。外循環(huán)控制變量BL的初值為99,每次減1,而內(nèi)循環(huán)控制變量CL每次的初值等于當(dāng)時(shí)BL的值。設(shè)置DI為基本地址指針,初值指向BUFFER,另一個(gè)地址指針SI的初值每次總同DI的值,也就是說,內(nèi)循環(huán)總是從第一個(gè)數(shù)據(jù)開始。73第七十三頁,共九十五頁,2022年,8月28日DS_SEGSEGMENTCOUNTDB4BLK1DB96H,74H,32H,16HBLK2DB65H,94H,87H,29HBLK3DB4DUP(?)DS_SEGENDSCS_SEGSEGMENTASSUMECS:CS_SEG,DS:DS_SEGMAINPROCFARSTART:PUSHDS
XORAX,AXPUSHAXMOVAX,DS_SEGMOVDS,AXMOVSI,OFFSETBLK1MOVDI,OFFSETBLK2MOVBX,OFFSETBLK3MOVCL,COUNTMOVCH,0CLCNEXT:MOVAL,[SI]INCSIADCAL,[DI]INCDIDAAMOV[BX],ALINCBXLOOPNEXTRETMAINENDPCS_SEGENDSENDSTART4H96H74H32H16H65H94H87H29HCOUNTBLK1BLK2BLK3SIDIBXBCD碼加法16327496298794654620696161H69H20H46H74第七十四頁,共九十五頁,2022年,8月28日DATASEGMENTTABLEDW1020H,2030H,3040H,4050H,5060HTEMPDW5DUP(0)COUNTDW5DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:MOVAX,DATAMOVDS,AXMOVES,AXMOVCX,COUNTLEASITABLELEADI,TEMPCLDREPMOVSWLEASI,TEMPMOVCX,COUNTMOVDI,OFFSETTABLEMOVBX,CXSHLBX,1LOP1:DECBXDECBXMOVAX,[SI+BX]MOV[DI],AXADDDI,2LOOPLOP1MOVAX,4C00HINT21HRETMAINENDPCODEENDSENDSTARTREPMOVSW在指令中的功能是:循環(huán)程序段LOP1的功能是:程序運(yùn)行結(jié)束時(shí)TEMP+2,TEMP+0字單元的內(nèi)容程序運(yùn)行結(jié)束時(shí),DI的值為:復(fù)制數(shù)據(jù)塊TABLE到TEMP將原數(shù)據(jù)塊倒排2030H5060HTEMP或TABLE+1075第七十五頁,共九十五頁,2022年,8月28日DATASEGMENTTABLEDW1020H,2030H,3040H,4050H,5060HTEMPDW5DUP(0)COUNTDW5DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:MOVAX,DATAMOVDS,AXMOVES,AXMOVCX,COUNTLEASITABLELEADI,TEMP
CLDREPMOVSWLEASI,TEMPMOVCX,COUNTMOVDI,OFFSETTABLEMOVBX,CXSHLBX,1LOP1:DECBXDECBXMOVAX,[SI+BX]MOV[DI],AXADDDI,2LOOPLOP1MOVAX,4C00HINT21HRETMAINENDPCODEENDSENDSTART若將CLD改為STD,則程序運(yùn)行結(jié)束時(shí),TEMP+8字單元,TEMP字單元的內(nèi)容分別是:1020H1020H76第七十六頁,共九十五頁,2022年,8月28日四、子程序設(shè)計(jì)對(duì)于一個(gè)子程序,應(yīng)該注意它的入口參數(shù)和出口參數(shù)。入口參數(shù)是由主程序傳給子程序的參數(shù),而出口參數(shù)是子程序運(yùn)算完傳給主程序的結(jié)果。另外,子程序所使用的寄存器和存儲(chǔ)單元往往需要保護(hù),以免影響返回后主程序的運(yùn)行。77第七十七頁,共九十五頁,2022年,8月28日參數(shù)傳遞一般有三種方法實(shí)現(xiàn)。(1)利用寄存器。這是一種最常見方法,把所需傳遞的參數(shù)直接放在主程序的寄存器中傳遞給子程序。(2)利用存儲(chǔ)單元。把所需傳遞的參數(shù)直接放在子程序調(diào)用指令之后或通過數(shù)據(jù)區(qū)傳遞。(3)利用堆棧。這種方法將參數(shù)壓入堆棧,在子程序運(yùn)行時(shí)從堆棧中取參數(shù)。
78第七十八頁,共九十五頁,2022年,8月28日例1
用子程序的方法實(shí)現(xiàn)兩個(gè)六字節(jié)數(shù)相
加。原始數(shù)據(jù)分別存放在ADD1和
ADD2開始的存區(qū),結(jié)果存放在SUM
單元。分析:子程序功能:完成一個(gè)字節(jié)數(shù)的加法。要求:入口參數(shù)SI、DI分別指向源操作數(shù),BX指向存放結(jié)果單元。主程序調(diào)用六次子程序。
79第七十九頁,共九十五頁,2022年,8月28日例2
把數(shù)據(jù)段中的字變量NUMBER的值,轉(zhuǎn)換為4個(gè)用ASCII碼表示的十六進(jìn)制數(shù)碼串,存放在STRING開始的存區(qū)。分析:設(shè)計(jì)一個(gè)子程序,完成將AL中的16進(jìn)制數(shù)轉(zhuǎn)換成ASCII碼,結(jié)果仍在AL中。轉(zhuǎn)換公式是:如果AL中的數(shù)字是小于10的,則AL+‘0’即可;對(duì)于大于10的數(shù),要轉(zhuǎn)換成字母。如果轉(zhuǎn)換成小寫字母僅需AL-10+‘a(chǎn)’。如果要轉(zhuǎn)換成大寫字母,可以是AL-10+‘A’。本題轉(zhuǎn)換成小寫字母。主程序只要從低位開始每次取出一位16進(jìn)制數(shù),調(diào)用子程序完成轉(zhuǎn)換后按次序保存結(jié)果即可。
80第八十頁,共九十五頁,2022年,8月28日DATA SEGMENT
NUMBER DW 25AFH;定義原始數(shù)據(jù)
STRINGDB 4DUP(?);保存轉(zhuǎn)換后的ASCII碼
DATAENDS
CODESEGMENT
ASSUME CS:CODE,DS:DATA
HEXD PROC;定義過程
CMP AL,10
JB ADDZ;<10,轉(zhuǎn)移
ADD AL,‘a(chǎn)’-10;≥10,轉(zhuǎn)換成小寫字母
JMPHUI
ADDZ: ADD AL,‘0’;轉(zhuǎn)換成0~9的ASCII碼
HUI: RET
HEXD ENDP
81第八十一頁,共九十五頁,2022年,8月28日五、DOS功能調(diào)用82第八十二頁,共九十五頁,2022年,8月28日操作系統(tǒng)管理計(jì)算機(jī),為用戶提供與CPU對(duì)話的接口,也就是提供使用鍵盤和顯示器的通道,這樣,用戶不需要具體掌握這些接口的地址和輸入輸出數(shù)據(jù)的格式,直接執(zhí)行操作系統(tǒng)提供的命令就可以了。但是,在運(yùn)行用戶程序時(shí),DOS將操作權(quán)交給了用戶程序,這時(shí),用戶程序需要與鍵盤、顯示器等系統(tǒng)資源打交道該怎么辦?83第八十三頁,共九十五頁,2022年,8月28日在高級(jí)語言中,可以通過調(diào)用編譯系統(tǒng)提供的庫函數(shù)來實(shí)現(xiàn)。(這時(shí),編譯系統(tǒng)已把輸入輸出等操作功能做成函數(shù)的形式,用戶只要依據(jù)函數(shù)的格式進(jìn)行調(diào)用即可。)在匯編程序中,如果用戶程序要與輸入輸出設(shè)備打交道,就要調(diào)用現(xiàn)成的程序,這些程序是DOS系統(tǒng)的一部分,隨著DOS系統(tǒng)駐留內(nèi)存,DOS提供規(guī)定的接口格式供用戶調(diào)用。84第八十四頁,共九十五頁,2022年,8月28日DOS系統(tǒng)功能調(diào)用的步驟:1)送入口參數(shù)(選用)2)調(diào)用號(hào)送AH3)執(zhí)行INT21H4)保護(hù)出口參數(shù)(選用)
85第八十五頁,共九十五頁,2022年,8月28日1)在顯示器上顯示單個(gè)字符(2號(hào)功能)功能:在屏幕的光標(biāo)處顯示單個(gè)字符入口參數(shù):要顯示字符的ASCII碼放在DL中出口參數(shù):無MOVDL,‘A’MOVAH,2INT21H;提供調(diào)用功能號(hào);系統(tǒng)功能調(diào)用;在屏幕光標(biāo)處顯示字符A運(yùn)行至此,屏幕上當(dāng)前光標(biāo)處顯示字符A86第八十六頁,共九十五頁,2022年,8月28日2)在屏幕上顯示字符串(9號(hào)功能)功能:在屏幕上當(dāng)前光標(biāo)處輸出存儲(chǔ)在內(nèi)存數(shù)據(jù)段的一串字符串,該字符串以‘$’結(jié)束。入口參數(shù):DS:DX指向欲顯示字符串的首址出口參數(shù):無DATASEGMENTSTRINGDB‘Iamastudent.$’DATAENDS……MOVDX,OFFSETSTRINGMOVAH,9INT21H;指向字符串首址;提供調(diào)用功能號(hào);系統(tǒng)功能調(diào)用運(yùn)行至此,屏幕上當(dāng)前光標(biāo)處顯示Iamastudent87第八十七頁,共九十五頁,2022年,8月28日3)帶顯示的鍵盤輸入(1號(hào)功能)功能:等待鍵盤輸入,直到按下一個(gè)鍵。入口參數(shù):無出口參數(shù):鍵入鍵的ASCII碼放在AL中,并在屏幕上顯示該鍵。MOVAH
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國平紋網(wǎng)數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國仿石桌面數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年消防設(shè)施操作員之消防設(shè)備高級(jí)技能題庫練習(xí)試卷B卷附答案
- 質(zhì)檢員基礎(chǔ)知識(shí)培訓(xùn)課件
- 2025年大學(xué)生防詐騙知識(shí)競賽題庫試題及答案(共60題)
- 企業(yè)人力資源管理系統(tǒng)開發(fā)維護(hù)合同書
- 如何提升英語聽力水平:聽力技巧與素材選擇教學(xué)教案
- 年度金融科技行業(yè)投資研究報(bào)告表
- 水暖安裝勞務(wù)合同
- 戶外廣告位租賃經(jīng)營協(xié)議書
- 人教版八年級(jí)下冊(cè)英語全冊(cè)教案完整版教學(xué)設(shè)計(jì)含教學(xué)反思
- 煤礦探放水作業(yè)安全技術(shù)實(shí)際操作考試標(biāo)準(zhǔn)
- 銀行案件風(fēng)險(xiǎn)排查方案
- 2020年中國高爾夫球運(yùn)動(dòng)行業(yè)發(fā)展現(xiàn)狀及趨勢(shì)分析:消費(fèi)大眾化、年輕化圖
- 《中華人民共和國職業(yè)分類大典》電子版
- HD7簡明實(shí)用操作手冊(cè)
- 最終版冷卻塔安裝施工方案
- 徠卡說明書tps1200系列全站儀tps
- 干式變壓器和低壓配電柜日常巡檢書
- 研究性學(xué)習(xí)成果一覽表
- 生產(chǎn)一致性控制計(jì)劃
評(píng)論
0/150
提交評(píng)論