![第4章匯編語言程序設計_第1頁](http://file4.renrendoc.com/view/bb03c778a13abb7abec45b95f8ed0def/bb03c778a13abb7abec45b95f8ed0def1.gif)
![第4章匯編語言程序設計_第2頁](http://file4.renrendoc.com/view/bb03c778a13abb7abec45b95f8ed0def/bb03c778a13abb7abec45b95f8ed0def2.gif)
![第4章匯編語言程序設計_第3頁](http://file4.renrendoc.com/view/bb03c778a13abb7abec45b95f8ed0def/bb03c778a13abb7abec45b95f8ed0def3.gif)
![第4章匯編語言程序設計_第4頁](http://file4.renrendoc.com/view/bb03c778a13abb7abec45b95f8ed0def/bb03c778a13abb7abec45b95f8ed0def4.gif)
![第4章匯編語言程序設計_第5頁](http://file4.renrendoc.com/view/bb03c778a13abb7abec45b95f8ed0def/bb03c778a13abb7abec45b95f8ed0def5.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1微型計算機原理及應用2第四章匯編語言程序設計3.ASM.OBJ.EXE編譯連接編譯程序:MASM.EXE連接程序:LINK.EXE4用戶編寫程序,程序在計算機中運行,計算機的控制由操作系統(tǒng)交給用戶程序,運行用戶程序,當用戶程序運行結束后,應再將控制權交回操作系統(tǒng),所以,在程序中應該有返回DOS的指令。在計算機中,返回DOS的指令是操作系統(tǒng)中的一個子程序,用戶使用時應調(diào)用這個子程序。5每當一個用戶的可執(zhí)行文件.EXE裝入內(nèi)存后,存儲器的分配情況如圖:系統(tǒng)占用程序段前綴用戶數(shù)據(jù)區(qū)用戶堆棧區(qū)用戶代碼段…………系統(tǒng)和ROM占用00000HDS,ES100H個字節(jié)SS用戶程序空間FFFFFHCS6系統(tǒng)占用INT20H
程序段前綴用戶數(shù)據(jù)區(qū)用戶堆棧區(qū)用戶代碼段…………系統(tǒng)和ROM占用無論用戶程序有幾段,也無論這些段的排列順序如何,用戶程序的代碼前一定有100H個字節(jié)的程序段前綴(ProgramSegmentPrefix,簡稱PSP),PSP給出了用戶的可執(zhí)行文件(.EXE)的若干控制信息。其中PSP的開始處(第1,2字節(jié))有一條中斷指令INT20H的代碼,這條指令的功能是結束用戶程序,返回操作系統(tǒng)。在用戶程序執(zhí)行完以后,通過執(zhí)行該條指令就可以返回DOS。7如何使用戶程序執(zhí)行完后返回來執(zhí)行這條指令?系統(tǒng)占用INT20H
程序段前綴用戶數(shù)據(jù)區(qū)用戶堆棧區(qū)用戶代碼段……RET系統(tǒng)和ROM占用DS,ESSSCS首先將用戶程序定義為一個遠過程,當可執(zhí)行文件裝入內(nèi)存后,DS,ES兩個段寄存器被CPU自動設置為指向PSP的首址,所以一般程序的開始指令為:PUSHDSXORAX,AXPUSHAX即將DS的內(nèi)容和0000H壓入堆棧,程序結束時的最后一條語句為RET,就把壓入堆棧的PSP段的段基址和偏移量0000H彈出并送入CS和IP,轉(zhuǎn)而執(zhí)行返回DOS的指令INT20H。00H00HPSPLPSPH堆棧情況CSIP8返回操作系統(tǒng)的另一個辦法是用系統(tǒng)調(diào)用中斷指令:INT21H,在用戶程序結束時,用下面兩條指令:
MOVAH,4CHINT21H這兩條指令經(jīng)常用在短的程序段中,即用戶程序并不是一個完整的匯編程序,而只是由一些指令組成的、沒有堆棧區(qū)或數(shù)據(jù)區(qū)的程序段。9第一節(jié)偽指令10偽指令:偽指令不是處理器運行的指令,而是程序員給匯編編譯程序下達的命令。是在編譯源程序期間由匯編編譯程序執(zhí)行的命令。因為程序要分段放在內(nèi)存內(nèi),編譯程序必須要知道每段的起始位置,為CPU的段寄存器分配地址;如果程序中有變量,還要定義變量空間,存放數(shù)據(jù)、結果;知道源程序的開始、結束標志……偽指令語句:在匯編時不產(chǎn)生二進制代碼,僅為編譯程序提供匯編時所需要的必要信息的語句。11一、段定義一般的源程序分為4個段:代碼段Code、數(shù)據(jù)段Data、堆棧段Stack、附加段Extra。各個段從段定義語句開始,到段結束語句ENDS結束。段名
SEGMENT
定位類型組合類型類別……段體……段名
ENDS用戶指定可任選定義12段名必須是合法是標識符。定位類型:內(nèi)存可以看成是一本書,將其分成頁,段,字,和字節(jié)。每256個地址為一頁(PAGE),每頁的起始地址為二進制:xxxxxxxxxxxx0000000016進制:xxx00H第一頁(256個地址)第二頁(256個地址)00000H000FFH00100H00200H001FFH13每16個地址為一段(PARA),每段的起始地址為二進制:xxxxxxxxxxxxxxxx000016進制:xxxx0H第一段(16個地址)第二段(16個地址)xxx00Hxxx0FHxxx10Hxxx1FHxxx20H段(節(jié))是默認的定位類型。14每2個地址為一個字(WORD),每個字的起始地址為偶數(shù);最基本的類型是字節(jié)(BYTE),字節(jié)只包含一個地址,可以是內(nèi)存的任何空間。定位類型表示所定義的段存放在內(nèi)存空間時,段首地址對內(nèi)存空間的要求,即段起始點是放在一頁的起點上(PAGE)還是一段的起點上(PARA)等,如果不定義定位類型,編譯程序?qū)⒛J其為段類型,即將段首地址放在從xxxx0H開始的內(nèi)存空間。15BYTE:
表示本段起始單元可以從任一地址開始;WORD:
表示本段起始單元從一個偶地址開始;PARA:
表示本段起始單元從一個段的邊界開始(默認);段寄存器:××××H,第一個偏移地址:0000H物理地址:××××0HPAGE:
表示本段起始單元從一個頁的邊界開始16組合類型組合類型是告訴編譯程序,所定義的段與其他段的關系,即將該段存放內(nèi)存時,是否將該段與其他段在物理上或邏輯上放在一起。常常一個匯編程序可以有很多代碼段、數(shù)據(jù)段或堆棧段,這時,就要綜合考慮各段的組合類型。NONE:
表示本段與其他段不發(fā)生任何關系,該段有自己的基地址,是默認的組合關系。PUBLIC:在滿足定位類型的前提下與其他模塊的同名段連接在一起,形成一個新的邏輯段,共用一個段基址。17COMMON:
表示產(chǎn)生一個覆蓋段。連接時,把本段與其他也用COMMON說明的同名段置成相同的起始地址,重疊在一起,共享相同的存儲區(qū),其段長度由最長的段確定。STACK:
在每個匯編程序中,只能必須有一個堆棧段,連接時,將本段與其他也用STACK說明的同名段連接成一個連續(xù)的大的STACK段,編譯程序自動初始化SS和SP寄存器,使SS的內(nèi)容為該連續(xù)段的首址,SP指向堆棧底部加1的存儲單元。18MEMORY:
表示本段在存儲器中應定位在所有其他段的最高地址。AT<表達式>:表示本段從表達式指定的地址處開始裝入,這樣,在程序中用戶就可以直接定義段地址,這種方式不適用于代碼段。類別:是用單引號括起來的字符串,連接時,LINK程序把類別相同的段放在連續(xù)的存儲區(qū)中(可以不同名)。類別名可以任意,但一般為‘CODE’,’STACK’,‘DATA’等,表明該段的類型19例如:定義堆棧段如下:STSEGMENT
PARASTACK‘STACK’DB100DUP(?)STENDS段名組合類型類別定位類型堆棧長度段結束通過定義,自動初始化了SS和SP。………………SS:0000HSS:0063HSS:0064H100字節(jié)SP20連接兩個匯編語言目標程序時,它們的數(shù)據(jù)段同名,組合類型為PUBLIC,定位類型為PARA。連接后第一個目標程序的數(shù)據(jù)段的起始物理地址是01010H,長度為17AH,則第二個目標程序數(shù)據(jù)段的起始物理地址為多少?01010H+17AH=0118AH因為第二個數(shù)據(jù)段的定位類型為PARA,故應從節(jié)(段)的邊界開始,01190H因為組合類型為PUBLIC,所以共用一個段基址,在內(nèi)存中順序存放。21現(xiàn)有匯編目標程序A和B,它們的數(shù)據(jù)段類別名相同,組合類型皆為COMMON,若A程序數(shù)據(jù)段中有字符串‘ABC’,B程序數(shù)據(jù)段中有字符‘DEF’,則執(zhí)行連接操作LINKA+B后,產(chǎn)生目標程序的數(shù)據(jù)段中偏移地址為0000H單元的內(nèi)容是什么?……43H42H41HDS:0000HA數(shù)據(jù)段……46H45H44HDS:0000HB數(shù)據(jù)段因為COMMON類型為覆蓋,所以組合后B覆蓋A44H22二、過程定義過程的含義和子程序是一樣的,一個碼段中可以包含一個或許多過程。碼段名SEGMENT過程名1PROCFAR……RET過程名1ENDP過程名2PROCNEAR……RET過程名2ENDP…………碼段名ENDSFAR:
該過程為遠過程,調(diào)用該過程時為段間調(diào)用,即CS和IP均要重新賦值;NEAR:
該過程為近過程,調(diào)用該過程時為段內(nèi)調(diào)用,只賦值IP。(默認)23過程名1PROCFAR……RET過程名1ENDP過程名是合法的標識符;一個程序的主過程(起始指令所在的過程)應是FAR過程,因為該過程是DOS調(diào)用的。過程中應有RET指令,以便返回到調(diào)用處。過程可以嵌套調(diào)用,但不可以嵌套定義。過程開始過程結束24例:延時100ms的子程序,編程如下:DELAYPROC
MOVBL,10AGAIN:MOVCX,2801HWAIT:LOOPWAITDECBLJNZAGAINRETDELAYENDP25三、段尋址雖然定義了段,但由于段名是任意的,編譯程序仍然不知道哪個段是碼段,哪個段是數(shù)據(jù)段等,所以在碼段中要用ASSUME偽指令進行說明,告訴編譯器不同的段寄存器分別對應哪個段地址。ASSUME
段寄存器:段名,段寄存器:段名,……當匯編程序遇到一個段名時,就自動地引用給出的段寄存器對段名加以匯編。但匯編程序?qū)S和ES的值賦為PSP首址的值,在程序中還要由MOV指令重新對DS賦值。26系統(tǒng)和ROM占用用戶代碼段…………用戶堆棧區(qū)用戶數(shù)據(jù)區(qū)程序段前綴系統(tǒng)占用00000HDS,ES100個字節(jié)SS用戶程序空間FFFFFHCS正確的DS地址MOVAX,數(shù)據(jù)段名MOVDS,AX編譯程序指定的DS,ES的地址ASSUME偽指令指定27碼段名
SEGMENTASSUMECS:碼段名
,DS:數(shù)據(jù)段名,SS:堆棧段名過程名
PROCFARPUSHDSXORAX,AXPUSHAXMOVAX,數(shù)據(jù)段名MOVDS,AX……RET過程名
ENDP碼段名
ENDS設置段寄存器(除DS,ES)設置返回DOS指令位置設置DS執(zhí)行返回DOS命令過程開始過程結束28四、結束語句ENDENDP:過程結束ENDS:段結束END:整個匯編源程序結束(不配對使用)匯編程序在編譯時遇到END,便得知源程序已經(jīng)結束。END表達式表達式為可執(zhí)行程序運行的起始位置(執(zhí)行的第1條語句的開始位置),一般為主過程名。29五、ORGORG表達式指定了在其后的指令或數(shù)據(jù)存放的偏移地址。ORG0100HMOVAX,0表明該指令放在碼段,其偏移地址為0100H。碼段的首地址從CS:0000H處開始。CS:0000HCS:0100H30六、完整結構DAT1SEGMENTXDB3YDB5DAT1ENDSSTASEGMENTSTACK‘STACK’DB100DUP(?)STAENDSCODE1SEGMENTASSUMECS:CODE1,DS:DAT1,SS:STA
BEGINPROCFAR
PUSHDSXORAX,AXPUSHAXMOVAX,DAT1MOVDS,AX…………
RETBEGINENDPCODE1ENDSENDBEGIN將PSP首址壓棧,以便返回DOS設置DS段寄存器內(nèi)容源程序結束,第一條指令的地址分配段寄存器主過程名數(shù)據(jù)段堆棧段返回DOS31PUSHDSXORAX,AXPUSHAXMOVAX,數(shù)據(jù)段名MOVDS,AX標準程序前奏,一般寫在代碼段開始32第二節(jié)數(shù)據(jù)定義33一、常量、變量及標識符常量:二進制(B),八進制(Q),十六進制(H),十進制(D)(默認)10001100100B244Q64H變量:代表存放在某些存儲單元的數(shù)據(jù),這些數(shù)據(jù)在程序的運行期間隨時可以修改。在程序中以變量名的形式出現(xiàn)。定義變量:給變量分配存儲單元,為這個單元起名字(變量名),可以同時將這些存儲單元預置初值。34每個變量都有三個屬性段屬性(SEG)
變量所在的存儲單元的段基址偏移量屬性(OFFSET)
變量所在的存儲單元距段起點的字節(jié)數(shù)類型屬性(TYPE)
一個單位變量占用存儲單元的字節(jié)數(shù),分為:DB(1個字節(jié))DW(2個字節(jié))DD(4個字節(jié))35DATASETMENTXDB5,4YDW40HZDD2030HDATAENDS05H04H40H00H30H20H00H00HDS:0000HXYZX,Y,Z分別都有三個屬性:段基址,偏移量,類型值這三個屬性都有固定的值36標識符:給指令或某一存儲單元地址所起的名字標識符由下列字符組成:字母:A~Z,a~z;數(shù)字:0~9;特殊字符:?.@_$數(shù)字不能作標識符的第一個字符,.必須作標識符的第一個字符,標識符最長為31個字符。標識符后面跟冒號時,表示標號,代表該行指令的起始地址,標號可以被轉(zhuǎn)移、調(diào)用指令直接引用標識符后面不帶冒號時,表示變量。37標號:代碼段中某一條指令的地址。標號有3個屬性:段屬性(SEG)
該條指令所在段的段基址偏移量屬性(OFFSET)
該指令的偏移地址(距段起點的字節(jié)數(shù))距離屬性表示該標號是作為段內(nèi)還是段間被調(diào)用或轉(zhuǎn)移的,該屬性有兩個值:NEAR(FFFFH,-1):
本標號只能被標號所在段的轉(zhuǎn)移或調(diào)用指令所訪問(段內(nèi)轉(zhuǎn)移),標號后有冒號;默認FAR(FFFEH,-2):
本標號可被其他段(不是標號所在段)的轉(zhuǎn)移或調(diào)用指令訪問(段間轉(zhuǎn)移)。標號名LABELFAR38二、數(shù)據(jù)定義偽操作DB:定義字節(jié),其后的每個操作數(shù)占有一個字節(jié)單元,連續(xù)存放;BUFFERDB2,3,505H03H02HBUFFERDW:定義字,其后的每個操作數(shù)占有兩個字節(jié);BUFDW2,3,505H00H00H03H00H02HBUF39DD:定義雙字,其后每個操作數(shù)占4個字節(jié);若僅保留單元,不初始化,用?代替初值;若數(shù)據(jù)重復,用nDUP()代替,n為重復次數(shù)。STRINGDB‘HELLO!’ARRAYDB100DUP(?)6個字節(jié)的存儲單元,內(nèi)為各字符對應的ASCII碼,字符串用單引號標識保留100個字節(jié),首地址為ARRAY,不初始化,即100個字節(jié)內(nèi)均為隨機值40DATA1DB100DUP(‘AB’)初始化200個字節(jié),內(nèi)有100個41H,42H使用匯編語言定義的偽操作命令是:VALDB93DUP(5,2DUP(1,2DUP(3),4))則在VAL存儲區(qū)前10個字節(jié)單元的數(shù)據(jù)是:5,1,3,3,4,1,3,3,4,5若定義DB1,2,5DUP(0,1,2DUP(3)),則在存儲區(qū)前7個單元的數(shù)據(jù)是:1,2,0,1,3,3,041三、等值偽操作名字EQU表達式名字=表達式給名字定義一個值或其他符號名或一條可執(zhí)行語句,在匯編時,凡是出現(xiàn)該名字的地方就用定義的數(shù)據(jù)替代。用EQU賦值的名字不能重新賦值,但可用PURGE釋放后重新定義。TIMESEQU50BUFDBTIMESDUP(?)等效于:BUFDB50DUP(?)ALPHAEQU256BETA=ALPHA-242DATASEGMENTADW3BDW4LEQUB-ADATAENDS03H00H04H00HDS:0000H數(shù)據(jù)段L為常量,不占空間,值為2變量代表偏移地址。MOVAX,AMOVBX,BADDAX,BX;AX:3;BX:4;AX:743DATASEGMENTADW3,7BDW14LEQUBXDWBYEQUB-ADATAENDS03H00H07H00H0EH00H04H00HDS:0000H數(shù)據(jù)段;L:B;Y:0004HMOVAX,LMOVAX,XMOVAX,AMOVAX,A+2MOVBX,Y;AX:000EH;AX:0004H;AX:0003H;AX:0007HMOVAX,B;X:0004H;BX:0004H44第三節(jié)匯編語言運算符45匯編語言運算符:是編譯程序在編譯時計算的,與運算指令不同,指令是在程序運行時計算的。一、算術運算符+,-,*,/,MOD,SHL,SHRMOVAX,A+B二、邏輯運算符AND,OR,XOR,NOT
CEQUB-AANDAX,CANDOFH46三、關系運算符EQ,NE,LT,GT,LE,GElessthan,greatthan
結果產(chǎn)生一個邏輯值,真為0FFFFH,假為0000HMOVAX,((choiceLT20)AND5)OR((choiceGE20)AND6)47注意:算術運算符總可以用于數(shù)字操作,其結果也是數(shù)字的。當應用于存儲器操作數(shù)時,只有+,-運算符有意義;邏輯運算符的操作數(shù)也必須是數(shù)字,存儲器操作數(shù)不能進行邏輯運算;關系運算符連接的兩個操作數(shù),必須都是數(shù)字的或是在同一段內(nèi)的存儲器地址。48四、值返回符1)$運算符$:當前地址偏移量的值BLOCKDB‘HELLO!’NUMEQU$-BLOCKBLOCK$$$$$$$;NUM為6!ELLOH49STR1DW‘AB’STR2DB16DUP(?)CNTEQU$-STR1……MOVCX,CNTMOVAX,STR1HLTSTR1STR2BA;CX為18;AX為4142H$ABSTR1DW4142HSTR1DB41H,42H50DATASEGMENTNAEQU15NBEQU10NCDB2DUP(4,2DUP(5,2))CNTDB$-NCCWTDW$-CNTNDDWNCDATAENDS設數(shù)據(jù)段定義如下:從DS:0000H開始至CNT單元之前存放的數(shù)據(jù)依次為:________;ND單元中的值為_________;CWT單元中的值為________;CNT單元中的值為_____。4,5,2,5,2,4,5,2,5,20000H10AH04H05H02H05H02H04H05H02H05H02H0AH01H00H00H00H51SEG和OFFSETSEG:求標號或變量的段基址OFFSET:求標號或變量的距段首址的偏移量DATASEGMENTADB12BDW23,25DATAENDS……MOVBX,OFFSETBMOVAX,SEGBLEABX,B;BX:0001H;AX:DS值;BX:0001H與MOVBX,OFFSETB52DATASEGMENTTABLEDW10,20,30,40,50ENTRYDW3DATAENDS……MOVBX,OFFSETTABLEADDBX,ENTRYMOVAX,[BX]0AH00H14H00H1EH00H28H00H32H00H03H00H;0000H;BX:3;AX:1E00HBX533)TYPE標號或符號的類型值對變量:表示變量的字節(jié)數(shù)DB1,DW2,DD4對標號:表示過程或指令地址的調(diào)用類型(NEAR)-1或(FAR)-2DATASEGMENTADB12BDW23,25DATAENDS……MOVAX,TYPEAMOVBX,TYPEB;AX:0001H;BX:0002H544)LENGTH和SIZELENGTH:對DUP情況下,變量的項數(shù)或元素個數(shù),在其他情況下該項屬性為1;SIZE:對操作數(shù)分配的字節(jié)數(shù)。
SIZE=LENGTH×TYPEADB‘1234’BDW5DUP(2,3DUP(0))CDW‘AB’,‘C’,‘D’L1:MOVAL,TYPEBMOVBL,LENGTHBMOVAH,SIZEAMOVBH,SIZECMOVCL,TYPEL1MOVCH,SIZEB;AL:2;BL:5;AH:1;BH:2;CL:0FFH;CH:0AH55對于下面的數(shù)據(jù)定義,各條MOV指令單獨執(zhí)行后,請?zhí)畛溆嘘P寄存器的內(nèi)容:
TABLE1DB?TABLE2DW20DUP(?)TABLE3DB‘ABCD’……MOVAX,TYPETABLE1MOVBX,TYPETABLE2MOVCX,LENGTHTABLE2MOVDX,SIZETABLE2MOVSI,LENGTHTABLE3;AX:1;BX:2;CX:20;DX:40;SI:1565)HIGH和LOWHIGH:對操作數(shù)取高字節(jié);LOW:對操作數(shù)取低字節(jié)。NUMEQU0CDEFH……MOVAH,HIGHNUMMOVAL,LOWNUM;AH:0CDH;AL:0EFH57五、屬性運算符用來給指令中的操作數(shù)指定一個臨時的屬性,而暫時忽略操作數(shù)定義時的屬性。1)PTR定義操作數(shù)為新的類型新類型PTR操作數(shù)操作數(shù)可以是存儲器的地址或標號名F1DW1234HF2DB23H,56H,18H……MOVAL,BYTEPTRF1MOVAX,WORDPTRF2;AL:34H;AX:5623H18H56H23H12H34HF2F158DAT1DB12H,34HDAT2DB56H,78H……MOVAX,WORDPTRDAT1CMPAX,WORDPTRDAT2JAL1MOVBX,WORDPTRDAT2MOVWORDPTRDAT2,AXMOVWORDPTRDAT1,BXL1:HLTDAT1單元的值是:__________;AX:3412H;7856H56H592)THIS指定新類型像PTR一樣可用來建立一個特殊類型的存儲器地址操作數(shù),而沒有為它分配存儲器。新的存儲器操作數(shù)的段和偏移量部分就是下一個能分配的存儲單元的段和偏移量。F1EQUTHISBYTEF2DW4321H,2255H……MOVAL,F1MOVAX,F2THIS類型名22H55H43H21HF2F1;AL:21H;AX:4321HF1和F2具有相同的段基地址和偏移地址,但類型不同。603)段超越強迫當前指令的操作數(shù)按指定的段基地址尋址。MOVAX,ES:[BX]4)SHORT用于無條件轉(zhuǎn)移指令JMP,通知編譯器,轉(zhuǎn)移的目標地址在+127~-128之間。JMP標號;是三字節(jié)指令JMPSHORT標號;是兩字節(jié)指令61第四節(jié)匯編語言程序62匯編語言編寫的程序也跟高級語言類似,程序結構分三種:順序、分支、循環(huán);較復雜的程序也應該是由眾多子程序組成的,每個子程序是一個過程,在程序中被顯式地調(diào)用。變量等數(shù)據(jù)部分被定義在數(shù)據(jù)段,所有程序都要顯式地定義堆棧段。匯編程序的每一條指令都與機器語言一一對應,因此,匯編生成的可執(zhí)行文件代碼少,適合于實時控制,但由于語法成分很少,不適合于復雜的算法、運算。匯編程序主要的調(diào)試環(huán)境是DOS系統(tǒng)下的DEBUG程序。63DATASEGMENTDB1DB12H,34H,0,56HDW1DW78H,90H,0AB46H,1234HADR1DWDB1ADR2DWDW1BUFDB5DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:PUSHDS
XORAX,AXPUSHAXMOVAX,DATAMOVDS,AXXORCX,CXMOVCL,3ADDADR1,CXSUBADR2,CXMOVBX,ADR1MOVDI,BXMOVSI,ADR2MOVAL,DB1[BX]MOVBUF[DI],ALMOVAX,DW1[BX][SI]MOVWORDPTRBUF,AXRETMAINENDPCODEENDSENDSTART;0000H;0003H;ADR1:3;ADR2:1;DI:3;SI:1[0000H+BX]AL;AL:56H0010H0011H0012H0013H0014HBUF56H[0004H+BX+SI]AX;AX:AB46HABH46H00H00H;0004H64DS_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碼加法16327496298794654620696161H69H20H46H65DATASEGMENTTABLEDW1020H,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的功能是:程序運行結束時TEMP+2,TABLE+0字單元的內(nèi)容程序運行結束時,DI的值為:復制數(shù)據(jù)塊TABLE到TEMP將原數(shù)據(jù)塊倒排2030H5060HTEMP或TABLE+1066DATASEGMENTTABLEDW1020H,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,則程序運行結束時,TABLE+8字單元,TEMP字單元的內(nèi)容分別是:1020H1020H67子程序設計方法在程序設計過程中,若一段指令語句在一個程序中多次使用,或在多個程序中使用,可以把這些程序段獨立出來,按一定的格式編寫,成為可以被其他程序多次調(diào)用的程序,這樣的程序段稱為子程序或子過程。需要執(zhí)行這段程序時,就進行過程調(diào)用,執(zhí)行完畢后,再返回原來調(diào)用它的程序。采用子程序結構編程,可以實現(xiàn)程序結構模塊化,使程序結構清晰并便于調(diào)試。
68子程序的定義和說明子程序的定義是由過程定義偽指令來PROC/ENDP實現(xiàn)的為了正確和方便地使用子程序,常常在編寫出子程序后要給出子程序的說明清單,一般包括以下幾個方面的內(nèi)容:(1)子程序名稱(2)子程序的功能說明(3)子程序的入口參數(shù):說明子程序運行時需要的參數(shù)及存放的位置。(4)子程序的出口參數(shù):說明子程序運行結束后的結果存放的位置。(5)子程序示例,包括輸入輸出的數(shù)據(jù)類型和說明。69;****************************************;子程序名:BCX;功能:將一16進制數(shù)轉(zhuǎn)換成對應的ASCII碼;入口參數(shù):AL低4位中存放將要轉(zhuǎn)換的16進制數(shù);出口參數(shù):AL中存放轉(zhuǎn)換后的ASCII碼;示例:輸入(AL)=00001010(代表16進制A)
輸出(AL)=01000001(代表字符A的ASCII碼);*****************************************70BCXPROCNEARCMPAL,9JBEL1ADDAL,'A'-10-'0'L1:ADDAL,'0'RETBCXENDP子程序的定義如下:71由于主程序和子程序具有相互獨立性,而CPU中的寄存器是公用的,所以它們在使用寄存器時會發(fā)生沖突,即如果某個寄存器主程序和子程序都在使用,那么子程序使用結束后返回主程序后,這個寄存器的內(nèi)容存放的是子程序的信息,造成原來主程序中該寄存器數(shù)據(jù)的丟失。為了避免出現(xiàn)這種情況,在子程序的開始要保護有沖突的寄存器的原有內(nèi)容,將這些寄存器的內(nèi)容入棧保護,當子程序返回前再從堆?;謴捅槐Wo的寄存器。一般在子程序中使用到的寄存器都要在程序的開始入棧保護,這個步驟稱為“保護現(xiàn)場”。72設計一個延時子程序。;****************************;子程序名:DELAY;子程序功能:延時100ms;入口參數(shù):無;出口參數(shù):無;****************************DELAYPROCNEAR
PUSHBX;保護現(xiàn)場
PUSHCXMOVBX,10LOPA:MOVCX,2800HLOPB:DECCXJNZLOPBDECBXJNZLOPA
POPCX;延時結束,恢復現(xiàn)場
POPBXRETDELAYENDP73子程序的參數(shù)傳遞在主程序調(diào)用子程序時,經(jīng)常需要向子程序傳遞一些參數(shù),而子程序在執(zhí)行完后也需要向主程序返回一些結果。這種主程序和子程序之間的數(shù)據(jù)傳遞稱為參數(shù)傳遞。常用的參數(shù)傳遞方法有三種:通過寄存器傳遞參數(shù)、通過存儲器數(shù)據(jù)區(qū)傳遞參數(shù)和通過堆棧傳遞參數(shù)。
74將數(shù)據(jù)段BUF地址處開始的10個16進制的字節(jié)數(shù)據(jù)轉(zhuǎn)換成相應的ASCII碼,存儲在BUFF地址處10個字單元中。如16進制數(shù)1AH經(jīng)變換后轉(zhuǎn)換成其對應的ASCII碼3141H。DATASEGMENTBUFDB4AH,56H,98H,2CH,0F7H,0E4H,0DCH,9EH,32H,7CHCOUNTEQU$-BUFBUFFDW10DUP(?)DATAENDSSTACKSEGMENTSTACKDB100DUP('S')STACKENDS75CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKSTARTPROCFARPUSHDS;標準程序前奏
XORAX,AXPUSHAXMOVAX,DATAMOVDS,AXLEASI,BUF;SI指向BUF的偏移地址
LEADI,BUFF;DI執(zhí)行BUFF的偏移地址
MOVCX,COUNT;CX是數(shù)據(jù)個數(shù)NEXT:MOVAL,[SI];取一個數(shù)據(jù)CALLCHANGE;進行轉(zhuǎn)換
MOV[DI],BX;存儲轉(zhuǎn)換結果
INCSI;SI指向下一個待轉(zhuǎn)換的字節(jié)
INCDI;DI指向下一個存放轉(zhuǎn)換結果的字單元
INCDIDECCX;轉(zhuǎn)換個數(shù)減1JNZNEXT;轉(zhuǎn)換未全部完成,繼續(xù)循環(huán)
RETSTARTENDP76;****************************************************;子程序名:CHANGE;功能:將一個16進制的字節(jié)數(shù)據(jù)轉(zhuǎn)換成對應的ASCII碼;入口參數(shù)::AL中為一個16進制字節(jié)數(shù)據(jù);出口參數(shù):BX中為轉(zhuǎn)換后的兩字節(jié)的ASCII碼;****************************************************CHANGEPROCNEARPUSHCX;保護現(xiàn)場
MOVBH,ALANDAL,0FH;取16進制的低4位
CALLBCX;進行ASCII碼轉(zhuǎn)換
MOVBL,AL;存放轉(zhuǎn)換結果
MOVAL,BHMOVCL,4SHRAL,CL;16進制的高4位右移到低4位
CALLBCX;進行ASCII碼轉(zhuǎn)換
MOVBH,AL;存放轉(zhuǎn)換結果
POPCX;恢復現(xiàn)場
RETCHANGEENDP77;**************************************************;子程序名:BCX;功能:將一16進制數(shù)轉(zhuǎn)換成對應的ASCII碼;入口參數(shù):AL低4位中存放將要轉(zhuǎn)換的16進制數(shù);出口參數(shù):AL中存放轉(zhuǎn)換后的ASCII碼;**************************************************BCXPROCNEARCMPAL,9;16進制數(shù)是否是數(shù)字0~9JBEL1;是數(shù)字,轉(zhuǎn)向L1ADDAL,'A'-10-'0';不是數(shù)字,轉(zhuǎn)換成A~F的ASCII碼L1:ADDAL,30H;是數(shù)字,轉(zhuǎn)換成0~9的ASCII碼
RETBCXENDPCODEENDSENDSTART78第五節(jié)DOS功能調(diào)用79操作系統(tǒng)管理計算機,為用戶提供與CPU對話的接口,也就是提供使用鍵盤和顯示器的通道。操作系統(tǒng)同時管理設備、文件,這樣,用戶不需要具體掌握這些接口的地址,輸入輸出數(shù)據(jù)的格式,直接執(zhí)行操作系統(tǒng)提供的命令就可以了。比如DOS命令:DIR,TYPECOPY等。這是用戶在操作系統(tǒng)層面上的調(diào)用。在運行用戶程序時,DOS將操作權交給了用戶程序,用戶就無法再去執(zhí)行DOS的操作命令了,這時,用戶程序需要與鍵盤、顯示器等系統(tǒng)資源打交道該怎么辦?80在高級語言中,在這種情況下都是調(diào)用編譯系統(tǒng)提供的庫函數(shù),也即編譯系統(tǒng)已把輸入輸出等操作功能做成函數(shù)的形式,用戶只要依據(jù)函數(shù)的格式進行調(diào)用即可。在匯編程序中,如果用戶程序要與輸入輸出設備打交道,就要調(diào)用現(xiàn)成的程序,這些程序是DOS系統(tǒng)的一部分,隨著DOS系統(tǒng)駐留內(nèi)存,用戶需要按照這些程序要求的接口格式調(diào)用。81這些完成不同功能的子程序是以中斷服務程序的方式提供的。這些功能按不同的類別分成許多組,分別有不同的中斷入口,在匯編程序中最常用的是INT21H中斷入口,也稱為DOS系統(tǒng)功能調(diào)用。這個中斷入口中有許多小程序,每個小程序都被編上號,固定完成某一種功能,調(diào)用時有一定的格式,因為對某一個小程序而言,輸入條件(入口參數(shù))和輸出結果(出口參數(shù))的格式都是固定的。用戶在使用時,既要給出小程序的編號(AH),又要按照其提供的格式進行調(diào)用,才能正確完成操作。82系統(tǒng)層次結構減少了硬件的依賴性83ROM-BIOS中斷:占用中斷號10H~1FH,05H,40H,41H,46H,其中包括對I/O設備的控制.如:INT16H鍵盤I/O控制;INT1AH時鐘控制.DOS中斷:占用中斷號20H~3FH,提供了DOS的主要功能。如:INT21H系統(tǒng)功能調(diào)用。84系統(tǒng)功能調(diào)用的小程序有幾十個,在這里只介紹與輸入輸出有關的一部分。1)在顯示器上顯示單個字符(2號功能)功能:在屏幕的光標處顯示單個字符入口參數(shù):要顯示字符的ASCII碼放在DL中出口參數(shù):無MOVDL,‘A’MOVAH,2INT21H;提供調(diào)用功能號;系統(tǒng)功能調(diào)用;在屏幕光標處顯示字符A運行至此,屏幕上當前光標處顯示字符A852)在屏幕上顯示字符串(9號功能)功能:在屏幕上當前光標處輸出存儲在內(nèi)存數(shù)據(jù)段的一串字符串,該字符串以‘$’結束。入口參數(shù):DS:DX指向欲顯示字符串的首址出口參數(shù):無DATASEGMENTSTRINGDB‘Iamastudent.$’DATAENDS……MOVDX,OFFSETSTRINGMOVAH,9INT21H;指向字符串首址;提供調(diào)用功能號;系統(tǒng)功能調(diào)用863)帶顯示的鍵盤輸入(1號功能)功能:等待鍵盤輸入,直到按下一個鍵。入口參數(shù):無出口參數(shù):鍵入鍵的ASCII碼放在AL中,并在屏幕上顯示該鍵。MOVAH,1INT21HMOV[SI],AL……;提供調(diào)用功能號;系統(tǒng)功能調(diào)用程序運行到此停下,等待用戶鍵盤輸入用戶從鍵盤鍵入的鍵的ASCII碼進入AL中874)不帶顯示的鍵盤輸入(7號功能)功能:等待鍵盤輸入,直到按下一個鍵。入口參數(shù):無出口參數(shù):鍵入鍵的ASCII碼放在AL中,但在屏幕上沒有顯示,常用于輸入密碼。MOVAH,7INT21HMOV[SI],AL……;提供調(diào)用功能號;系統(tǒng)功能調(diào)用程序運行到此停下,等待用戶鍵盤輸入用戶從鍵盤鍵入的鍵的ASCII碼進入AL中該功能與1號功能類似,只是輸入的字符不在屏幕上顯示885)字符串輸入(10號功能)功能:等待從鍵盤輸入一串字符到存儲區(qū)的數(shù)據(jù)段,直到按下回車結束輸入。入口參數(shù):DS:DX指向接收字符串的內(nèi)存地址的首址,該地址的第一個字節(jié)是由用戶設置的可輸入字符串的最大字符數(shù)(含回車)出口參數(shù):存放輸入字符串存儲區(qū)的第二個字節(jié)是實際輸入的字符數(shù)(不含回車),實際輸入的字符串從該存儲區(qū)的第三個字節(jié)處開始存放。89DATASEGMENTBUFDB20DB?DB20DUP(?)DATAENDS……LEADX,BUFMOVAH,0AHINT21H14H程序運行到此停下,等待用戶鍵盤輸入若輸入ABCD<CR>后BUFDX04H41H42H43H44H0DH實際字符個數(shù)開始存放906)程序結束,返回DOS(4C號功能)功能:將控制權移交DOS。入口參數(shù):無出口參數(shù):無MOVAH,4CHINT21H91在屏幕上顯示W(wǎng)hatisyourname?,用戶輸入自己的名字###后顯示:Welcome###。DATASEGMENTMEGDB‘Whatisyourname?’,10,13,’$’MEG1DB'Welcome$'BUFDB30,?,30DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMAINPROCFARSTART:MOVAX,DATAMOVDS,AXLEADX,MEGMOVAH,9INT21HLEADX,BUFMOVAH,10INT21HLEADX,MEG1MOVAH,9INT21HXORBH,BHMOVBL,BUF+1MOV[BX+BUF+2],‘$’LEADX,BUF+2MOVAH,9INT21HMOVAH,4CHINT21HMAINENDPCODEENDSENDSTART;輸出字符串;接受姓名;輸出Welcome;輸出姓名;返回DOS輸入緩沖區(qū)以‘$’結尾顯示字符串后回車換行92下面程序從鍵盤重復接收一字符送BUFF開始的單元,直到接收到回車符0DH為止。DATASEGMENTBUFFDB128DUP(0)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX_______________LOP:_______________INT21HMOV[SI],AL___________________________JNELOPMOVAH,4CHINT21HCODEENDSENDSTARTLEASI,BUFFMOVAH,1INCSICMPAL,0DH93DATASEGMENT;S3_19BUFDB80,?,80DUP('$')INFODB'INPUTSTRING',10,13,'$'RETURNDB10,13,'$'DATAENDS;輸入緩沖區(qū),用10號系統(tǒng)功能調(diào)用;輸出信息,方便用戶操作;輸出回車換行…………LEADX,INFOMOVAH,9INT21HLEADX,BUFMOVAH,10INT21HLEASI,BUFINCSIMOVCL,[SI]MOVCH,0;輸出提示信息;系統(tǒng)功能調(diào)用,向屏幕輸出INFO字串;指向輸入緩沖區(qū),同時緩沖區(qū)的格式要符合要求;系統(tǒng)功能調(diào)用,從鍵盤輸入一字符串;SI指向輸入緩沖區(qū)首址;地址加1,該地址存放的是從鍵盤輸入的實際字符數(shù);將字符數(shù)放入CL作為循環(huán)次數(shù)94
INCSILOP:MOVAL,[SI]CMPAL,'a'JBNOCHCMPAL,'z'JANOCHSUBAL,32MOV[SI],ALNOCH:INCSIDECCXJNZLOPMOVBYTEPTR[SI],'$';地址加1,指向?qū)嶋H輸入的字符串的第一個字符;開始依次比較,判斷其是否為小寫字母;與'a'比較;小于'a',不是,不做轉(zhuǎn)換,執(zhí)行NOCH;與'z'比較;大于'z',不是,不做轉(zhuǎn)換,執(zhí)行NOCH;將小寫字符轉(zhuǎn)換為大寫;將轉(zhuǎn)換后的數(shù)據(jù)送回原處;緩沖區(qū)以'$'結尾,以符合輸出格式!95LEADX,RETURNMOVAH,9INT21HLEADX,BUFINCDXINCDXMOVAH,9INT21HRET;輸出回車換行,光標移下一行;指向輸入緩沖區(qū)首址;地址加2移向輸入的首字節(jié)地址;系統(tǒng)功能調(diào)用顯示輸出9622.將鍵盤輸入的2位十進制數(shù)轉(zhuǎn)換為十六進制數(shù),并顯示輸出。1.輸入鍵盤輸入用1號系統(tǒng)功能調(diào)用,輸入兩位數(shù)字字符,接收回來的形式是這兩位數(shù)字字符的ASCII碼,放入數(shù)據(jù)段的緩沖區(qū)內(nèi)。如:750011011100110101首先,要將輸入的ASCII碼轉(zhuǎn)換成數(shù)字形式,再通過運算轉(zhuǎn)換成十六進制的形式,如果要顯示這個十六進制的數(shù),還要把十六進制的數(shù)字轉(zhuǎn)換成對應的ASCII碼顯示。9700110111001101010011010001000010'$'該數(shù)字的十進制為75,將其高位的數(shù)字乘10后加低位的數(shù)字,由于數(shù)字在計算機中都是用十六進制表示的,所以此時的結果即為十六進制4BH,即01001011。因為DOS系統(tǒng)功能調(diào)用只能輸出字符串的形式,所以將4BH分解,在輸出緩沖區(qū)的形式應是34H,42H,$。在轉(zhuǎn)換過程中還要考慮如果數(shù)字超過9要用字母A~F顯示。98DATASEGMENTINFODB'INPUT2NUMBERS:',10,13,'$'DEXDB5DUP(?)HEXDB5DUP(?)RETURNDB10,13,'$'DATAENDS;提示輸入信息;輸入緩沖區(qū);輸出緩沖區(qū);回車換行
LEADX,INFOMOVAH,9INT21HLEASI,DEXMOVCX,2INP:MOVAH,1INT21HMOV[SI],ALINCSILOOPINP;輸出提示信息;指向輸入緩沖區(qū);接收兩個字符,循環(huán)兩次;1號系統(tǒng)功能調(diào)用99
LEASI,DEXMOVAL,[SI]ANDAL,0FHMOVBL,10MULBLMOVAH,[SI+1]ANDAH,0FHADDAL,AH;指向輸入緩沖區(qū);取第1位(十位)00110111;將其ASCII轉(zhuǎn)變?yōu)閿?shù)字00000111;乘10,結果在AL中;取第2位(個位)00110101;將其ASCII轉(zhuǎn)變?yōu)閿?shù)字00000101;AL中即是計算的最后結果01001011100
LEASI,HEXMOVBL,ALANDAL,0F0HMOVCL,4SHRAL,CLCALLCHANGEMOV[SI],AL
MOVAL,BLANDAL,0FHCALLCHANGEMOV[SI+1],ALMOVBYTEPTR[SI+2],'$';指向輸出緩沖區(qū),以存放輸出字符串;結果在AL中,高4位低4位要分別轉(zhuǎn)換成相應的ASCII碼BL:01001011;先轉(zhuǎn)換高4位01000000;右移4位,成為低位數(shù)字00000100;調(diào)用轉(zhuǎn)換程序進行十六進制數(shù)字到ASCII碼的轉(zhuǎn)換,轉(zhuǎn)換結果依然在AL中;將高4位結果放入輸出緩沖區(qū);轉(zhuǎn)換低4位;去掉高4位00001011;將低4位結果放入輸出緩沖區(qū);符合輸出格式需要101CHANGEPROCCMPAL,10JAECH1ORAL,30HJMPSTOPCH1:SUBAL,10ADDAL,'A'STOP:RETCHANGEENDP十六進制數(shù)轉(zhuǎn)換成ASCII碼程序入口參數(shù):AL:需轉(zhuǎn)換的十六進制數(shù)字出口參數(shù):AL:轉(zhuǎn)換好的ASCII碼;AL與10進行比較,大于9要轉(zhuǎn)換為字母形式;大于等于10,轉(zhuǎn)CH1;小于10,直接加30H;將需轉(zhuǎn)換的數(shù)字減10;結果加上'A'的ASCII碼102第六節(jié)宏指令103在匯編語言書寫的源程序中,有的程序段要多次使用,為了簡化書寫,該程序段可以用一條特殊的指令來代替,這個特殊的指令就是宏指令。宏指令只是為了方便書寫,當編譯系統(tǒng)生成機器碼時,在宏指令處仍會產(chǎn)生原來程序段應生成的代碼。1041)宏指令定義格式:宏指令名MACRO<形參列表>匯編語句系列(宏體)ENDMMACRO與ENDM必須成對出現(xiàn)SHIFTMACROMOVCL,1SALAL,CLENDM宏名程序段:將AL左移一次(乘2)INAL,5FHSHIFTOUT5FH,AL在程序中應用宏指令如下:105宏指令也可以接收參數(shù),如對X左移Y位。SHIFTMACROX,YMOVCL,YSALX,CLENDM形參列表MOVBX,WORDPTRBUFSHIFT
BX,4MOVWORDPTRBUF,BX在程序中應用宏指令如下:功能:對BX左移4位。BXX4Y實參形參一一對應106宏指令的參數(shù)還可以是操作碼SHIFTMACROX,Y,DMOVCL,YSA&D
X,CLENDM可以對X寄存器左移或右移Y位MOVBX,[SI]SHIFT
BX,4,LMOV[SI],BX在程序中應用宏指令如下:功能:對BX左移4位&:說明其后為參數(shù)MOVBX,[SI]MOVCL,4SAL
BX,CLMOV[SI],BX107MOVBX,[SI]SHIFT
BX,4,RMOV[SI],BX功能:對
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 新型有機酸開發(fā)與生產(chǎn)項目風險識別與評估綜合報告
- 學校救助申請書
- 單位住房申請書范文
- 加強環(huán)境保護的生產(chǎn)規(guī)范
- 全國高考文綜試題及答案-全國卷
- 四川省成都市成華區(qū)某校2023-2024學年高一上學期期末模擬考試物理試題(解析版)
- 新版北師版一年級下冊數(shù)學課件一 20以內(nèi)數(shù)與加法第7課時 做個加法表
- 6年級-下冊-第09講-應用題綜合練習-54
- 現(xiàn)代教育技術如何重塑課堂整合新模式
- Module9(單元測試)英語五年級下冊-外研版(一起)(含答案)
- 2025年高考數(shù)學總復習:集合與常用邏輯用語(教師卷)
- 肌力分級護理課件
- 第三章-自然語言的處理(共152張課件)
- 中學教學課件:下第課《認識人工智能》課件
- 《烏有先生歷險記》注釋版
- 2023版初中語文新課程標準
- 六年級口算訓練每日100道
- 顳下頜關節(jié)功能障礙的評估新技術
- 專項債券在燃氣基礎設施建設中的融資作用
- 四川省瀘州市2024年中考地理試卷(附解析)
- GB/T 44255-2024土方機械純電動液壓挖掘機能量消耗量試驗方法
評論
0/150
提交評論