




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、第4章 匯編語言程序設(shè)計,主要內(nèi)容:,基本概念,匯編程序的格式和基本語法,偽操作命令和宏指令,DOS和BIOS調(diào)用,匯編語言程序設(shè)計,程序:為解決某一具體問題或為達(dá)到某些目的,將指令和數(shù) 據(jù)編寫成一個相互聯(lián)系的序列,稱之為程序。 機(jī)器語言(Machine Language):計算機(jī)能直接理解和執(zhí)行的 語言,是直接采用二進(jìn)制代碼表示的程序設(shè)計語言。 匯編語言(Assembly Language):是一種采用助記符表示的 程序設(shè)計語言,即用助記符來表示指令的操作碼和操 作數(shù),用標(biāo)號或符號表示地址、常量或變量,是一種 面向機(jī)器的語言。,4.1 基本概念,用匯編語言編寫的源程序在交付計算機(jī)執(zhí)行前,需要
2、翻譯成目標(biāo)程序,機(jī)器方能執(zhí)行。這個翻譯過程稱為匯編,完成匯編任務(wù)的程序稱為匯編程序,如下圖所示。,匯編程序是最早也是最成熟的一種系統(tǒng)軟件。它除了能夠?qū)R編語言源程序翻譯成機(jī)器語言程序這一主要功能外,還有如下功能:,1. 能夠根據(jù)用戶的要求自動分配存儲區(qū)域(包括程序區(qū)、數(shù) 據(jù)區(qū)和暫存區(qū)等); 2. 可以自動地把各種進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù),把字符轉(zhuǎn)換成 ASCII碼,計算表達(dá)式的值等; 3. 可以自動對源程序進(jìn)行檢查,給出錯誤信息(如非法格式 、未定義的助記符、標(biāo)號、漏掉的操作數(shù)等); 4. 允許在源程序中把一個指令序列定義為一條宏指令(即自 定義語句); 5. 具有結(jié)構(gòu)和記錄等高級匯編語言功能。,
3、高級語言(High Level Language):如:BASIC語言 、FORTRAN語言、C語言、PASCAL語言等。,4.2 匯編程序的格式和基本語法,示例:編程實現(xiàn)多字節(jié)加法,如:S=3B74AC60F8H+20D59E36C1H,CODE SEGMENT ;代碼段定義 ASSUME CS:CODE,DS:DATA START: MOV AX, DATA MOV DS, AX ;初始化段寄存器 MOV CX, 5 MOV SI, 0 CLC ;清進(jìn)位標(biāo)志 LOOPER:MOV AL, DATA2SI ADC DATA1SI,AL INC SI DEC CX JNZ LOOPER MOV
4、 AH, 4CH ;程序運(yùn)行結(jié)束,返回DOS狀態(tài) INT 21H CODE ENDS,END START ;整個源程序匯編結(jié)束,DATA SEGMENT ;數(shù)據(jù)段定義 DATA1 DB 0F8H, 60H, 0ACH, 74H, 3BH DATA2 DB 0C1H, 36H, 9EH, 0D5H, 20H DATA ENDS,data segment message db Hello World!,$ data ends code segment assume cs:code,ds:data begin:mov ax,data mov ds,ax mov dx,offset message m
5、ov ah,9 ;待顯示的字符串符號(ASCII碼),定義DS段且以“$”字符結(jié)束, ;把段地址放入DS中,偏移地址放入DX中,利用9號功能鍵,可以把字符串顯示;在屏幕上。 int 21h mov ah,4ch; int 21h code ends end begin,匯編語言源程序采用分段結(jié)構(gòu),即一個匯編語言源程序由若干段組成(一般由數(shù)據(jù)段和代碼段組成),每一個段以SEGMENT語句開始,以ENDS語句結(jié)束,整個程序的結(jié)尾是END語句。在代碼段中下面的內(nèi)容是不可缺少的: (1)定義段(使用SEGMENT/ENDS語句定義) (2)約定段寄存器和段的關(guān)系(即明確段與段寄存器的關(guān)系,使用一個或多
6、個ASSUME語句實現(xiàn)) (3)裝填段寄存器(只裝填數(shù)據(jù)型段寄存器) (4)設(shè)置返回DOS的方法,一、匯編語言程序的分段結(jié)構(gòu),例如: MYDATA SEGMENT; 定義數(shù)據(jù)段起始語句 ; 定義數(shù)據(jù) MYDATA ENDS; 定義數(shù)據(jù)段終止語句 MYCODE SEGMENT ; 定義代碼段起始語句 ASSUME CS:MYCODE,DS:MYDATA;約定段寄存器和段的 ;關(guān)系 START: MOV AX,MYDATA; 裝填相應(yīng)的段寄存器 MOV DS,AX ; 完成所需功能的程序段 MOV AH,4CH; 設(shè)置返回DOS INT 21H MYCODE ENDS; 定義代碼段終止語句 END
7、 START; 程序結(jié)束,1.語句分類 指令性語句:也稱指令語句,指8086的指令系統(tǒng),匯編后產(chǎn)生目標(biāo)代碼。 標(biāo)號 操作碼/助記符 操作數(shù) ;注釋區(qū) 指示性語句:包括偽操作命令和偽操作符,也稱偽指令語句,告訴匯編程序如何匯編,匯編后不產(chǎn)生目標(biāo)代碼。 符號名 定義符 參數(shù)1,參數(shù)2,,參數(shù)n ;注釋區(qū) 宏指令語句:以某個宏指令名定義一段指令序列,在程序中用一條宏指令語句代替一段程序。凡是有宏指令的程序,在匯編時,用相應(yīng)的目標(biāo)代碼序列代替,插入到對應(yīng)的程序中,不展開時不產(chǎn)生目標(biāo)代碼。,二、匯編語言語句的類型和格式,2.語句格式 匯編語言是由一條條的語句組成的,語句格式如下: 名字 助記符 操作數(shù)
8、;注釋 其中帶方括號的部分為任選項,可以有,也可以沒有。 (1)名字 “名字”是語句的符號地址,對于指令語句,“名字”稱為標(biāo)號,其后必須加冒號“:”;對于偽指令語句,“名字”可以是變量名、段名、過程名等,其后不能加冒號“:”。 “名字”一般都有三個屬性:段屬性、偏移屬性和類型屬性。 段屬性:表示“名字”所在段的起始地址(即段地址)。 偏移屬性:表示“名字”所在段的起始地址到定義該“名字”的地址之間的字節(jié)數(shù)(即偏移量)。偏移量是一個16位無符號數(shù)。,類型屬性:表示名字的數(shù)據(jù)或地址的類型。 對于標(biāo)號和過程名:類型屬性有NEAR和FAR兩種,表示只能在段內(nèi)被引用還是可以在其它段被引用; 對于變量:類
9、型屬性有BYTE(字節(jié))、WORD(字)、DWORD(雙字)、QWORD(四字)、TBYTE(10個字節(jié))等,表示數(shù)據(jù)區(qū)中所存取的操作數(shù)的大小。 對于段名:只有段屬性,表示段的起始地址(段地址),沒有偏移屬性和類型屬性。,(2)助記符 指系統(tǒng)提供的有關(guān)指令的助記符。在指令語句中,表示該指令語句的操作碼,在偽指令語句中稱為定義符,它們指出語句的功能。 (3)操作數(shù) 操作數(shù)即為操作的對象。在指令語句中,可能有單操作數(shù)、雙操作數(shù),也可能無操作數(shù)或隱含操作數(shù);而在偽指令中可能有更多個操作數(shù)。當(dāng)操作數(shù)有多個時,要用逗號隔開。 可以作為操作數(shù)的有:常量、寄存器、標(biāo)號、變量和表達(dá)式等。 (4)注釋 以“;”
10、開始,是對匯編語句的功能或匯編程序的說明。,第三節(jié) 匯編語言運(yùn)算符,匯編語言運(yùn)算符:是編譯程序在編譯時計算的,與運(yùn)算指令不同,指令是在程序運(yùn)行時計算的。 一、算術(shù)運(yùn)算符 ,*, / , MOD , SHL , SHR MOV AX, A+B 二、邏輯運(yùn)算符 AND, OR, XOR, NOT C EQU B-A AND AX, C AND OFH,三、關(guān)系運(yùn)算符 EQ、NE、LT、GT、LE、GE運(yùn)算符分別實現(xiàn)等于、不等于、小于、大于、小于等于、大于等于運(yùn)算。 由關(guān)系運(yùn)算符連接兩個操作數(shù)構(gòu)成關(guān)系表達(dá)式,其值為邏輯值。當(dāng)關(guān)系表達(dá)式成立時,其值為真,關(guān)系值為0FFFFH;關(guān)系表達(dá)式不成立時,其值為
11、假,關(guān)系值為0。 示例:MOV AX,PORT LT 5 當(dāng)PORT5時,匯編成:MOV AX,0 示例:MOV BX,(PORT LT 5) AND 20H) OR (PORT GE 5) AND 30H) 當(dāng)PORT5時,匯編成:MOV AX,30H,注意: 算術(shù)運(yùn)算符總可以用于數(shù)字操作,其結(jié)果也是數(shù)字的。當(dāng)應(yīng)用于存儲器操作數(shù)時,只有+, -運(yùn)算符有意義; 邏輯運(yùn)算符的操作數(shù)也必須是數(shù)字,存儲器操作數(shù)不能進(jìn)行邏輯運(yùn)算; 關(guān)系運(yùn)算符連接的兩個操作數(shù),必須都是數(shù)字的或是在同一段內(nèi)的存儲器地址。,四、值返回符 1) $運(yùn)算符 $:當(dāng)前地址偏移量的值,BLOCK DB HELLO! NUM EQU
12、 $-BLOCK,;NUM為 6,STR1 DW AB STR2 DB 16 DUP(?) CNT EQU $-STR1 MOV CX, CNT MOV AX, STR1 HLT,; CX為 18,; AX為4142H,STR1 DW 4142H,STR1 DB 41H, 42H,DATA SEGMENT NA EQU 15 NB EQU 10 NC DB 2 DUP(4, 2 DUP(5, 2) CNT DB $-NC CWT DW $-CNT ND DW NC DATA ENDS,設(shè)數(shù)據(jù)段定義如下:,從DS:0000H開始至CNT單元之前存放的數(shù)據(jù)依次為:_;ND單元中的值為_;CWT單元
13、中的值為_; CNT單元中的值為_。,4,5,2,5,2,4,5,2,5,2,0000H,1,0AH,SEG 和OFFSET SEG: 求標(biāo)號或變量的段基址 OFFSET: 求標(biāo)號或變量的距段首址的偏移量,DATA SEGMENT A DB 12 B DW 23, 25 DATA ENDS MOV BX, OFFSET B MOV AX, SEG B LEA BX, B,; BX: 0001H,; AX: DS值,; BX: 0001H ;與 MOV BX, OFFSET B,DATA SEGMENT TABLE DW 10, 20, 30, 40, 50 ENTRY DW 3 DATA EN
14、DS MOV BX, OFFSET TABLE ADD BX, ENTRY MOV AX, BX,;0000H,;BX: 3,;AX: 1E00H,注意以下兩個語句 B DB 5 DUP(2, 3 DUP(0) ; B DW 5 DUP(2, 3 DUP(0) ;,3) TYPE 標(biāo)號或符號的類型值 對變量 :表示變量的字節(jié)數(shù) DB 1, DW 2, DD 4 對標(biāo)號:表示過程或指令地址的調(diào)用類型(NEAR) -1或(FAR) -2,DATA SEGMENT A DB 12 B DW 23, 25 DATA ENDS MOV AX, TYPE A MOV BX, TYPE B,;AX: 000
15、1H,;BX: 0002H,4) LENGTH 和 SIZE,LENGTH: 對DUP情況下, 變量的項數(shù)或元素個數(shù), 在其他情況下該項屬性為1; SIZE:對操作數(shù)分配的字節(jié)數(shù)。 SIZE=LENGTH TYPE,A DB 1234 B DW 5 DUP(2, 3 DUP(0) ; C DW AB, C, D L1: MOV AL, TYPE B MOV BL, LENGTH B MOV AH, SIZE A MOV BH, SIZE C MOV CL, TYPE L1 MOV CH, SIZE B,; AL: 2,; BL: 5,; AH: 1,; BH: 2,; L1為標(biāo)號 CL: 0F
16、FH,; CH: 0AH,對于下面的數(shù)據(jù)定義,各條MOV指令單獨執(zhí)行后,請?zhí)畛溆嘘P(guān)寄存器的內(nèi)容:,TABLE1 DB ? TABLE2 DW 20 DUP(?) TABLE3 DB ABCD MOV AX, TYPE TABLE1 MOV BX, TYPE TABLE2 MOV CX, LENGTH TABLE2 MOV DX, SIZE TABLE2 MOV SI, LENGTH TABLE3,; AX: 1,; BX: 2,; CX: 20,; DX: 40,; SI: 1,5) HIGH 和LOW,HIGH: 對操作數(shù)取高字節(jié); LOW: 對操作數(shù)取低字節(jié)。,NUM EQU 0CDEFH
17、 MOV AH, HIGH NUM MOV AL, LOW NUM,; AH: 0CDH,; AL: 0EFH,五、屬性運(yùn)算符,用來給指令中的操作數(shù)指定一個臨時的屬性,而暫時忽略操作數(shù)定義時的屬性。,1) PTR 定義操作數(shù)為新的類型,新類型 PTR 操作數(shù),操作數(shù)可以是存儲器的地址或標(biāo)號名,F1 DW 1234H F2 DB 23H, 56H, 18H MOV AL, BYTE PTR F1 MOV AX, WORD PTR F2,; AL: 34H,; AX: 5623H,DAT1 DB 12H, 34H DAT2 DB 56H, 78H MOV AX, WORD PTR DAT1 ; A
18、X: 3412H CMP AX, WORD PTR DAT2 ; 7856H JA L1 MOV BX, WORD PTR DAT2; BX:5678H MOV WORD PTR DAT2, AX; MOV WORD PTR DAT1, BX L1: HLT,DAT2單元的值是:_,56H,DAT1單元的值是:12H,2) THIS 指定新類型,像PTR一樣可用來建立一個特殊類型的存儲器地址操作數(shù),而沒有為它分配存儲器。新的存儲器操作數(shù)的段和偏移量部分就是下一個能分配的存儲單元的段和偏移量。,F1 EQU THIS BYTE F2 DW 4321H, 2255H MOV AL, F1 MOV
19、AX, F2,THIS 類型名,F1,; AL: 21H,; AX: 4321H,F1和F2具有相同的段基地址和偏移地址,但類型不同。,1.算術(shù)運(yùn)算符 、和MOD(取余,即兩個整數(shù)相除后取余數(shù))、SHR(右移)、SHL(左移)等。 例如:MOV AX,2*0101H MOV AX,STA+2 MOV AL,NUM SHL 1 ;將NUM左移1位再保存結(jié)果 2.邏輯運(yùn)算符 AND、OR、XOR、NOT運(yùn)算符分別實現(xiàn)邏輯與、或、異或、取反運(yùn)算。 例如:MOV AL,77H AND 84H ;AL=04H MOV AX,00FFH OR 1783H ;AX=17FFH MOV AH,NOT 0FFH
20、 ;AH=00H,三、匯編語言中的運(yùn)算符,4.分析運(yùn)算符 SEG:返回一個變量或標(biāo)號所在段的段地址 OFFSET:取標(biāo)號或者變量在段內(nèi)的偏移地址 TYPE:返回一個變量或者標(biāo)號的類型屬性值,示例:MOV SI,TYPE ARRAY MOV AH,TYPE TABL,變量的類型屬性值,標(biāo)號的類型屬性值,5.LENGTH運(yùn)算符 返回變量或結(jié)構(gòu)的數(shù)據(jù)區(qū)的數(shù)據(jù)總數(shù),只對DUP定義的變量才有意義,給出分配給變量的基本單位的數(shù)目(字節(jié)數(shù)、字?jǐn)?shù)或雙字?jǐn)?shù)),對于未使用DUP定義的變量則返回1。 格式: LENGTH 變量 例如:ARR DW 20 DUP(18H) DAT DB 12,25,AB . MOV
21、AL,LENGTH ARR ;AL-20 MOV AH,LENGTH DAT ;AH-1,6.SIZE運(yùn)算符 分配字節(jié)長度操作符。若使用DUP操作符,則SIZE操作符返回得到分配給該變量數(shù)據(jù)區(qū)的字節(jié)總數(shù);若未使用DUP符號,則返回值為TYPE運(yùn)算的結(jié)果。 格式: SIZE 變量 例如: TAB DW 100 DUP(?) TABLL1 DB 12H,34H . MOV AL,SIZE TABLL1 ;AL-1 MOV AH,SIZE TAB ;AH-200 MOV BL,LENGTH TAB ;BL-100 MOV BH,TYEP TAB ;BH-2 結(jié)論: SIZE=LENGTH*TYPE,
22、7.PTR運(yùn)算符 指定建立存儲器操作數(shù)的類型屬性(一個變量或標(biāo)號) 格式: 類型 PTR 表達(dá)式 注意:類型可為:BYTE、WORD、DWORD、NEAR、FAR,表達(dá)式可為地址表達(dá)式或標(biāo)號。 例如: MOV AH,BYTE PTR VARWDI JMP DWORD PTR BX;段間間接轉(zhuǎn)移: CALL WORD PTR BXSI;子程序段內(nèi)調(diào)用指令 DATA1 DB 100 DUP(?) ;DATA1為字節(jié)類型 DATA2 EQU WORD PTR DATA1 ;DATA2為字型變量 DATA3 EQU DWORD PTR DATA1 ;DATA3為雙字型變量,8.THIS指定屬性操作符
23、用以指定存儲器操作數(shù)或地址的類型屬性。 格式: THIS 類型 注意: (1)類型可為:BYTE、WORD、DWORD、NEAR、FAR (2)該操作符對應(yīng)的語句放在DB、DW等偽指令前邊(或標(biāo)號定義的前邊),規(guī)定一個新變量(或新標(biāo)號)的屬性,其段地址和偏移地址即為緊跟在后面用DB、DW定義(或標(biāo)號定義)的變量(或標(biāo)號)的段地址和偏移地址。,(3)一般通過EQU偽指令為符號名賦予THIS指定的類型。 例如: FIRST_BYTE EQU THIS BYTE WORD_TABLE DW 3275H,08ABH 以上定義結(jié)果:FIRST_BYTE為字節(jié)型變量,WORD_TABLE為字型變量,兩者的
24、段地址和偏移地址相同,但類型屬性不同。對變量FIRST_BYTE只能字節(jié)訪問,對WORD_TABLE只能字訪問,9.其他操作符及運(yùn)算符 方括號對通常用以表示存儲單元的地址。 “:”段越符放在CS、DS、ES、SS后面,表示段超越。 例如:MOV AL,BX MOV DX,SI+5 MOV AX,ES:SI MOV AL,ES:BX,數(shù)據(jù)定義偽指令的作用是定義存儲變量的類型,給存儲器賦初值,或者僅僅給變量分配存儲單元,而不賦予特定的值。常用的數(shù)據(jù)定義偽指令有:DB、DW、DD、DQ、DT等。數(shù)據(jù)定義偽指令的一般格式為: 變量名 偽指令 操作數(shù)1,操作數(shù)2,操作數(shù)n 方括號中的變量名為任選項,變量
25、名后面不跟冒號。偽指令定義符后面的操作數(shù)可以不止一個。如有多個操作數(shù),互相之間應(yīng)該用逗號分開。,一、數(shù)據(jù)定義偽指令,3.常量 指在指令中出現(xiàn)的固定值,可分為數(shù)值型常量和字符型常量兩類。 (1)數(shù)值型常量 二進(jìn)制常量:由0和1組成的序列,后綴為B。 十六進(jìn)制常量:由0-9和A-F組成的數(shù)字序列,后綴為H,凡是以字母打頭的常量,必須在字母前面加0,否則會被編譯成地址。 十進(jìn)制常量:即十進(jìn)制數(shù),后綴為D(可省略)。 八進(jìn)制常量:即八進(jìn)制數(shù),后綴為Q。 (2)字符型常量 用單引號括起來的一個或多個字符(字符串)。,4.變量 是存儲器中某個數(shù)據(jù)區(qū)的名字,在指令中可以作為存儲器操作數(shù)。 5.表達(dá)式 使用運(yùn)
26、算符把常數(shù)、寄存器、標(biāo)號、變量等連接起來的運(yùn)算式??煞譃閿?shù)值表達(dá)式和地址表達(dá)式兩種。,一、常量、變量及標(biāo)識符,常量:二進(jìn)制(B),八進(jìn)制(Q),十六進(jìn)制(H), 十進(jìn)制(D)(默認(rèn)),100 01100100B 244Q 64H,變量:代表存放在某些存儲單元的數(shù)據(jù),這些數(shù)據(jù)在程序的運(yùn)行期間隨時可以修改。 在程序中以變量名的形式出現(xiàn)。,定義變量:給變量分配存儲單元, 為這個單元起名字(變量名), 可以同時將這些存儲單元預(yù)置初值。,每個變量都有三個屬性,段屬性(SEG) 變量所在的存儲單元的段基址 偏移量屬性(OFFSET) 變量所在的存儲單元距段起點的字節(jié)數(shù) 類型屬性(TYPE) 一個單位變量占
27、用存儲單元的字節(jié)數(shù),分為: DB(1個字節(jié)) DW(2個字節(jié)) DD(4個字節(jié)),DATA SETMENT X DB 5, 4 Y DW 40H Z DD 2030H DATA ENDS,DS:0000H,X,Y,Z,X,Y,Z分別都有三個屬性: 段基址,偏移量,類型值 這三個屬性都有固定的值。,標(biāo)識符:給指令或某一存儲單元地址所起的名字。 標(biāo)識符由下列字符組成: 字母: AZ, az; 數(shù)字: 09; 特殊字符: ? . _ $,數(shù)字不能作標(biāo)識符的第一個字符,. 必須作標(biāo)識符的第一個字符,標(biāo)識符最長為31個字符。,標(biāo)識符后面跟冒號時,表示標(biāo)號,代表該行指令的起始地址, 標(biāo)號可以被轉(zhuǎn)移、調(diào)用指
28、令直接引用。 標(biāo)識符后面不帶冒號時,表示變量。,標(biāo)號:代碼段中某一條指令的地址。,標(biāo)號有3個屬性: 段屬性(SEG) 該條指令所在段的段基址 偏移量屬性(OFFSET) 該指令的偏移地址(距段起點的字節(jié)數(shù)) 距離屬性 表示該標(biāo)號是作為段內(nèi)還是段間被調(diào)用或轉(zhuǎn)移的,該屬性有兩個值: NEAR(FFFFH, -1): 本標(biāo)號只能被標(biāo)號所在段的轉(zhuǎn)移或調(diào)用指令所訪問(段內(nèi)轉(zhuǎn)移),標(biāo)號后有冒號; FAR (FFFEH, -2): 本標(biāo)號可被其他段(不是標(biāo)號所在段)的轉(zhuǎn)移或調(diào)用指令訪問(段間轉(zhuǎn)移)。,標(biāo)號名 LABEL FAR,1定義字節(jié)命令DB(Define byte) DB定義的變量類型為BYTE,給其
29、后的每個操作數(shù)分配1個字節(jié)。若操作數(shù)是字符串,必須用單引號括起來,每個字符本身用其ASCII碼表示。 2定義字命令DW(Define word) DW定義的變量類型為WORD。DW偽指令定義符后面的操作數(shù)每個占有1個字,即2個字節(jié)。在內(nèi)存中存放時,低位字節(jié)在前,高位字節(jié)在后。 3定義雙字命令DD(Define double word) DD定義的變量類型為DWORD。DD后面的操作數(shù)每個占有2個字,即4個字節(jié)。在內(nèi)存中存放時,低位字在前,高位字在后。,4定義四個字的命令DQ(Define Quadword) DQ定義的變量類型為QWORD,給其后的每個操作數(shù)分配4個字,即8個字節(jié)。在內(nèi)存中存放
30、時,低位數(shù)據(jù)放低地址,高位數(shù)據(jù)放高地址。 5定義十個字節(jié)命令DT(Define Tenbytes) DT定義的變量類型為TBYTE。DT偽指令定義符后面的操作數(shù)每個占有10個字節(jié)。在內(nèi)存中存放時,低位字節(jié)在前,高位字節(jié)在后。 6重復(fù)定義偽操作命令DUP 當(dāng)操作數(shù)重復(fù)定義多次時,可使用重復(fù)定義偽操作符“DUP”表示,其形式為: n DUP(初值,初值) ;n為重復(fù)定義的次數(shù),數(shù)據(jù)定義偽操作后面的操作數(shù)可以是常數(shù)、表達(dá)式或字符串,但每項操作數(shù)的值不能超過由偽指令定義符所定義的數(shù)據(jù)類型限定的范圍。字符串必須放在單引號中。 除了常數(shù)、表達(dá)式和字符串外,問號“?”也可以作為數(shù)據(jù)定義偽指令的操作數(shù),此時僅
31、給變量保留相應(yīng)的存儲單元,而不賦與變量某個確定的初值。,例: 畫圖說明下列偽指令所定義的數(shù)據(jù)在內(nèi)存中的存放形式。 ARV1 DB 3+4,43H,-2 ARV2 DW 474FH,1,? COUNT EQU 2;EQU定義的是常量,不占用內(nèi)存單元 ARV3 DB 2 DUP(1,COUNT DUP(2) ARV4 DD ARV3;定義為ARV3 32位的地址,低位字存放的是AVR3的偏移地址,高位字存放的是AVR3的段地址 ARV5 DB AB;此語句等價于 ARV5 DB A,B; 字符串只能用DB,DW偽操作指令定義,若字符串的個數(shù)超過兩個,只能用DB來定義。字符串必須用括起來,操作數(shù)中?
32、號,只能表明預(yù)留出一定的存儲單元數(shù)量,在匯編時不能寫入任何數(shù)據(jù)。 ARV6 DW AB 解:假設(shè)此數(shù)據(jù)段的段地址為1234H,即DS1234H,則有存儲器分配圖如右邊:,符號定義偽指令的用途是給一個符號重新命名,或定義新的類型屬性等。符號名包括匯編語言的變量名、標(biāo)號名、過程名、寄存器名以及指令助記符等。 常用的符號定義偽指令有:EQU、(等號)和LABLE 1. EQU 格式如下:符號名 EQU 表達(dá)式 EQU偽指令將表達(dá)式的值賦予一個符號名,以后可用這個符號名來代替表達(dá)式。格式中的表達(dá)式可以是一個常量、變量、標(biāo)號、數(shù)值表達(dá)式或地址表達(dá)式等。例如:,二、符號定義偽指令,CR EQU 0DH ;
33、 常數(shù) LF EQU 0AH A EQU ASCII-TABLE ; 變量 STR EQU 64*1024 ; 數(shù)值表達(dá)式 ADR EQU ES:BP+DI+5 ; 地址表達(dá)式 CBD EQU AAM ; 指令助記符 DAT1 EQU WORD PTR DAT DAT2 EQU DWORD PTR DAT 利用EQU偽指令,可以用一個名字代表一個數(shù)值, 或用一個較簡短的名字來代替一個較長的名字。 注意:EQU偽指令不允許對同一符號重復(fù)定義。,2. (等號) 格式如下:符號名表達(dá)式 “”(等號)偽指令的功能與EQU偽指令基本相同,主要區(qū)別在于它可以對同一個名字重復(fù)定義。例如: COUNT1 EQ
34、U 20H COUNT=10 MOV CX, COUNT ;(CX)10 COUNT=COUNT-1 MOV BX, COUNT ;(BX)9 ,3. LABEL LABEL偽指令的用途是定義標(biāo)號或變量的類型,格式如下: 名字 LABEL 類型 變量的類型可以是BYTE、WORD、DWORD。標(biāo)號的類型可以是NEAR或FAR。利用LABEL偽指令可以使同一個數(shù)據(jù)區(qū)兼有BYTE和WORD兩種屬性,這樣在以后的程序中可根據(jù)不同的需要分別以字節(jié)為單位,或以字為單位存取其中的數(shù)據(jù)。例如:,AREAW LABEL WORD ; 變量AREAW類型為WORD AREAB DB 100 DUP(?) ; 變
35、量AREAB類型為BYTE MOV AREAW, AX ; AX送兩個單元中 MOV AREAB49, AL ; AL送一個單元中 LABEL偽指令也可以將一個屬性已經(jīng)定義為NEAR,或者后面跟有冒號的標(biāo)號(隱含屬性為NEAR)再定義為FAR。例如: AGAINF LABEL FAR ; 定義標(biāo)號AGAINF的屬性為FAR AGAIN: PUSH AX ; 標(biāo)號AHAIN的屬性為NEAR 上面的過程既可以用標(biāo)號AGAIN在本段內(nèi)被調(diào)用,也可以利用標(biāo)號AGAINF被其他段調(diào)用。,一、段定義,一般的源程序分為4個段:代碼段Code、數(shù)據(jù)段Data、堆棧段Stack、附加段Extra。 各個段從段定
36、義語句開始,到段結(jié)束語句ENDS結(jié)束。,段名 SEGMENT 定位類型 組合類型 類別, 段體 ,段名 ENDS,用戶指定,可任選定義,段名必須是合法是標(biāo)識符。,定位類型:,內(nèi)存可以看成是一本書,將其分成頁,段,字,和字節(jié)。 每256個地址為一頁(PAGE),每頁的起始地址為二進(jìn)制: * * * 0000 0000 16進(jìn)制:*00H,第一頁 (256個地址),第二頁 (256個地址),00000H,000FFH,00100H,00200H,001FFH,每16個地址為一段(PARA),每段的起始地址為二進(jìn)制: * * * * 0000 16進(jìn)制:*0H,第一段 (16個地址),第二段 (16
37、個地址),*00H,*0FH,*10H,*1FH,*20H,段(節(jié))是默認(rèn)的定位類型。,每2個地址為一個字(WORD),每個字的起始地址為偶數(shù); 最基本的類型是字節(jié)(BYTE),字節(jié)只包含一個地址,可以是內(nèi)存的任何空間。,定位類型表示所定義的段存放在內(nèi)存空間時,段首地址對內(nèi)存空間的要求,即段起始點是放在一頁的起點上(PAGE)還是一段的起點上(PARA)等,如果不定義定位類型,編譯程序?qū)⒛J(rèn)其為段類型,即將段首地址放在從*0H開始的內(nèi)存空間。,BYTE: 表示本段起始單元可以從任一地址開始; WORD: 表示本段起始單元從一個偶地址開始; PARA: 表示本段起始單元從一個段的邊界開始(默認(rèn))
38、; PAGE: 表示本段起始單元從一個頁的邊界開始。,組合類型,組合類型是告訴編譯程序,所定義的段與其他段的關(guān)系,即將該段存放內(nèi)存時,是否將該段與其他段在物理上或邏輯上放在一起。 常常一個匯編程序可以有很多代碼段、數(shù)據(jù)段或堆棧段,這時,就要綜合考慮各段的組合類型。,NONE: 表示本段與其他段不發(fā)生任何關(guān)系,該段有自己的基地址,是默認(rèn)的組合關(guān)系。,PUBLIC:在滿足定位類型的前提下與其他模塊的同名段連接在一起,形成一個新的邏輯段,共用一個段基址。,COMMON: 表示產(chǎn)生一個覆蓋段。連接時,把本段與其他也用COMMON說明的同名段置成相同的起始地址,重疊在一起,共享相同的存儲區(qū),其段長度由最
39、長的段確定。,STACK: 在每個匯編程序中,只能必須有一個堆棧段,連接時,將本段與其他也用STACK說明的同名段連接成一個連續(xù)的大的STACK段,編譯程序自動初始化SS和SP寄存器,使SS的內(nèi)容為該連續(xù)段的首址,SP指向堆棧底部加1的存儲單元。,MEMORY: 表示本段在存儲器中應(yīng)定位在所有其他段的最高地址。,AT: 表示本段從表達(dá)式指定的地址處開始裝入,這樣,在程序中用戶就可以直接定義段地址,這種方式不適用于代碼段。,類別:是用單引號括起來的字符串,連接時,LINK程序把類別相同的段放在連續(xù)的存儲區(qū)中(可以不同名)。類別名可以任意,但一般為CODE , STACK, DATA等,表明該段的
40、類型。,例如:定義堆棧段如下: ST SEGMENT PARA STACK STACK DB 100 DUP(?) ST ENDS,段名,組合類型,類別,定位類型,堆棧長度,段結(jié)束,通過定義,自動初始化了SS和SP。,SS:0000H,SS:0063H,SS:0064H,100字節(jié),SP,連接兩個匯編語言目標(biāo)程序時,它們的數(shù)據(jù)段同名,組合類型為PUBLIC,定位類型為PARA。連接后第一個目標(biāo)程序的數(shù)據(jù)段的起始物理地址是01010H,長度為17AH,則第二個目標(biāo)程序數(shù)據(jù)段的起始物理地址為多少?,01010H + 17AH= 0118AH,因為第二個數(shù)據(jù)段的定位類型為PARA,故應(yīng)從節(jié)(段)的邊
41、界開始,01190H,因為組合類型為PUBLIC,所以共用一個段基址,在內(nèi)存中順序存放。,現(xiàn)有匯編目標(biāo)程序A和B,它們的數(shù)據(jù)段類別名相同,組合類型皆為COMMON,若A程序數(shù)據(jù)段中有字符串ABC,B程序數(shù)據(jù)段中有字符DEF,則執(zhí)行連接操作 LINK A+B 后,產(chǎn)生目標(biāo)程序的數(shù)據(jù)段中偏移地址為0000H單元的內(nèi)容是什么?,因為COMMON類型為覆蓋,所以組合后B覆蓋A,44H,二、過程定義,過程的含義和子程序是一樣的,一個碼段中可以包含一個或許多過程。,碼段名 SEGMENT 過程名1 PROC FAR RET 過程名1 ENDP 過程名2 PROC NEAR RET 過程名2 ENDP 碼段
42、名 ENDS,FAR: 該過程為遠(yuǎn)過程,調(diào)用該過程時為段間調(diào)用,即CS和IP均要重新賦值; NEAR: 該過程為近過程,調(diào)用該過程時為段內(nèi)調(diào)用,只賦值IP。(默認(rèn)),過程名1 PROC FAR RET 過程名1 ENDP,過程名是合法的標(biāo)識符; 一個程序的主過程(起始指令所在的過程)應(yīng)是FAR過程,因為該過程是DOS調(diào)用的。過程中應(yīng)有RET指令,以便返回到調(diào)用處。過程可以嵌套調(diào)用,但不可以嵌套定義。,過程開始,過程結(jié)束,例:延時100ms的子程序,編程如下:,DELAY PROC MOV BL, 10 AGAIN: MOV CX, 2801H WAIT: LOOP WAIT DEC BL JN
43、Z AGAIN RET DELAY ENDP,三、段尋址,雖然定義了段,但由于段名是任意的,編譯程序仍然不知道哪個段是碼段,哪個段是數(shù)據(jù)段等,所以在碼段中要用ASSUME偽指令進(jìn)行說明,告訴編譯器不同的段寄存器分別對應(yīng)哪個段地址。,ASSUME 段寄存器: 段名,段寄存器: 段名,,當(dāng)匯編程序遇到一個段名時,就自動地引用給出的段寄存器對段名加以匯編。,但匯編程序?qū)S和ES的值賦為PSP首址的值,在程序中還要由MOV指令重新對DS賦值。,正確的DS地址,MOV AX, 數(shù)據(jù)段名 MOV DS, AX,四、結(jié)束語句 END,ENDS : 段結(jié)束 ENDP:過程結(jié)束 END: 整個匯編源程序結(jié)束(
44、不配對使用) 匯編程序在編譯時遇到END,便得知源程序已經(jīng)結(jié)束。,END 表達(dá)式,表達(dá)式為可執(zhí)行程序運(yùn)行的起始位置,一般為主過程名。,五、ORG,ORG 表達(dá)式,指定了在其后的指令或數(shù)據(jù)存放的偏移地址。,ORG 0100H MOV AX, 0,表明該指令放在碼段,其偏移地址為0100H。碼段的首地址從CS:0000H處開始。,六、完整結(jié)構(gòu),DATA SEGMENT X DB 3 Y DB 5 DATA ENDS STACK SEGMENT STACK STACK DB 100 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE, DS: DATA, SS
45、:STACK BEGIN PROC FAR PUSH DS XOR AX, AX PUSH AX MOV AX, DATA MOV DS, AX RET BEGIN ENDP CODE ENDS END BEGIN,將PSP首址壓棧,以便返回DOS,設(shè)置DS段寄存器內(nèi)容,源程序結(jié)束,第一條指令的地址,分配段寄存器,主過程名,數(shù)據(jù)段,堆棧段,返回DOS,段定義偽指令的用途是在匯編語言源程序中定義邏輯段,常用的段定義偽指令有SEGMENT/ENDS和ASSUME等。 1. SEGMENT/ENDS偽指令 段名 SEGMENT 定位類型組合類型類別 段名 ENDS 定位類型。定位類型給出一個段在內(nèi)存
46、中起始的物理地址所具有的特性,即起始邊界地址的要求。有:PAGE(頁類型)、PARA(節(jié)類型)、WORD(字類型)、BYTE(字節(jié)類型)四種類型。其中PARA為默認(rèn)值。,三、段定義偽指令, 組合類型。組合類型在多模塊程序設(shè)計中表示該段和其它同名段間的組合連接方法。組合類型有PUBLIC、COMMON、AT、MEMORY、STACK等。 類別。類別名是程序員任選的一個字符串,使用時必須用單引號括起來。其作用是在連接時決定各邏輯段的裝入順序。 2. ASSUME偽指令 用來說明段和段寄存器關(guān)系的偽指令,即告訴匯編程序在指令執(zhí)行期間內(nèi)存的哪一段是數(shù)據(jù)段,哪一段是堆棧段,哪一段是代碼段,格式如下: A
47、SSUME 段寄存器:段名,段寄存器:段名, 注意:段寄存器在CS、DS、ES、SS中選擇。,3. ORG偽指令 用來指示其后的程序段或數(shù)據(jù)塊存放的起始地址偏移量。格式如下: ORG 數(shù)值表達(dá)式 例如: ORG 0100H 4.模塊定義偽操作NAME/END 用于定義一個匯編語言源程序模塊,該程序進(jìn)行匯編時,匯編到END結(jié)束。格式如下: NAME 模塊名 模塊語句 END 表達(dá)式 注意: (1)模塊名由程序員命名,以字母開頭,最多可有6個字符,可缺省,缺省時以源程序的文件名(.ASM文件)為模塊名。 (2)表達(dá)式為模塊執(zhí)行時的起始地址(標(biāo)號表示)。,例如:一個源程序的結(jié)構(gòu)框架如下。 NAME
48、PROG ;模塊命名為PROG,可缺省 DATA SEGMENT ;數(shù)據(jù)段定義 . DATA ENDS STACK SEGMENT ;堆棧段定義 . STACK ENDS CODE SEGMENT ;代碼段定義 . START: MOV AX,DATA . CODE ENDS END START ;程序結(jié)束,過程定義偽指令用來定義一個過程,即定義一個子程序。格式如下: 過程名 PROC NEAR/FAR RET 過程名 ENDP 其中,PROC偽指令定義一個過程的開始,賦予過程一個名字,并指出該過程的類型屬性為NEAR或FAR,如果沒有特別指明類型,則認(rèn)為過程的類型是NEAR;偽指令ENDP標(biāo)
49、志過程的結(jié)束。 上述兩個偽指令語句前面的過程名必須一致。,四、過程定義偽指令,當(dāng)一個程序段被定義為過程后,程序中其他地方就可以用CALL語句調(diào)用這個過程。調(diào)用一個過程的格式如下: CALL 過程名 過程名實質(zhì)上是過程入口的符號地址,與標(biāo)號一樣,也有3種屬性:段、偏移量和類型。過程的類型屬性可以是NEAR或FAR。 一般來說,被定義為過程的程序段中應(yīng)該有返回語句RET,但不一定是最后一條語句,也可以有不止一條RET語句。執(zhí)行RET語句后,控制返回到原來調(diào)用語句的下一條語句。 過程的定義和調(diào)用均可嵌套。例如:,NAME1 PROC FAR CALL NAME2 RET NAME2 PROC NEA
50、R RET NANE2 ENDP NAME1 ENDP 上面過程中,NAME1的定義中包含著另一個過程N(yùn)AME2的定義。NAME1本身是一個可以被調(diào)用的過程,而它也可以調(diào)用其他過程。,MY_CODE SEGMENT UP_COUNT PROC NEAR ADD CX,1 RET UP_COUNT ENDP START: . CALL UP_COUNT . CALL UP_COUNT . MY_CODE ENDS END START,SEGA SEGMENT . SUBT PROC FAR . RET SUBT ENDP . CALL FAR PTR SUBT . SEGA ENDS SEGB
51、SEGMENT . CALL FAR PTR SUBT . SEGB ENDS,保護(hù)現(xiàn)場: 通常,主程序和過程的設(shè)計是分開的,因而它們所使用的寄存器往往會發(fā)生沖突。為避免沖突,應(yīng)在進(jìn)入過程時,將該過程所用到的寄存器內(nèi)容保護(hù)起來,稱為保護(hù)現(xiàn)場。 恢復(fù)現(xiàn)場: 從過程返回主程序前,將原先保護(hù)起來的寄存器的內(nèi)容恢復(fù),稱為恢復(fù)現(xiàn)場。 保護(hù)現(xiàn)場和恢復(fù)現(xiàn)場通常分別用堆棧壓入指令和彈出指令來實現(xiàn)。如下所示:,SUBPR PROC FAR PUSH AX PUSH BX PUSH CX PUSH DX POP DX POP CX POP BX POP AX RET SUBPR ENDP,PUSH AX PUSH
52、 BX PUSH CX PUSH DX CALL SUBP POP DX POP CX POP BX POP AX,一個子程序調(diào)用另一個子程序稱為子程序的嵌套調(diào)用。由于調(diào)用子程序時,斷點地址保存在堆棧中,因此只要有足夠的堆棧空間,嵌套的層次(也稱深度)是不受限制的。如下圖所示:,五、宏指令及其使用,宏指令是源程序中具有獨立功能的一段程序代碼。在匯編語言中,如果在源程序中需要多次使用同一個程序段,可以將這個程序段定義為一個宏指令,每次需要時,即可簡單地用宏指令名來進(jìn)行宏調(diào)用,從而避免了重復(fù)書寫,使源程序更加簡潔、易讀。 宏定義由MASM宏匯編程序提供的偽指令實現(xiàn)。,1.宏定義 宏指令名 MACR
53、O 形式參數(shù) ENDM 2. 宏調(diào)用 宏指令名 實際參數(shù) 只要在源程序中寫上已定義過的宏指令名就算是調(diào)用該宏指令了。 3. 宏展開, ,宏體,具有宏調(diào)用的源程序被匯編時,每個宏調(diào)用將被MASM進(jìn)行宏展開。 宏展開實際上是用宏定義時設(shè)計的宏體去代替相應(yīng)的宏指令,并用實際參數(shù)一一取代形式參數(shù)。 由此可見,使用宏的過程共有三步:首先進(jìn)行宏定義;然后可以進(jìn)行宏調(diào)用;最后,匯編時由MASM進(jìn)行宏展開。,例 若源程序中多處需要將AL和CL寄存器中的兩位壓縮型的BCD數(shù)相加,并將和送回CL寄存器,則可以定義宏指令,然后在需要的地方進(jìn)行調(diào)用。 DECADD MACRO ADD AL,CL DAA MOV CL
54、,AL ENDM 顯而易見,這是一個沒有形式參數(shù)的宏定義。,如果對分別存放在任意8位寄存器或存儲單元中的兩個壓縮型的BCD數(shù)進(jìn)行加法運(yùn)算,則可將上例宏定義改寫為 DECADD1 MACRO OPR1,OPR2 ;帶參數(shù)的宏定義 MOV AL,OPR1 ADD AL,OPR2 DAA MOV OPR1,AL ENDM 這是一個帶有兩個形式參數(shù)的宏定義。宏指令為 DECADD1。宏調(diào)用如下:,DECADD1 DL, BUFFER DECADD1 AREA1, AREA2 在匯編時進(jìn)行宏展開,得到以下指令: DECADD1 DL, BUFFER + MOV AL, DL + ADD AL, BUFF
55、ER + DAA + MOV DL, AL DECADD1 AREA1, AREA2 + MOV AL, AREA1 + ADD AL, AREA2 + DAA + MOV AREA1, AL,4.宏指令與子程序(過程) 在匯編語言程序設(shè)計中,宏指令和子程序都給設(shè)計者提供了很大方便。它們都是可被程序多次調(diào)用的程序段,并且調(diào)用前必須由設(shè)計者根據(jù)需要按一定格式進(jìn)行定義。然而,宏指令和子程序由于定義方法和其格式不同,因此,使用中有許多不同之處,主要是空間和時間的差異。,子程序由CALL指令調(diào)用,由RET指令返回,匯編后子程序的機(jī)器碼只占有一個程序段,不管調(diào)用多少次均如此,較為節(jié)約內(nèi)存。宏指令在每次宏
56、調(diào)用處宏展開時,宏體都要占一個程序段,調(diào)用次數(shù)愈多,占用內(nèi)存愈多。因此從內(nèi)存空間開銷來說,子程序優(yōu)于宏指令。,從程序的執(zhí)行時間來分析,每調(diào)用一次子程序都要保護(hù)和恢復(fù)返回地址(斷點)及寄存器內(nèi)容(現(xiàn)場)等,要消耗較多的時間。宏指令調(diào)用時不需要這個過程,執(zhí)行時間較短。因此,從執(zhí)行時間來分析,宏指令優(yōu)于子程序。 綜上所述,當(dāng)某一個需要多次訪問的程序段較長,訪問次數(shù)又不是太多時,選用子程序結(jié)構(gòu)較好。當(dāng)某一需多次訪問的程序段較短,訪問次數(shù)又很頻繁時,選用宏指令結(jié)構(gòu)要更好些。,DSEG SEGMENT STRING1 DB 1,2,3,4,5 DSEG ENDS ESEG SEGMENT STRING2
57、DB 5 DUP(?) ESEG ENDS SSEG SEGMENT STACK STACK DW 10 DUP(?) TOP LABEL WORD SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG ASSUME ES:ESEG,SS:SSEG START: MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX MOV AX,SSEG MOV SS,AX,MOV SP,OFFSET TOP LEA SI,STRING1 LEA DI,STRING2 MOV CX,5 CLD REP MOVSB MOV AH,4CH INT 21H CSEG ENDS END START,第五節(jié) DOS功能調(diào)用,操作系統(tǒng)管理計算機(jī),為用戶提供與CPU對話的接
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年建筑工程有限公司裝飾裝修承包合同示例
- 2025超市租賃合同協(xié)議書范文
- 江蘇省無錫市2024-2025學(xué)年七年級下學(xué)期3月月考語文試題(含答案)
- 推動鄉(xiāng)村全面振興的創(chuàng)新策略與實踐路徑
- 物業(yè)項目經(jīng)理廉政管理
- 廣州衛(wèi)生職業(yè)技術(shù)學(xué)院《三位角色綁定及動畫》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣西生態(tài)工程職業(yè)技術(shù)學(xué)院《VS測試與可測性設(shè)計》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西職業(yè)技術(shù)學(xué)院《人力資源綜合實訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 南陽理工學(xué)院《金融統(tǒng)計學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 2024-2025學(xué)年阜陽市重點中學(xué)高考百校聯(lián)考語文試題試卷含解析
- 智慧醫(yī)聯(lián)體建設(shè)項目可行性研究報告
- 中國主要水域資源分布及開發(fā)利用
- 《中電聯(lián)團(tuán)體標(biāo)準(zhǔn)-220kV變電站并聯(lián)直流電源系統(tǒng)技術(shù)規(guī)范》
- 2024年鄭州黃河護(hù)理職業(yè)學(xué)院單招職業(yè)技能測試題庫及答案解析文檔版
- 非機(jī)動車交通管理及規(guī)劃研究
- 勞務(wù)派遣及醫(yī)院護(hù)工實施預(yù)案
- 華電行測題庫及答案2024
- 產(chǎn)后病(中醫(yī)婦科學(xué))
- 蘇州市2023-2024學(xué)年高一上學(xué)期期末考試數(shù)學(xué)試題(原卷版)
- 社區(qū)獲得性肺炎教學(xué)演示課件
- 農(nóng)村藍(lán)莓樹補(bǔ)償標(biāo)準(zhǔn)
評論
0/150
提交評論