![匯編語言及匯編程序設(shè)計_第1頁](http://file4.renrendoc.com/view/b91ff9150cb634bc7eac99dc08e69c88/b91ff9150cb634bc7eac99dc08e69c881.gif)
![匯編語言及匯編程序設(shè)計_第2頁](http://file4.renrendoc.com/view/b91ff9150cb634bc7eac99dc08e69c88/b91ff9150cb634bc7eac99dc08e69c882.gif)
![匯編語言及匯編程序設(shè)計_第3頁](http://file4.renrendoc.com/view/b91ff9150cb634bc7eac99dc08e69c88/b91ff9150cb634bc7eac99dc08e69c883.gif)
![匯編語言及匯編程序設(shè)計_第4頁](http://file4.renrendoc.com/view/b91ff9150cb634bc7eac99dc08e69c88/b91ff9150cb634bc7eac99dc08e69c884.gif)
![匯編語言及匯編程序設(shè)計_第5頁](http://file4.renrendoc.com/view/b91ff9150cb634bc7eac99dc08e69c88/b91ff9150cb634bc7eac99dc08e69c885.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
匯編語言及匯編程序設(shè)計第一頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計2一、概述
匯編語言是一種面向CPU指令系統(tǒng)的程序設(shè)計語言。指令格式:1、標號是指該指令的符號地址,以冒號結(jié)束;2、用助記符表示操作碼,是指令名稱的代表符號,是語句中的關(guān)鍵字,不可缺??;第二頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計3一、概述(續(xù)上頁)3、用符號代表操作數(shù)或操作數(shù)地址。操作數(shù)是本指令執(zhí)行需要的數(shù)據(jù)。有些指令不需要指明操作數(shù),可以默認;有些指令需要兩個操作數(shù);還有些操作數(shù)可以用表達式。4、注釋項是可選項,用分號開始。第三頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計4一、概述(續(xù)上頁)用匯編語言編寫的程序稱為源程序,常用的匯編程序有ASM-86和宏匯編MASM-86。匯編語言源程序的組成部分:①可以使用CPU指令系統(tǒng)所提供的指令(硬指令);②可以使用各種符合匯編語法的表達式,運算符以及自行定義生成滿足需要的目標代碼的指令。第四頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計51、標號
8086/8088匯編語言中使用的標號必須遵循下列規(guī)則:
(1)大小寫字母;
(2)數(shù)字0~9;
(3)某些特殊字符(@,_,?)(4)第一個字符不能是數(shù)字,“?”不能單獨作為標號。
(5)標號的有效長度是31;
有效標號:STARTMY_PROGRAM
無效標號:MAIN%1BETA第五頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計6二、偽指令偽指令是告訴匯編程序生成目標代碼的指令語句。
1、符號定義偽指令
2、內(nèi)存數(shù)據(jù)定義偽指令
3、段定義偽指令
4、段寄存器說明偽指令
5、定位偽指令
6、子程序偽指令第六頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計71、符號定義偽指令
(1)EQU偽指令
(2)等號(賦值)偽指令
(3)解除符號定義偽指令第七頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計8(1)EQU偽指令偽指令格式:<符號名>EQU<表達式>指令功能:給符號名賦值。符號名可以由程序員取定,表達式應(yīng)該是可以計算得出一個具體值。例:
PORTEQU88H ;定義符號PORT代表88H
DATAEQUPORT+2 ;定義符號DATA代表 ;PORT+2注意:①用EQU定義的符號,不能重新再定義,除非用PURGE偽指令解除;②如果在表達式中用了其他符號,必須事先定義。第八頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計9(2)等號(賦值)偽指令偽指令格式:<符號名>=<表達式>指令功能:與EQU類似,唯一的區(qū)別是“=”可以隨時對符號名賦新值,而不必使用PURGE偽指令。例:PORT=88H ;定義符號PORT代表88HDATA=PORT+2 ;定義符號DATA代表PORT+2第九頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計10(3)解除符號定義偽指令偽指令格式:PURGE符號1,符號2,…指令功能:撤消用EQU賦值的符號名,以便于賦予新值。例:PURGEPORT,DATA ;撤消用EQU對PORT、;DATA的賦值第十頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計112、內(nèi)存數(shù)據(jù)定義偽指令①格式:[變量]命令參數(shù)1,參數(shù)2,…
功能:數(shù)據(jù)定義語句用來分配存儲單元。數(shù)據(jù)定義語句的命令有:
DB
定義字節(jié)數(shù)據(jù)
DW
定義字數(shù)據(jù)
DD
定義雙字數(shù)據(jù)
DQ
定義8字節(jié)數(shù)據(jù)
DT
定義10字節(jié)數(shù)據(jù)第十一頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計122、內(nèi)存數(shù)據(jù)定義偽指令②復(fù)制操作符
格式:<復(fù)制次數(shù)>DUP數(shù)據(jù)1,數(shù)據(jù)2,…
功能:匯編程序把所定義的數(shù)據(jù)按先后次序連續(xù)分配存儲空間,所起的名稱只代表第一個單元的字符。
例題第十二頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計132、內(nèi)存數(shù)據(jù)定義偽指令例: …VAR1DB32H,‘ABC’VAR2DW1234H,40H,‘AB’DD12345678HDB?,11000011BARRY1DB2DUP(0,1)ARRY2DW2DUP(?,1)
…第十三頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計143、程序分段偽指令段定義偽指令的用途是在匯編語言程序中定義邏輯段,用它來指定段的名稱和范圍,并指明段的定位類型、組合類型及類別。常用的段定義偽指令有SEGMENT/ENDS和ASSUME等。
(1)段定義偽指令SEGMENT/ENDS格式:
段名 SEGMENT[定位類型][組合類型][分類名]…;本段程序內(nèi)容(指令語句或偽指令語句)
段名ENDS段名為所定義段的名稱或標識符第十四頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計15段定義由偽指令SEGMENT開始、ENDS結(jié)束。其中:SEGMENT和ENDS必須成對出現(xiàn),且語句前必須有段名,段名必須相同。
SEGMENT和ENDS語句之間可以有指令和其他偽操作,
表示存放在該段內(nèi)存的變量、指令或其他偽操作對該段內(nèi)存的處理程序中可以定義多個段。程序經(jīng)匯編、連接及裝入內(nèi)存后,段名為一具體的段值。第十五頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計16定位類型
PAGE:表示相應(yīng)的段必須從某一頁(256個字節(jié))的邊界開始。 PAGE=××××××××××××00000000B
PARA:表示段的起點是從存儲器中的某一個節(jié)的邊界開始。
PARA=××××××××××××××××0000B
WORD:表示段的起點可以從任何一個字的邊界(偶地址)開始。 WORD=×××××××××××××××××××0B
BYTE:表示段的地址可以從存儲器的任何地址開始。
BYTE=××××××××××××××××××××B組合類型
PUBLIC:依次連接。
COMMON:從相同的地址開始,具有同樣的段地址。
AT表達式:相應(yīng)段定位在由表達式求值得到的節(jié)邊界地址上。
STACK:與PUBLIC方式相同,但僅用于堆棧段。
MEMORY:裝在被連接的其它段之上第十六頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計17源程序模塊的段定義示例
:STACK-SEG SEGMENTPARASTACK‘STACK’;
… ;定義堆棧段STACK-SEG ENDS
;DATA-SEG SEGMENT ;
… 定義數(shù)據(jù)段DATA-SEG ENDS
;EXTRA-SEG SEGMENT ;
… 定義附加數(shù)據(jù)段EXTRA-SEG ENDS
;CODE-SEG SEGMENT ;
START:
… 定義代碼(即指令)段CODE-SEG ENDS ;
ENDSTART ;源程序模塊結(jié)束第十七頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計18(2)段寄存器說明偽指令
ASSUME格式:ASSUME段寄存器:段名[,段寄存器:段名,…]
其中段寄存器為CS、DS、ES、SS中的一個
段名為用偽操作SEGMENT定義過的段名例
ASSUMECS:cc,DS:aa
ASSUME偽操作的作用
指示匯編程序指令中用到的標號、過程及變量所在的段。其中對標號、過程必須用CS段寄存器指示
對變量可用CS、DS、ES、SS段寄存器指示第十八頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計19若未用ASSUME語句指示指令中用到的標號、過程和變量所在的段,匯編程序?qū)⒔o出錯誤信息。
ASSUME語句只起指示作用,并無實際的操作。在程序中引用定義的變量做內(nèi)存操作數(shù)時,需按尋址方式用傳送指令(如MOV)給相應(yīng)的段寄存器賦值。第十九頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計20dataSEGMENTvalueDW1234H,5678HresultDW?
dataENDS
codeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;給DS賦值
MOVDS,AXMOVAX,value;取數(shù)
ADDAX,value+2;兩數(shù)相加
MOVresult,AX;保存結(jié)果
MOVAH,4CH;返回DOSINT21H
codeENDSENDstart例
用程序?qū)崿F(xiàn)1234H+5678H第二十頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計21程序中有ASSUME語句,經(jīng)匯編,連接和裝入內(nèi)存后的情況:dataSEGMENTvalueDW1234H,5678HresultDW?dataENDScodeSEGMENTASSUMECS:code,DS:datastart:MOVAX,data;給DS賦值
MOVDS,AXMOVAX,value;取數(shù)
ADDAX,value+2;兩數(shù)相加
MOVresult,AX;保存結(jié)果
MOVAH,4CH;返回DOSINT21HcodeENDSD:\MASM>DEBUGassume.exe-R;查看程序執(zhí)行前各寄存器AX=0000BX=0000CX=0023DX=0000SP=0000BP=0000SI=0000DI=0000DS=1295ES=1295SS=12A5CS=12A6IP=0000NVUPEIPLNZNAPONC12A6:0000B8A512MOVAX,12A5-U;查看在內(nèi)存的程序12A6:0000B8A512MOVAX,12A512A6:00038ED8MOVDS,AX12A6:0005A10000MOVAX,[0000]12A6:000803060200ADDAX,[0002]12A6:000CA30400MOV[0004],AX12A6:000FB44CMOVAH,4C12A6:0011CD21INT21、、、、、第二十一頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計224、過程定義偽指令PROC/ENDP
在程序設(shè)計中,經(jīng)常將一些重復(fù)出現(xiàn)的語句組定義為子程序。子程序又稱為過程,可以采用CALL指令來調(diào)用。使用格式:
過程名
PROC[NEAR]/FAR…(語句系列)
RET…(語句系列)
過程名
ENDP
調(diào)用一個過程的格式為:
CALL
過程名
第二十二頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計23過程定義由偽指令PROC開始、ENDP結(jié)束。其中:PROC和ENDP必須成對出現(xiàn),
且語句前必須有過程名,過程名必須相同。
PROC和ENDP語句之間為子程序的指令序列。程序中可以定義多個過程。程序經(jīng)匯編、連接及裝入內(nèi)存后,過程名為一具體的內(nèi)存地址,指示子程序入口。第二十三頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計24過程名常用作CALL調(diào)用指令的操作數(shù),
子程的最后安排RET返回指令,使執(zhí)行完子程后能返回調(diào)用處。過程有兩種類型:NEAR和FAR
無類型項時,默認為NEAR類型。當過程與調(diào)用指令不在同一段時,應(yīng)將過程定義為FAR類型。過程類型決定子程序中RET的返回類型第二十四頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計25例1displayPROC
、、、、C3H
、、
RET;NEAR屬性的過程對應(yīng)段內(nèi)返回
displayENDP例2displayPROCFAR
、、、、CBH
、、
RET;FAR屬性的過程對應(yīng)段間返回
displayENDP第二十五頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計26啟動地址可是一個標號或過程名,指示程序的入口。程序裝入內(nèi)存后,系統(tǒng)跳轉(zhuǎn)到入口處,開始執(zhí)行程序。aaSEGMENT;數(shù)據(jù)段1
str1DB'Hello!’aaENDSbbSEGMENT;數(shù)據(jù)段2
str2DB6dup(?)bbENDSccSEGMENT;代碼段
ASSUMECS:ccASSUMEDS:aa,ES:bbstart:CLDMOVAX,aa
MOVDS,AXLEASI,str1
MOVAX,SEGstr2
MOVES,AXMOVDI,OFFSETstr2
MOVCX,6REPMOVSBMOVAH,4CHINT21HccENDSENDstartD:\masm>DEBUGhello.exe-U:查看代碼段129F:0000FCCLD129F:0001B89D12MOVAX,129D129F:00048ED8MOVDS,AX129F:00068D360000LEASI,[0000]129F:000AB89E12MOVAX,129E129F:000D8EC0MOVES,AX129F:000FBF0000MOVDI,0000129F:0012B90600MOVCX,0006129F:0015F3REPZ129F:0016A4MOVSB129F:0017B44CMOVAH,4C129F:0019CD21INT21、、、-D129d:0l10;查看數(shù)據(jù)段1的內(nèi)容129D:000048656C6C6F210000-0000000000000000Hello!-D129e:0l10;查看數(shù)據(jù)段2的內(nèi)容129E:00000000000000000000-0000000000000000-第二十六頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計275、模塊定義和程序結(jié)束偽操作
(1)
NAME和TITLE偽指令
格式
NAME
模塊名
格式
TITLE
模塊名在源程序開始可用NAME或TITLE為模塊命名,
模塊名的作用是指示給連接程序進行連接用。源程序中可無模塊定義,此時源文件名作為模塊名。
第二十七頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計28
(2)程序匯編結(jié)束偽指令END
格式
END起始地址▲作用是指示源程序到此結(jié)束。匯編程序?qū)ND之后的語句不進行處理。程序中所有有效語句應(yīng)放在END語句之前?!闯绦蛑斜仨氂蠩ND結(jié)束語句。匯編程序?qū)oEND語句的源程序不進行處理,
只給出無END語句錯誤信息?!鴺颂柺浅绦蛑械谝痪渲噶钚哉Z句的標號。第二十八頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計29假設(shè)TEST.asm是一個無END語句的匯編語言源程序。其匯編結(jié)果如下:D:\MASMTEST;↙Microsoft(R)MacroAssemblerVersion5.10Copyright(C)MicrosoftCorp1981,1988.Allrightsreserved.EndoffileencounteredoninputfileEndoffileencounteredoninputfile49968+421181Bytessymbolspacefree
0WarningErrors
0SevereErrorsD:\由于沒有END語句,匯編程序根本沒對源程序進行匯編,此時顯示警告性錯誤總數(shù)為0,嚴重性錯誤總數(shù)為0,用戶不要被此值的誤導(dǎo)。第二十九頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計30起始地址可是一個標號或過程名,指示程序的入口。程序裝入內(nèi)存后,系統(tǒng)跳轉(zhuǎn)到入口處,開始執(zhí)行程序。aaSEGMENT;數(shù)據(jù)段1
str1DB'Hello!’aaENDSbbSEGMENT;數(shù)據(jù)段2
str2DB6dup(?)bbENDSccSEGMENT;代碼段
ASSUMECS:ccASSUMEDS:aa,ES:bbstart:CLDMOVAX,aa
MOVDS,AXLEASI,str1
MOVAX,SEGstr2
MOVES,AXMOVDI,OFFSETstr2
MOVCX,6REPMOVSBMOVAH,4CHINT21HccENDSENDstartD:\masm>DEBUGhello.exe-U:查看代碼段129F:0000FCCLD129F:0001B89D12MOVAX,129D129F:00048ED8MOVDS,AX129F:00068D360000LEASI,[0000]129F:000AB89E12MOVAX,129E129F:000D8EC0MOVES,AX129F:000FBF0000MOVDI,0000129F:0012B90600MOVCX,0006129F:0015F3REPZ129F:0016A4MOVSB129F:0017B44CMOVAH,4C129F:0019CD21INT21、、、-D129d:0l10;查看數(shù)據(jù)段1的內(nèi)容129D:000048656C6C6F210000-0000000000000000Hello!-D129e:0l10;查看數(shù)據(jù)段2的內(nèi)容129E:00000000000000000000-0000000000000000-第三十頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計316、指定地址偽指令
ORG
偏移地址定位語句 作用:指定某源程序或數(shù)據(jù)塊起點在段內(nèi)的偏移地址,利用ORG偽指令可以改變位置計數(shù)器的值。
使用格式:
ORG
exp
exp
為能計算出16位立即數(shù)的表達式
例:
ORG2000H ORG$+1000H第三十一頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計32$
——程序計數(shù)器
字符“$”在8086/8088宏匯編中具有一種特殊的意義,把它稱為程序計數(shù)器。表示位置計數(shù)器的當前值,它可以在數(shù)值表達式中使用。在程序中,“$”出現(xiàn)在表達式里,它的值為程序下一個所能分配的存儲單元的偏移地址。第三十二頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計33
7、結(jié)構(gòu)定義偽指令STRUC/ENDS
結(jié)構(gòu)就是相互關(guān)聯(lián)的一組數(shù)據(jù)的某種組合形式。用偽指令STRUC和ENDS把相關(guān)數(shù)據(jù)定義語句組合起來,便構(gòu)成一個完整的結(jié)構(gòu)。
使用格式:結(jié)構(gòu)名
STRUC
…(數(shù)據(jù)定義語句序列)
結(jié)構(gòu)名
ENDS第三十三頁,共一百一十四頁,2022年,8月28日1.結(jié)構(gòu)定義語句結(jié)構(gòu)是指一組相互關(guān)聯(lián)變量的組合,例如學(xué)生成績登記表中一個學(xué)生所登錄的各項:學(xué)號、姓名、性別、課程名稱、考試成績等。
結(jié)構(gòu)類型變量可把類似上述一個學(xué)生的各項看成一個整體,定義、賦值、修改、引用都大為方便。
(1)結(jié)構(gòu)類型的定義格式:<結(jié)構(gòu)類型名>STRUC …{數(shù)據(jù)定義偽指令序列} <結(jié)構(gòu)類型名>ENDS
例:為學(xué)生考試成績登記表定義一個結(jié)構(gòu)
STUDTABSTRUC NAME DB'WANGWEIHUA' ;姓名
SNO DD20020923H ;學(xué)號
SEX DB1 ;性別:0為女,1為男
COURSE DB'ASSEMBLER' ;課程名
SCORE DB90 ;成績
STUDTABENDS第三十四頁,共一百一十四頁,2022年,8月28日(2)結(jié)構(gòu)變量的說明
格式:[結(jié)構(gòu)變量名]<結(jié)構(gòu)類型名><<[字段初值表]>>其中結(jié)構(gòu)變量名由用戶起,是可選項,沒有它匯編程序照樣分配空間。結(jié)構(gòu)類型名是已定義的結(jié)構(gòu)類型;<字段初值表>用來給結(jié)構(gòu)變量的字段賦初值,它們的類型、順序必須與結(jié)構(gòu)類型名定義的一致,各初值之間以逗號隔開。
若某字段的初值采用結(jié)構(gòu)類型定義時的初值,可空缺不寫(但相應(yīng)逗號不可省),若所有字段全部采用定義時的初值,可只寫一個尖括號<>;
尖括號<>在任何時候都不可省。例:利用已定義的STUDTAB結(jié)構(gòu)類型說明考試成績登記表中某學(xué)生的結(jié)構(gòu)變量。
STUDENT1STUDTAB<>;各字段初值全部采用結(jié)構(gòu)類型定義時的初值
STUDENT2STUDTAB<'ZHANGMING',20010907H,0,'PASCAL',85> ;各字段初值重新賦值
STUDENT3STUDTAB<'LIWEIDONG',20020918H,,'ENGLISH',> ;性別和成績字段采用結(jié)構(gòu)定義時的初值;;下面說明一個50個學(xué)生的結(jié)構(gòu)數(shù)組,各字段初值采用結(jié)構(gòu)類定義時的初值。
CLASS2STUDTAB50DUP(<>)第三十五頁,共一百一十四頁,2022年,8月28日(3)結(jié)構(gòu)變量字段值的修改
定義結(jié)構(gòu)類型時可為各字段設(shè)置初值,說明結(jié)構(gòu)變量時可對字段初值進行修改,使用結(jié)構(gòu)變量時仍可對它們各個字段進行修改。只有用DB、DW或DD加以說明的單項字段才能被修改字段值,而用重復(fù)運算符DUP說明的多重字段不能被修改。
對字符串類型的字段,修改后串的長度不能超過定義結(jié)構(gòu)類型時的長度。(4)結(jié)構(gòu)的使用結(jié)構(gòu)類型定義在先,一般定義在程序的開始部分,也可定義在數(shù)據(jù)段中;結(jié)構(gòu)變量說明在后,通常在數(shù)據(jù)段中加以說明;
最后在代碼段中對結(jié)構(gòu)變量及其字段加以引用,包括對它們的值進行修改。對結(jié)構(gòu)變量的引用,與引用其它變量一樣,可以通過名字對結(jié)構(gòu)變量進行存取。要引用結(jié)構(gòu)變量中的字段,可使用點運算符,形式為:結(jié)構(gòu)變量名.結(jié)構(gòu)字段名例:取出結(jié)構(gòu)變量的字段MOVAL,STUDENT2.SCORE;取出結(jié)構(gòu)變量STUDENT2的成績字段值送AL下面兩條指令完成的操作與上面一條指令相同:
MOVBX,OFFSETSTUDENT2 MOVAL,[BX].SCORE第三十六頁,共一百一十四頁,2022年,8月28日2.記錄定義語句
記錄用于處理按二進制數(shù)位計算的數(shù)據(jù)信息。使用記錄,需要先定義記錄類型,再說明記錄變量,然后再使用記錄。(1)定義記錄類型格式:<記錄名>RECORD<字段名>:<寬度>[=表達式][,<字段名>:<寬度>…]
記錄名與字段名由用戶起,程序中記錄名不允許重名,同一記錄內(nèi)字段名不允許重名。寬度必須是常數(shù),表示該字段所占二進位的位數(shù);表達式為可選項,表示該字段的初值,未選時初值為0。一個記錄中可有多個字段,它們之間用逗號隔開。16位微處理器方式,所有字段寬度之和不得超過16。寬度之和超過8時占用2個字節(jié),匯編程序按字處理,否則按字節(jié)處理。若選用了386及以上方式,各字段寬度之和最多可達32;超過16位時,占用4個字節(jié),按雙字存放和處理。例:定義一個表示學(xué)生情況的記錄,年齡占6位,性別占1位(0女,1男),健康狀況占一位(0健康,1不健康) STATUSRECORDAGE:6=19,SEX:1,HEALTH:1
與結(jié)構(gòu)一樣,記錄類型定義時不分配存儲空間。(2)記錄變量說明格式:[記錄變量名]<記錄名><<[字段初值表]>>
記錄變量名由用戶定義,可以省略(照樣分配內(nèi)存),記錄名是已定義的記錄類型,字段初值表給各字段賦初值,各初值之間用逗號隔開,各項的順序應(yīng)與記錄類型定義時的順序一致;若某字段值采用記錄類型定義時的初值,則可省略,僅寫逗號即可;若全部字段都采用定義時的初值,則僅寫尖括號。尖括號在任何時刻都不能省略。第三十七頁,共一百一十四頁,2022年,8月28日2.記錄定義語句(續(xù))例:用記錄類型STATUS定義記錄變量
ZHANG1STATUS<17,1,0>
被分配一個字節(jié)的記錄變量ZHANG1在內(nèi)存中的分配形式為01011110,即該記錄變量的值為5EH。
WANG3STATUS<,0,0> WANG3記錄變量前6位為011001(記錄類型定義的初值),后兩位為00,該記錄值為64H。
STUDEN1STATUS<>
記錄變量STUDENT1為一個字節(jié),各字段值采用記錄類型定義時的初值,為67H。
CLASS1STATUS50DUP(<18,1,0>) CLASS1是個記錄數(shù)組,共有50個元素,每個元素的三個字段初值分別為18、1、0,記錄值為62H。(3)記錄的使用可通過記錄變量名對記錄進行訪問,記錄變量名可以像其它變量名一樣使用。 例: MOVAL,ZHANG1;AL←5EH(ZHANG1記錄的值)記錄變量可作為操作數(shù)(立即數(shù))使用。 例:MOVAH,STATUS<18,1,0> ;AH←62H記錄的字段名可在程序中直接使用,表示一個位移量,即該字段位移到記錄的最低位所需的移位次數(shù)。 例:MOVCL,SEX ;CL←1(SEX移到記錄最低位的次數(shù))第三十八頁,共一百一十四頁,2022年,8月28日2.記錄定義語句(續(xù))給記錄變量(或記錄數(shù)組元素)的某字段賦值時不應(yīng)破壞其余字段上的值,先用AND指令對該字段清0,再用OR指令將相應(yīng)值設(shè)置在該字段上。對記錄數(shù)組元素的尋址與一般的字節(jié)、字或雙字的數(shù)組一樣,而對記錄數(shù)組元素的某一字段訪問與對記錄變量的字段訪問類似,只是將記錄變量名換為記錄數(shù)組元素的地址表達式。
例:把前面說明的記錄數(shù)組CLASS1的第三個元素的AGE字段設(shè)為18??上热〉玫谌齻€元素的起始地址,取出該元素字節(jié)值,將AGE字段清0,然后將字段值18送一個寄存器,并移位到高6位,再用OR指令置成相應(yīng)值。指令序列如下:
MOVSI,OFFSETCLASS1 ;記錄數(shù)組的起始地址送SI ADDSI,2 ;生成第三個元素的起始地址
MOVAL,[SI] ;AL←第三個元素的字節(jié)值
ANDAL,03H ;將AGE字段清0 MOVAH,18 ;AH←18 MOVCL,AGE ;CL←移位次數(shù)2 SHLAH,CL ;AH左移2位,使18與AGE字段對齊
ORAL,AH ;將18置在AGE字段上
MOV[SI],AL ;將修改后的結(jié)果送回第三個單元
第三十九頁,共一百一十四頁,2022年,8月28日3.聯(lián)合定義語句
聯(lián)合UNION也是一種結(jié)構(gòu)性的數(shù)據(jù)類型,是MASM6.0新增的,實際上是對結(jié)構(gòu)STRUC的一個補充。(1)聯(lián)合類型定義格式:<聯(lián)合名>UNION ┆{聯(lián)合體,由數(shù)據(jù)定義語句構(gòu)成} <聯(lián)合名>ENDS
該語句定義了一個聯(lián)合類型,與STRUC類似,聯(lián)合體中的各字段由數(shù)據(jù)定義偽指令設(shè)置,但各字段的偏移地址與STRUC不一樣:STRUC中的字段在結(jié)構(gòu)中順序分配,而UNION中的字段在聯(lián)合中從起始地址處重疊分配,所以聯(lián)合中各個字段的偏移地址均為0。因此定義聯(lián)合時字段不賦初值。定義UNIMING的聯(lián)合類型:
UNIMING UNION XA DB? XB DB? XC DW? XD DD? UNIMING ENDS第四十頁,共一百一十四頁,2022年,8月28日(2)聯(lián)合變量說明
格式: <變量名><聯(lián)合名><<字段值表>>
字段值表須用尖括號<…>括起來,有關(guān)規(guī)定與結(jié)構(gòu)變量相同。 定義一個聯(lián)合變量,分配存儲空間并給它的各個字段賦初值。 例:定義聯(lián)合變量BIANLUNIMING<12345678H>后,
它的各個字段值如下:BIANL.XA=78HBIANL.XB=78H
BIANL.XC=5678HBIANL.CD=12345678H對聯(lián)合變量的字段訪問可用:聯(lián)合變量名.字段名。結(jié)構(gòu)和聯(lián)合的定義可互相嵌套,這類定義適用于面向?qū)ο蟪绦蛟O(shè)計的結(jié)構(gòu)和I/O端口的描述。
第四十一頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計42
7、模塊定義與連接偽指令
在編寫規(guī)模較大的匯編語言源程序時,可以將整個程序劃分為幾個獨立的源程序,稱之為模塊。將各模塊分別進行匯編,生成各自的目標程序,最后將它們連接成為一個完整的可執(zhí)行程序。各模塊之間可以相互進行符號訪問。為了進行模塊之間連接和實現(xiàn)相互的符號訪問,以便進行變量傳送,通常使用以下幾個偽指令:
NAME、END、PUBLIC、EXTRN。第四十二頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計43四、匯編語言源程序的框架結(jié)構(gòu):1、匯編語言源程序的結(jié)構(gòu)和特點:
程序由數(shù)條語句構(gòu)成,每條語句占一行。
指令性語句(指令語句)
指示性語句(偽指令語句)
分段結(jié)構(gòu)程序按段編寫,與8086/8088內(nèi)存分段編址相對應(yīng)。每段由偽操作SEGMENT開始、由ENDS結(jié)束程序最后為END結(jié)束語句,后跟一起始地址起始地址指示程序開始執(zhí)行的第一條語句。程序中設(shè)有返回DOS的功能。使程序執(zhí)行完后返回DOS系統(tǒng)的命令接受狀態(tài)
程序中用到內(nèi)存操作數(shù)時,應(yīng)按操作數(shù)的尋址方式,給相應(yīng)的段寄存器賦值;匯編語言程序結(jié)構(gòu)例一movs.asm;實現(xiàn)數(shù)據(jù)傳送功能aaSEGMENT
;數(shù)據(jù)段1str1DB'Hello!’aaENDSbbSEGMENT
;數(shù)據(jù)段2str2DB6dup(?)bbENDSccSEGMENT
;代碼段
ASSUMECS:cc,DS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,str1MOVAX,SEGstr2MOVES,AXMOVDI,OFFSETstr2MOVCX,6REPMOVSB
MOVAH,4CHINT21H
;返回DOSccENDS
ENDstart;指示程序結(jié)束第四十三頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計44STACK-SEG SEGMENT ;
… 定義堆棧段STACK-SEG ENDS ;DATA-SEG SEGMENT ;
… 定義數(shù)據(jù)段DATA-SEG ENDS ;EXTRA-SEG SEGMENT ;
… 定義附加數(shù)據(jù)段EXTRA-SEG ENDS ;CODE-SEG SEGMENT ;
START:
… 定義代碼段(即指令)CODE-SEG ENDS ;
ENDSTART ;源程序模塊結(jié)束
源程序的典型框架結(jié)構(gòu)為:第四十四頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計45程序可由多個段構(gòu)成,至少有一個代碼段;匯編語言程序結(jié)構(gòu)例二(子程序結(jié)構(gòu))scans.asm;用二進制顯示中斷向量表中(0:0~0:3FFH)數(shù)據(jù)D0H的個數(shù)keyEQU0D0H;用符號表示常量(關(guān)鍵字)codeSEGMENT;代碼段開始
ASSUMECS:codebegin:MOVAX,0000HMOVDS,AXMOVSI,0000HMOVCX,0400HMOVBX,0MOVAL,keynext:CMP[SI],ALJNZpointINCBXpoint:INCSILOOPnextCALLdisplay;調(diào)用顯示子程
MOVAH,4CH;返回DOS
INT21H;用二進制顯示BX內(nèi)容子程displayPROC
MOVCX,16rotate:ROLBX,1MOVDL,BLANDDL,01HADDDL,30HMOVAH,2HINT21HLOOProtateRET;子程返回displayENDP
codeENDS;代碼段結(jié)束
ENDbegin;指示程序結(jié)束和
;程序入口第四十五頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計46★確定內(nèi)存可用部分以便存放要執(zhí)行的.exe文件。
建立程序段前綴PSP
(ProgramSegmentPrefix)
◢
程序段前綴大小100H,即256個字節(jié)。
◢
存放進程間的控制信息。
◢
PSP最開始的兩個字節(jié)CD20,是一條INT20H指令。
裝入可執(zhí)行程序.exe2、
源程序與PCDOS的接口
匯編語言源程序是在PCDOS環(huán)境下運行的。PCDOS下運行程序時完成以下操作:第四十六頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計47用戶程序執(zhí)行后自動返回DOS方法一:在要返回DOS處,安排指令:
MOVAH,4CHINT21H
執(zhí)行完4CH的功能調(diào)用,即返回DOS。例
codeSEGMENTASSUMECS:codestart:
、、、;程序主體部分、、、、、、
MOVAH,4CH
;返回DOS
INT21HcodeENDS
ENDstart第四十七頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計48codeSEGMENTASSUMECS:codestart:
............MOVAH,4CH
;返回DOS
INT21H
codeENDS
ENDstart
MOVCX,8;顯示字符個數(shù)為8next:SHLBL,1;將顯示位移至CF中
JCone;CF=1?
MOVDL,30H
;CF=0,將0的ASCII放在DL中
JMPexitone:MOVDL,31H
;CF=1,將1的ASCII放在DL中exit:MOVAH,2INT21H;調(diào)用DOS功能顯示
DECCX;循環(huán)次數(shù)減1
JNZnext;判斷是否結(jié)束MOVBL,53H;設(shè)置一個測試53h第四十八頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計49codeSEGMENTASSUMECS:codestart:
…;程序主體部分
.........MOVAH,4CH
;返回DOS
INT21HcodeENDS
ENDstart一個完整匯編程序的基本框架:第四十九頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計50方法二:調(diào)用20H類型的中斷程序◢
20H中斷程序的功能:處理程序結(jié)束,返回系統(tǒng)。◢調(diào)用20H中斷程序是有條件的:要求當前的CS應(yīng)為程序段前綴在內(nèi)存的段值問題:如何保證執(zhí)行到INT20H時,當前CS的值為程序段前綴在內(nèi)存的段值?第五十頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計51采用下面的程序框架,可保證執(zhí)行INT20H時,當前的CS值為程序段前綴在內(nèi)存的段值。codeSEGMENTASSUMECS:codemainPROCFAR
;使RET為遠返回
start:PUSHDS
;入棧保存地址
MOVAX,0
;程序段前綴的首地址
PUSHAX
、、;程序主體部分、、
RET
;取程序段前綴首地址mainENDPcodeENDSENDstart第五十一頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計52注意:
不可在匯編語言程序的最后用INT20H返回DOS。
原因是20h中斷子程的執(zhí)行是有條件的。采用第二種返回DOS的程序結(jié)構(gòu),才能滿足該條件,否則無法返回。不可在程序的最后用INT3返回DOS。
原因是3類型的中斷子程實現(xiàn)斷點設(shè)置,只在DEBUG下起作用。第五十二頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計53三、表達式及運算符在匯編語言中,指令的操作數(shù)除了可以是常數(shù)、寄存器、變量和標號外,還可以是表達式。表達式是由常數(shù)、寄存器、變量、標號和專用運算符組合而成。在程序匯編時,匯編程序自動把這些表達式計算出來,形成具體的指令操作數(shù)。
1、常數(shù)、變量和標號
2、表達式及運算符返回第五十三頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計541、常數(shù)、變量和標號常數(shù)包括數(shù)值型常數(shù)和字符型常數(shù)。如:12H,1234H,’AB’變量變量代表存放在存儲單元中的數(shù)據(jù)。定義后的變量有三個屬性:
(1)段屬性表示變量所在的邏輯段;
(2)偏移量屬性表示變量所在邏輯段中的偏移地址;
(3)類型屬性表示變量占用的存儲單元數(shù),DB、DW、DD、DQ、DT。第五十四頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計551、常數(shù)、變量和標號標號是指令目標代碼的符號地址。在轉(zhuǎn)移指令中常用標號代替具體轉(zhuǎn)移地址,標號的使用使編寫匯編語言程序時,不必考慮程序匯編、連接后系統(tǒng)分配給指令代碼的實際地址。標號同樣有三個屬性:
(1)段屬性表示指令代碼所在的邏輯段;
(2)偏移量屬性表示指令代碼所在的邏輯段中的偏移地址;
(3)距離屬性表示標號可作段內(nèi)轉(zhuǎn)移或段間轉(zhuǎn)移(NEAR、FAR)。第五十五頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計56
2、表達式及運算符表達式由操作數(shù)和運算符組成。其中,操作數(shù)可以是常數(shù)、變量、寄存器和標號。運算符包括算術(shù)運算符、邏輯運算符、關(guān)系運算符、分析運算符和屬性運算符五類運算。
注意:運算符的先后次序。第五十六頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計57表達式操作數(shù)表達式由常量、標號、變量和一些操作符構(gòu)成。匯編程序?qū)Ρ磉_式進行運算后,得到一個確定的數(shù)值,再把這個數(shù)值匯編到指令中。據(jù)表達式所表示的內(nèi)容,分數(shù)值表達式、地址表達式。表達式是指令或偽操作的操作數(shù);表達式中的操作符由匯編程序完成例MOVAX,12-4;MOVAX,8;數(shù)字表達式
LEABX,[string+4];地址表達式第五十七頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計58表達式中的操作符有以下幾類:①算術(shù)運算符(+、-、*、/、MOD)②邏輯運算符(AND、OR、NOT、XOR)③關(guān)系運算符(EQ、NE、GT、GE、LT、LE)
真:FFFFH;假:0④分析運算符(SEG、OFFSET)⑤綜合運算符(PTR)⑥其它運算符第五十八頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計59①算術(shù)運算符用于完成算術(shù)運算,有+(加法)、-(減法)、×(乘法)、/(除法)、MOD(求余)、SHL(左移)、SHR(右移)共7種運算。②邏輯運算符的作用是對其操作數(shù)進行按位操作。邏輯運算符有AND(與)、OR(或)、XOR(異或)和NOT(非)。③關(guān)系運算符的運算對象是兩個性質(zhì)相同的項目。其結(jié)果為:關(guān)系成立或不成立。有EQ(相等)、NE(不相等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)共6種。第五十九頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計60④分析運算符是對存儲器地址進行運算的。有5個:SEG(求段基值)、OFFSET(求偏移量)、TYPE(求變量類型)、LENGTH(求變量長度)和SIZE(求字節(jié)數(shù))。
⑤綜合運算符可以用來建立和臨時改變變量或標號的類型以及存儲器操作數(shù)的存儲單元類型,而忽略當前的屬性,所以又稱為屬性修改運算符。有6個綜合運算符:PTR、段屬性前綴、SHORT、THIS、HIGH和LOW。第六十頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計61在計算具有多個運算符的表達式值時,按以下規(guī)則操作:◎優(yōu)先級高的先運算,優(yōu)先級低的后運算?!虍攦?yōu)先級相同時,按表達式中從左到右的順序進行運算◎使用括號可以提高表達式運算的優(yōu)先級?!虮磉_式中的運算符的優(yōu)先級高優(yōu)先級低1括號中的項,即(…)和[…]2LENGTH,SIZE,WIDTH,MASK3PTR,OFFSET,SEG,TYPE,THIS4×,/,MOD5+,-6EQ,NE,L,LE,GT,GE7NOT8AND9OR,XOR第六十一頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計62例:
算術(shù)運算符(+、-、*、/、MOD(取余數(shù)))MOVAX,6*8←MOVAX,48邏輯運算符(AND、OR、NOT、XOR)MOVAX,80hOR70h←MOVAX,0F0h
關(guān)系運算符(EQ、NE、GT、GE、LT、LE)
真:FFFFH;假:0MOVAX,1GE2←MOVAX,0第六十二頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計63SEG取符號地址的段地址例MOVAX,SEGyyOFFSET取符號地址的偏移地址例MOVBX,OFFSETyy注意:SEG、OFFSET只能對符號地址操作
MOVAX,SEG[BX]MOVBX,OFFSET[SI]bb SEGMENT
yy DB6dup(?)bb ENDScc SEGMENT ASSUMECS:cc,DS:aa,ES:bbstart
: CLD MOVAX,SEGyy MOVES,AX MOVDI,OFFSETyy
MOVCX,6 …….
cc ENDS
ENDstart第六十三頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計644、分析運算符
(Analyticoperator)
有SEG
、OFFSET、TYPE、LENGTH和SIZE。用于把變量的三個屬性分別取出來作為操作數(shù)。把一些特征或存貯器地址的一部分作為數(shù)值回送。
SEG變量名
--取出變量的段基值
OFFSET變量名
取出變量的偏移地址
TYPE變量名
取出變量的類型值,字節(jié)數(shù)據(jù)為1、字數(shù)據(jù)為2、雙字數(shù)據(jù)為4、8字節(jié)數(shù)據(jù)為8、10字節(jié)數(shù)據(jù)為10。第六十四頁,共一百一十四頁,2022年,8月28日2023/3/16第4章匯編語言及匯編程序設(shè)計65
TYPE
變量名回送該變量的以字節(jié)數(shù)表示的類型(DB為1,DW為2,DD為4,DQ為8,DT為10)或label
標號回送標號類型數(shù)值(NEAR為-1,F(xiàn)AR為-2)例:ARRAYDW1,2,3
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Unit 6 Review Period 4 (說課稿)-2024-2025學(xué)年北師大版(三起)英語三年級上冊
- 《1、了解學(xué)習(xí)好習(xí)慣》(說課稿)-2024-2025學(xué)年二年級上冊綜合實踐活動魯科版
- 《10 交通安全小常識》(說課稿)-2023-2024學(xué)年四年級上冊綜合實踐活動長春版
- 23《梅蘭芳蓄須》說課稿2024-2025學(xué)年統(tǒng)編版語文四年級上冊
- 14《我要的是葫蘆》第一課時 說課稿-2024-2025學(xué)年語文二年級上冊統(tǒng)編版
- Unit5 The colourful world第三課時(說課稿)-2024-2025學(xué)年人教PEP版(2024)英語三年級上冊
- 2024-2025學(xué)年高中歷史 第四單元 工業(yè)文明沖擊下的改革 第12課 俄國農(nóng)奴制改革(2)教學(xué)說課稿 岳麓版選修1
- 2025合同約定的“滯納金”是否可以視為違約金
- 2025建安施工合同文本
- 2025審計業(yè)務(wù)合同范本
- 《自主神經(jīng)系統(tǒng)》課件
- 2025集團公司內(nèi)部借款合同范本
- 2025年山西地質(zhì)集團社會招聘高頻重點提升(共500題)附帶答案詳解
- 四川省綿陽市2025屆高三第二次診斷性考試思想政治試題(含答案)
- 2024-2025學(xué)年遼寧省沈陽市沈河區(qū)七年級(上)期末英語試卷(含答案)
- 2024-2025學(xué)年初中七年級上學(xué)期數(shù)學(xué)期末綜合卷(人教版)含答案
- 2023高考語文文言文復(fù)習(xí):《說苑》練習(xí)題(含答案解析)
- 象數(shù)療法好療效
- A320系列飛行訓(xùn)練課程:電子飛行儀表系統(tǒng)概況
- 2020新版?zhèn)€人征信報告模板
- 東芝空調(diào)維修故障代碼匯總
評論
0/150
提交評論