版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第4章8086匯編語言程序設(shè)計(jì)本章主要內(nèi)容匯編語言基礎(chǔ)知識(shí)1匯編語言的偽指令2系統(tǒng)功能調(diào)用34.1匯編語言基礎(chǔ)知識(shí)4.1.1概述4.1.2匯編源程序的結(jié)構(gòu)4.1.3匯編語言的語句4.1.4匯編語言的數(shù)據(jù)4.1.5匯編語言的操作符與表達(dá)式
4.1.1概述匯編語言(AssemblyLanguage)是介于機(jī)器語言和高級(jí)語言之間的計(jì)算機(jī)語言,是一種用符號(hào)表示的面向機(jī)器的程序設(shè)計(jì)語言。它比機(jī)器語言易于閱讀、編寫和修改,又比高級(jí)語言運(yùn)行速度快,能充分利用計(jì)算機(jī)的硬件資源,占用內(nèi)存空間少。匯編語言常用于計(jì)算機(jī)控制系統(tǒng)的開發(fā)和高級(jí)語言編譯程序的編制等應(yīng)用場(chǎng)合。采用不同CPU的計(jì)算機(jī)有不同的匯編語言。用匯編語言編寫的程序稱為匯編語言程序或源程序(SourceProgram)。匯編語言源程序不能直接在計(jì)算機(jī)上運(yùn)行,需要將它翻譯成機(jī)器語言程序(也稱目標(biāo)代碼程序,ObjectProgram)。這個(gè)翻譯過程為匯編。完成匯編任務(wù)的程序(軟件)稱為匯編程序。匯編程序完成以下幾個(gè)任務(wù):將匯編語言源程序翻譯成目標(biāo)代碼程序;按指令要求自動(dòng)分配存儲(chǔ)區(qū)(包括程序區(qū)、數(shù)據(jù)區(qū)等);自動(dòng)把源程序中以各種進(jìn)制表示的數(shù)據(jù)都轉(zhuǎn)換成二進(jìn)制形式的數(shù)據(jù);計(jì)算表達(dá)式的值;對(duì)匯編語言源程序進(jìn)行語法檢查,并給出語法出錯(cuò)的提示信息。4.1.2匯編源程序的結(jié)構(gòu)匯編語言程序由若干個(gè)段組成。按照各段功能的不同,分別有代碼段、數(shù)據(jù)段、堆棧段和附加段。其中代碼段是必須要定義的。【例4-1】
編寫匯編程序,計(jì)算2010H+2011H,并把和存入RESULT單元。DATASEGMENT ;定義數(shù)據(jù)段XDW2010H ;定義被加數(shù)YDW2011H ;定義加數(shù)RESULTDW? ;分配和數(shù)存放單元DATAENDS ;數(shù)據(jù)段定義結(jié)束CODESEGMENTMAINPROCFARASSUMECS:CODE,DS:DATASTART:PUSHDSMOVAX,0PUSHAXMOVAX,DATAMOVDS,AXMOVAX,XADDAX,YMOVRESULT,AXRETMAINENDPCODEENDSENDSTART匯編語言源程序的特點(diǎn)采用段式結(jié)構(gòu)匯編源程序通常包含若干個(gè)段,上例的程序有數(shù)據(jù)段和代碼段這兩個(gè)段,DATA、CODE分別為兩個(gè)段的名字。每一段有明顯的起始語句SEGMENT與結(jié)束語句ENDS,這些語句稱為“段定義”語句。每一段由若干匯編語句構(gòu)成匯編源程序每一段包含若干匯編語句。匯編語句的主體是匯編指令。一條語句寫一行,為了清晰,書寫語句時(shí),注意語句的各部分要盡量對(duì)齊。匯編語言源程序的特點(diǎn)(續(xù))每個(gè)匯編源程序需要一個(gè)啟動(dòng)標(biāo)號(hào)匯編語言源程序需要一個(gè)啟動(dòng)標(biāo)號(hào)作為程序開始執(zhí)行時(shí)目標(biāo)代碼的入口地址。啟動(dòng)標(biāo)號(hào)可以按照匯編語言的標(biāo)號(hào)命名規(guī)則由程序員自己定義。常用的啟動(dòng)標(biāo)號(hào)有START、BEGIN等。加入適當(dāng)注釋,可以提高程序的可讀性為了提高程序的可讀性,可以在匯編語句后以分號(hào)“;”為起始標(biāo)志,加入注釋。匯編語言和操作系統(tǒng)(DOS)的接口計(jì)算機(jī)一旦啟動(dòng)成功,由DOS掌握CPU的控制權(quán)。應(yīng)用程序只是作為DOS的子程序,應(yīng)用程序執(zhí)行完,必須返回DOS。上述程序的第7行、第9行~第11行、第17行和第18行就是為了完成此功能而設(shè)計(jì)的。(1)返回DOS的標(biāo)準(zhǔn)方法例4-1采用了此方法。具體程序設(shè)計(jì)方法如下:①將應(yīng)用程序的主程序定義成一個(gè)FAR過程(見上述程序的第7行和第18行),該過程的最后一條指令為RET(見上述程序的第17行);②在代碼段的主程序的開始部分用3條指令,把INT20H指令的段地址(CS=DS=ES)及偏移地址(0)壓入堆棧(見上述程序的第9行~第11行)。這樣,程序執(zhí)行到主程序的最后一條指令RET時(shí),由于過程具有FAR屬性,故堆棧內(nèi)的兩個(gè)字分別彈出到IP及CS,便執(zhí)行INT20H指令,返回到DOS。(2)用DOS功能調(diào)用4CH返回在用戶程序中不定義過程段,刪除上述程序的第7行、第9行~第11行和第18行指令,把原第17行的RET指令換成下面兩條指令:MOVAH,4CHINT21HINT21H指令是DOS向用戶提供服務(wù)程序的窗口。4.1.3匯編語言的語句匯編語言的語句可以分為:指令語句偽指令語句宏指令語句1.指令語句指令語句是可執(zhí)行語句,匯編后將產(chǎn)生目標(biāo)代碼,CPU根據(jù)這些目標(biāo)代碼執(zhí)行并完成特定操作。每一條指令語句表達(dá)了計(jì)算機(jī)具有的一個(gè)基本能力,這種能力在目標(biāo)程序執(zhí)行時(shí)反映出來。指令語句的格式為:[標(biāo)號(hào):]指令助記符[操作數(shù)][;注釋]2.偽指令語句偽指令語句,也稱指示性語句,是不可執(zhí)行語句,匯編后不產(chǎn)生目標(biāo)代碼,它僅僅在匯編過程中告訴匯編程序如何匯編源程序。偽指令語句可以告訴匯編程序哪些語句是屬于一個(gè)段、是什么類型的段、各段存入內(nèi)存應(yīng)如何組裝、給變量分配多少存儲(chǔ)單元、給數(shù)字或表達(dá)式命名等。偽指令語句的功能是由匯編程序匯編源程序時(shí)完成的,不是由CPU執(zhí)行目標(biāo)代碼時(shí)實(shí)現(xiàn)的。偽指令語句的格式為:[符號(hào)名]偽指令助記符[操作數(shù)][;注釋]3.宏指令語句宏是一個(gè)以宏名定義的指令序列。一旦把某程序段定義成宏,則可以用宏名代替那段程序。在匯編時(shí),要對(duì)宏進(jìn)行宏展開,即把以宏名表示的地方替換為該宏對(duì)應(yīng)的指令序列的目標(biāo)代碼。宏指令可以看成指令語句的擴(kuò)展,相當(dāng)于多條指令語句的集合。宏指令格式為:[宏名]宏指令助記符[操作數(shù)][;注釋]4.匯編語句格式說明(1)關(guān)于格式的幾個(gè)組成部分匯編語句的格式中帶中括號(hào)的部分是可選項(xiàng)。各部分之間必須用空格(SPACE)或水平制表符(TAB)隔開。操作數(shù)項(xiàng)由一個(gè)或多個(gè)表達(dá)式組成,它為執(zhí)行語句所要求的操作提供需要的信息。4.匯編語句格式說明(續(xù))注釋項(xiàng)用來說明程序或語句的功能,注釋項(xiàng)在匯編時(shí)不會(huì)產(chǎn)生目標(biāo)代碼。注釋項(xiàng)可以跟在語句的后面。分號(hào)“;”是注釋項(xiàng)的開始。當(dāng)分號(hào)“;”作為一行的第一個(gè)字符時(shí),表示注釋占據(jù)一整行,常用來說明下面一段程序的功能。4.匯編語句格式說明(續(xù))(2)關(guān)于標(biāo)號(hào)與符號(hào)名標(biāo)號(hào)與符號(hào)名都稱為名字。標(biāo)號(hào)是可選項(xiàng),一般設(shè)置在程序的入口處或程序跳轉(zhuǎn)點(diǎn)處,表示一條指令的符號(hào)地址,在代碼段中定義,后面必須跟上冒號(hào)“:”。符號(hào)名也是一個(gè)可選項(xiàng),可以是常量、變量、段名、過程名、宏名,后面不能跟冒號(hào)。4.匯編語句格式說明(續(xù))(3)名字的命名規(guī)則①合法符號(hào):字母(不分大小寫)、數(shù)字及特殊符號(hào)(“?”,“@”,“_”,“$”,“?
”)。②名字可以用除數(shù)字外所有的合法符號(hào)開頭。但如果是用到符號(hào)“·
”,那么這個(gè)符號(hào)必須是第一個(gè)字符。③名字的有效長度不超過31個(gè)英文字符。④不能把保留字(如CPU的寄存器名、指令助記符等)用作名字。4.匯編語句格式說明(續(xù))(4)注釋項(xiàng)注釋項(xiàng)用來說明一段程序、一條或幾條指令的功能,此項(xiàng)是可有可無的。但是,對(duì)于匯編語言源程序來說,注釋項(xiàng)可以使程序易于被讀懂;而對(duì)編寫程序的人來講,注釋項(xiàng)可以是一種“備忘錄”。注釋編寫舉例例如,一般在循環(huán)程序的開始都有初始化程序,置有關(guān)工作單元的初值:MOVCX,100 ;將100送入CXMOVSI,0100H ;將0100H送入SIMOVDI,0200H ;將0200H送入DIMOVCX,100 ;循環(huán)計(jì)數(shù)器CX置初值MOVSI,0100H ;源數(shù)據(jù)區(qū)指針SI置初值MOVDI,0200H ;目標(biāo)數(shù)據(jù)區(qū)指針DI置初值4.1.4匯編語言的數(shù)據(jù)數(shù)據(jù)是匯編語言語句的重要組成部分。匯編語言能識(shí)別的數(shù)據(jù)有:常量變量標(biāo)號(hào)1.常量常量是沒有任何屬性的純數(shù)值數(shù)據(jù),它的值在匯編期間和程序運(yùn)行過程中不能改變。匯編語言程序中的常量有:數(shù)值常量字符常量符號(hào)常量(1)數(shù)值常量在匯編程序中,數(shù)值常量可以用不同進(jìn)制形式表示。二進(jìn)制常量表示為以字母B(或b)結(jié)尾的由數(shù)字0和1組成的序列,例如,01100101B。八進(jìn)制常量表示為以字母Q(或q)或O(或o)結(jié)尾的由數(shù)字0~7組成的序列,例如,145Q。(1)數(shù)值常量(續(xù))十六進(jìn)制常量表示為以字母H(或h)結(jié)尾的由數(shù)字0~9、字母A~F(或a~f)組成的序列,例如,653AH。十進(jìn)制常量表示為以字母D(或d)結(jié)尾的由數(shù)字0~9組成的序列。匯編語句中的數(shù)據(jù)默認(rèn)采用十進(jìn)制表示形式,所以,采用十進(jìn)制數(shù)時(shí),也可省略結(jié)尾的字母。例如,101D或100。1.常量(續(xù))(2)字符常量字符常量是用單引號(hào)括起來的單個(gè)字符,如'a'、'1'等。字符常量在操作中體現(xiàn)出的值是其ASCII碼值。1.常量(續(xù))(3)符號(hào)常量符號(hào)常量是用名字來標(biāo)識(shí)的常量。以符號(hào)常量代替常量,可以增加程序的可讀性及通用性。2.變量變量是存儲(chǔ)單元的符號(hào)地址,這類存儲(chǔ)單元的內(nèi)容可以在程序運(yùn)行期間被修改。變量以變量名的形式出現(xiàn)在程序中。同一個(gè)匯編程序中,變量只能定義一次。變量具有以下3種屬性。段屬性:變量所在段的段地址。偏移屬性:變量所在段的段內(nèi)偏移地址。類型屬性:變量占用存儲(chǔ)單元的字節(jié)數(shù),如表5-1所示。3.標(biāo)號(hào)標(biāo)號(hào)是指令的符號(hào)地址,可用作控制轉(zhuǎn)移指令的操作數(shù)。標(biāo)號(hào)具有以下3種屬性。段屬性:標(biāo)號(hào)所在段的段地址。偏移屬性:標(biāo)號(hào)所在段的段內(nèi)偏移地址。類型屬性:也叫距離屬性,表示標(biāo)號(hào)可作為段內(nèi)或段間的轉(zhuǎn)移特性變量的類型值變量類型類型值占用存儲(chǔ)單元的字節(jié)數(shù)說明BYTE11字節(jié)型WORD22字型DWORD44雙字型QWORD88四字型TBYTE1010五字型標(biāo)號(hào)NEAR-1近標(biāo)號(hào)(段內(nèi)調(diào)用)FAR-2遠(yuǎn)標(biāo)號(hào)(段間調(diào)用)4.1.5匯編語言的操作符與表達(dá)式操作項(xiàng)是匯編語句中的一個(gè)重要組成部分,它可以由常量(常數(shù))、寄存器、標(biāo)號(hào)、變量或表達(dá)式組成。表達(dá)式是常量、寄存器、標(biāo)號(hào)、變量與一些操作符相組合的序列,分為數(shù)值表達(dá)式和地址表達(dá)式兩種。匯編程序在匯編時(shí)按照一定的規(guī)則對(duì)表達(dá)式進(jìn)行計(jì)算后可以得到一個(gè)數(shù)值或地址值。1.算術(shù)操作符算術(shù)操作符有:加(+)、減(-)、乘(*)、除(/)和取余(MOD)。參加運(yùn)算的數(shù)和運(yùn)算的結(jié)果都是整數(shù)。除法運(yùn)算的結(jié)果是商的整數(shù)部分。取余操作的結(jié)果是兩個(gè)整數(shù)相除后得到的余數(shù)。算術(shù)操作符可以用于數(shù)值表達(dá)式或地址表達(dá)式。當(dāng)它用于地址表達(dá)式時(shí),僅當(dāng)其結(jié)果有明確的物理意義時(shí),才是有效的結(jié)果。例如,將兩個(gè)地址相乘或相除都是沒有意義的。加、減操作可以用于地址表達(dá)式,但也要注意其物理意義。例如,將兩個(gè)地址相加或相減也是沒有意義的。有意義的用法是地址值與一個(gè)偏移量相加或相減,可以得到一個(gè)新的地址值。例如:MOVAX,2+3*5 ;匯編后,表達(dá)式2+3*5被數(shù)值17代替MOVBL,NUM+1;表達(dá)式NUM+1是匯編時(shí)由匯編程序計(jì)算的,不是由CPU在執(zhí)行該指令時(shí)才計(jì)算的。匯編后得到的目標(biāo)程序中,表達(dá)式被它的值代替。2.邏輯操作符邏輯操作符有:與(AND)、或(OR)、非(NOT)和異或(XOR)。邏輯操作按位進(jìn)行,只適用于數(shù)值表達(dá)式。邏輯操作符指定匯編程序?qū)Σ僮鞣昂蟮膬蓚€(gè)數(shù)值或數(shù)值表達(dá)式進(jìn)行指定的邏輯操作。要注意區(qū)分邏輯操作符與邏輯指令。例如:
ANDDX,PORTAND0FH3.移位操作符移位操作符有兩個(gè):SHL和SHR,按位操作,只適用于數(shù)值表達(dá)式。移位操作符的用法如下:數(shù)值表達(dá)式SHL移動(dòng)位數(shù)n數(shù)值表達(dá)式SHR移動(dòng)位數(shù)n匯編程序?qū)褦?shù)字表達(dá)式的值左移(SHL)或右移(SHR)n位。當(dāng)n>15時(shí),結(jié)果為0。4.關(guān)系操作符關(guān)系操作符用于數(shù)的比較,有相等(EQ)、不相等(NE)、小于(LT)、大于(GT)、小于等于(LE)和大于等于(GE)6種。關(guān)系操作符兩邊的操作數(shù)必須是兩個(gè)數(shù)值或同一段中兩個(gè)存儲(chǔ)單元地址。關(guān)系操作的運(yùn)算結(jié)果是邏輯值,當(dāng)結(jié)果為真時(shí),表示為0FFFFH;當(dāng)結(jié)果為假時(shí),則表示為0。例如:MOVAX,4EQ3該指令匯編后的結(jié)果為:MOVAX,05.數(shù)值回送操作符數(shù)值回送操作符的運(yùn)算對(duì)象必須是存儲(chǔ)器操作數(shù),即變量或標(biāo)號(hào)。操作符加在運(yùn)算對(duì)象的前面,返回一個(gè)數(shù)值。操作符功能用法SEG返回變量或標(biāo)號(hào)的段地址SEG變量或標(biāo)號(hào)OFFSET返回變量或標(biāo)號(hào)的偏移地址OFFSET變量或標(biāo)號(hào)TYPE返回變量的或標(biāo)號(hào)的類型值(見表5-1)TYPE變量或標(biāo)號(hào)LENGTH返回變量所定義的元素的個(gè)數(shù)LENGTH變量或標(biāo)號(hào)SIZE返回變量所占的字節(jié)數(shù)SIZE變量或標(biāo)號(hào)6.屬性操作符屬性操作符用來建立或改變已定義變量、內(nèi)存操作數(shù)或標(biāo)號(hào)的類型屬性。屬性操作符有:PTR段操作符THISSHORTHIGHLOW等。(1)PTR格式:類型PTR變量/標(biāo)號(hào)返回值:具有規(guī)定類型屬性的變量或標(biāo)號(hào)。典型應(yīng)用:①重新指定變量類型例如,有如下數(shù)據(jù)定義:
BUFWDW1234H,5678H則下列指令合法:MOVAX,BUFWMOVAL,BYTEPTRBUFW;臨時(shí)改變BUFW的字屬性為字節(jié)屬性PTR典型應(yīng)用(續(xù))②指定內(nèi)存操作數(shù)的類型在寄存器間接尋址、寄存器相對(duì)尋址、基址變址尋址或相對(duì)基址變址尋址等內(nèi)存尋址方式中,往往很難判斷出操作數(shù)的類型屬性,例如:INC[BX]。此時(shí),匯編將指示出錯(cuò),為了避免出錯(cuò),應(yīng)對(duì)操作數(shù)類型加以說明,如下所示:INCBYTEPTR[BX] ;字節(jié)屬性INCWORDPTR[BX][SI] ;字屬性PTR典型應(yīng)用(續(xù))③與EQU一起定義一個(gè)新的變量格式:變量或標(biāo)號(hào)EQU類型PTR說明:新變量或新標(biāo)號(hào)的段屬性、偏移屬性與前一個(gè)已定義的變量或標(biāo)號(hào)段屬性、偏移屬性相同。例如:BUFWDW1234H,5678H BUFBEQUBYTEPTRBUFW ;BUFB的類型屬性為字節(jié) ;其他屬性與BUFW一樣進(jìn)行字存取時(shí),可用變量BUFW,如:MOVAX,BUFW進(jìn)行字節(jié)存取時(shí),可用變量BUFB,如:MOVAL,BUFB(2)段操作符用來指定一個(gè)標(biāo)號(hào)、變量或地址表達(dá)式的段屬性。例如:MOVAX,ES:[BX] ;指定數(shù)據(jù)在ES段(3)THIS格式:THIS類型可以像PTR一樣建立一個(gè)指定類型的地址操作數(shù),該操作數(shù)的段地址和偏移地址與下一個(gè)存儲(chǔ)單元地址相同。例如:BUFBEQUTHISBYTEBUFWDW1234H,5678H此時(shí)BUFB的偏移地址和BUFW完全相同,但它是字節(jié)類型的;而BUFW則是字類型的。(4)SHORT格式:SHORT標(biāo)號(hào)返回值:偏移量在-128~+127范圍內(nèi)的標(biāo)號(hào)。用于JMP指令。即:JMPSHORT標(biāo)號(hào),指明是短轉(zhuǎn)移。(5)字節(jié)分離操作符HIGH、LOW格式:HIGH表達(dá)式LOW表達(dá)式返回值:表達(dá)式值的高字節(jié)或低字節(jié)。例如:CONSTEQU0ABCDHMOVAH,HIGHCONST ;AH=0ABHMOVCL,LOWCONST ;CL=0CDH優(yōu)先級(jí)操作符高低(),[]LENGTH,SIZE,WIDTH,MASKSEG、OFFSET、TYPE、PTR、THIS、段操作符LOW、HIGH*、/、MOD、SHR、SHL+、-EQ、NE、LT、GT、LT、LE、GENOTANDOR、XORSHORT4.2匯編語言的偽指令偽指令從表示形式及其在語句中所處的位置,與CPU指令相似,但二者有著重要的區(qū)別。首先,偽指令不像機(jī)器指令那樣是在程序運(yùn)行期間由CPU來執(zhí)行的,它是在匯編程序?qū)υ闯绦騾R編期間由匯編程序處理的操作;其次,匯編以后,每條CPU指令產(chǎn)生一一對(duì)應(yīng)的目標(biāo)代碼,而偽指令則不產(chǎn)生與之相應(yīng)的目標(biāo)代碼。4.2.1變量定義偽指令變量定義偽指令用來為數(shù)據(jù)分配存儲(chǔ)單元,建立變量與存儲(chǔ)單元之間的聯(lián)系。語句格式為:[變量名]數(shù)據(jù)定義偽指令操作數(shù)1[,操作數(shù)2…]變量定義偽指令有:DB、DW、DD、DQ、DT,分別用來定義類型屬性為字節(jié)(DB)、字(DW)、雙字(DD)、4字(DQ)、5字(DT)的變量。變量定義偽指令的操作數(shù)可以是:數(shù)字常量,允許以十進(jìn)制、八進(jìn)制、十六進(jìn)制、二進(jìn)制等形式表示,默認(rèn)形式是十進(jìn)制;字符常量,用單引號(hào)括起來,被存儲(chǔ)的是該字符的ASCII碼;符號(hào)常量,必須是預(yù)先已定義的符號(hào);符號(hào)“?”,表示預(yù)留空間,內(nèi)容不定。DUP,表示內(nèi)容重復(fù)的數(shù)據(jù)。DUP用法的具體形式為:次數(shù)DUP(被重復(fù)內(nèi)容)例如,數(shù)據(jù)定義如下,DATA_BDB10,'A'DATA_WDW1234HDATA_SDB'1234',2DUP(1,2DUP(0))數(shù)據(jù)定義存儲(chǔ)區(qū)示意DB定義的數(shù)據(jù),每個(gè)數(shù)據(jù)元素占據(jù)1個(gè)存儲(chǔ)單元;DW定義的數(shù)據(jù),每個(gè)數(shù)據(jù)元素占據(jù)2個(gè)存儲(chǔ)單元;字?jǐn)?shù)據(jù)存儲(chǔ)時(shí),低字節(jié)存儲(chǔ)在低地址單元中,高字節(jié)存儲(chǔ)在高地址單元中;字符在內(nèi)存中存放的是它的ASCII碼,“A”的ASCII碼為41H;DUP可以嵌套使用。符號(hào)地址具有以下關(guān)系:DATA_W=DATA_B+2DATA_S=DATA_W+2=DATA_B+4
4.2.2符號(hào)定義偽指令符號(hào)包括匯編語言的變量名、標(biāo)號(hào)名、過程名、寄存器名及指令助記符等。常用符號(hào)定義偽指令有:EQU“=”LABEL1.EQU偽指令格式:名字EQU表達(dá)式表達(dá)式可以是一個(gè)常數(shù)、已定義的符號(hào)、數(shù)值表達(dá)式或地址表達(dá)式。功能:給表達(dá)式賦予一個(gè)名字。定義后,可用名字代替表達(dá)式。在同一源程序中,一個(gè)名字只能用EQU定義一次。例如:PIXEQU64*1024;名字PIX代表數(shù)值表達(dá)式的值A(chǔ)EQU7BEQUA-22.等號(hào)(=)偽指令格式:名字=表達(dá)式功能:與EQU基本相同,區(qū)別是它可以對(duì)同一個(gè)名字重新定義。例如:COUNT=10MOVAL,COUNT…COUNT=5…3.LABEL偽指令格式:變量/標(biāo)號(hào)LABEL類型變量的類型有:BYTE、WORD、DWORD、DQ、DT標(biāo)號(hào)的類型有:NEAR、FAR。功能:定義變量或標(biāo)號(hào)的類型,而變量或標(biāo)號(hào)的段屬性和偏移屬性由該語句所處的位置確定。LABEL使用舉例例如,利用LABEL使同一個(gè)數(shù)據(jù)區(qū)有一個(gè)以上的類型及相關(guān)屬性。AREAWLABELWORD ;AREAW與AREAB指向相同的數(shù)據(jù)區(qū),;AREAW類型為字,AREAB類型為字節(jié)AREABDB100DUP(?)
…
MOVAX,2011HMOVAREAW,AX ;(AREAW)=2011H
…MOVBL,AREAB ;BL=11H4.2.3段定義偽指令匯編源程序由段組成,每段大小不超過64KB,不同的段存放不同類型的數(shù)據(jù)。段定義偽指令用于匯編源程序中段的定義。相關(guān)指令有:SEGMENT、ENDS、ASSUME。1.段定義偽指令SEGMENT、ENDS格式:段名SEGMENT[定位類型][組合類型][類別名]
…
段名ENDS功能:定義一個(gè)邏輯段。SEGMENT和ENDS必須成對(duì)使用,它們前面的段名必須是相同的。SEGMENT后面中括號(hào)中的內(nèi)容為可選項(xiàng),告訴匯編程序和連接程序如何確定段的邊界、如何連接幾個(gè)程序模塊。(1)定位類型定位類型說明段的起始地址應(yīng)有怎樣的邊界值,有以下4種。①BYTE:表示本段可以從任何地址開始,這種類型段間不留空隙,存儲(chǔ)器利用率高。②WORD:表示本段的起始地址必須為偶地址。③PARA:表示本段從節(jié)邊界開始。8086規(guī)定每16字節(jié)為1小節(jié)。所以,定位類型為PARA的段,其起始地址必為16的倍數(shù)。這種類型簡單,但是段間往往有空隙。定位類型的默認(rèn)值為PARA。④PAGE:表示本段從頁邊界開始。8086規(guī)定每256字節(jié)為1頁,所以,定位類型為PAGE的段,其起始地址必為256的倍數(shù)。(2)組合類型組合類型說明鏈接不同模塊中的同名段時(shí)采用的方式,有以下6種。①PUBLIC:本段與其他模塊中說明為PUBLIC的同名同類別的段鏈接起來,公用一個(gè)段地址,形成一個(gè)新的邏輯段,所以偏移量調(diào)整為相對(duì)于新邏輯段起始地址的值。②STACK:本段與其他模塊中說明為STACK的同名的堆棧段鏈接起來,公用一個(gè)段地址,形成一個(gè)新的邏輯段。同時(shí),系統(tǒng)自動(dòng)初始化SS及SP。(2)組合類型(續(xù))③COMMON:同名段從同一個(gè)內(nèi)存地址開始裝入。所以,各個(gè)邏輯段將發(fā)生覆蓋。連接以后,該段長度取決于同名段中最長的那個(gè),而內(nèi)容有效的是最后裝入的那個(gè)。④MEMORY:與PUBLIC同義,只不過MEMORY定義的段裝在所有同名段的最后。若連接時(shí)出現(xiàn)多個(gè)MEMORY,則最先遇到的段按組合類型MEMORY處理,其他段組合類型按PUBLIC處理。(2)組合類型(續(xù))⑤PRIVATE:不組合,該段與其他段邏輯上不發(fā)生關(guān)系,即使同名,各段擁有各自的段基值。組合類型的默認(rèn)值為PRIVATE。⑥ATexp:段地址為表達(dá)式exp的值(長度為16位)。此項(xiàng)不能用于代碼段。例如:AT0530H,表示本段從物理地址0530H開始。(3)類別名類別名必須用單引號(hào)括起來。類別的作用是在連接時(shí)決定各邏輯段的裝入順序。當(dāng)幾個(gè)程序模塊進(jìn)行連接時(shí),其中具有相同類別名的段,按出現(xiàn)的先后順序被裝入連續(xù)的內(nèi)存區(qū)。沒有類別名的段,與其他無類別名的段一起連續(xù)裝入內(nèi)存。典型的類型名有:“STACK”,“CODE”,“DATA”。2.ASSUME格式:ASSUME段寄存器名:段名[,段寄存器名:段名…]段寄存器可以是:CS、DS、ES、SS。段名為已定義的段。凡是程序中使用的段,都應(yīng)說明它與段寄存器之間的對(duì)應(yīng)關(guān)系。功能:用于明確段與段寄存器的關(guān)系。ASSUME使用說明ASSUME偽指令只是指示各邏輯段使用段寄存器的情況,并沒有對(duì)段寄存器的內(nèi)容進(jìn)行賦值。DS、ES的值必須在程序段中用指令語句進(jìn)行賦值,而CS、SS由系統(tǒng)負(fù)責(zé)設(shè)置,程序中也可對(duì)SS進(jìn)行賦值,但不允許對(duì)CS賦值。4.2.4過程定義偽指令過程定義偽指令用于定義過程。指令格式如下:過程名 PROC[類型]
…RET過程名 ENDP過程名按匯編語言命名規(guī)則設(shè)定,匯編及鏈接后,該名稱表示過程程序的入口地址,供調(diào)用使用。過程定義偽指令使用說明PROC與ENDP必須成對(duì)出現(xiàn),PROC開始一個(gè)過程,ENDP結(jié)束一個(gè)過程。成對(duì)的PROC與ENDP的前面必須有相同的過程名。類型取值為:NEAR(為默認(rèn)值)或FAR,表示該過程是段內(nèi)調(diào)用或段間調(diào)用。一個(gè)過程中,至少有一條過程返回指令RET,一般放在ENDP之前。4.2.5模塊定義和結(jié)束偽指令TITLE格式:TITLE標(biāo)題功能:TITLE偽指令可指定每一頁上打印的標(biāo)題。標(biāo)題最多可用60個(gè)字符。4.2.5模塊定義和結(jié)束偽指令(續(xù))2.NAME格式:NAME模塊名功能:為源程序的目標(biāo)程序指定一個(gè)模塊名。如果程序中沒有NAME偽指令,則匯編程序?qū)ITLE偽指令定義的標(biāo)題名前6個(gè)字符作為模塊名;如果程序中既沒有NAME,又沒有TITLE,則匯編程序?qū)⒃闯绦虻奈募鳛槟繕?biāo)程序的模塊名。4.2.5模塊定義和結(jié)束偽指令(續(xù))3.END格式:END[標(biāo)號(hào)]功能:表示源程序的結(jié)束。標(biāo)號(hào)指示程序開始執(zhí)行的起始地址。如果多個(gè)程序模塊相連接,則只有主程序要使用標(biāo)號(hào),其他子模塊則只用END而不必指定標(biāo)號(hào)。4.2.6其他偽指令1.對(duì)準(zhǔn)偽指令EVEN格式:EVEN功能:使下一個(gè)分配地址為偶地址。在8086中,一個(gè)字的地址最好為偶地址。因?yàn)?086CPU存取一個(gè)字,如果地址是偶地址,需要1個(gè)讀或?qū)懼芷?;如果是奇地址,則需要2個(gè)讀或?qū)懼芷凇K?,該偽指令常用于字定義語句之前。EVEN指令使用說明DSEGSEGMENT
…EVENARR_WDW100DUP(?)
…DSEGENDS4.2.6其他偽指令(續(xù))2.定位偽指令ORG格式:ORG表達(dá)式表達(dá)式取值范圍為:0~65535內(nèi)的無符號(hào)數(shù)。功能:指定其后的程序段或數(shù)據(jù)塊所存放的起始地址的偏移量。ORG偽指令使用說明例如:MY_DATASEGMENTORG100HMYDATDW1,2,$+4MY_DATAENDS4.2.6其他偽指令(續(xù))3.基數(shù)控制偽指令RADIX格式:RADIX表達(dá)式表達(dá)式取值為2~16內(nèi)的任何整數(shù)。功能:指定匯編程序使用的默認(rèn)數(shù)制。默認(rèn)時(shí),使用十進(jìn)制。RADIX使用舉例MOVBX,0FFH;十六進(jìn)制數(shù)要加后綴MOVBX,150;十進(jìn)制數(shù)不要加后綴RADIX16;設(shè)置十六進(jìn)制為默認(rèn)數(shù)制MOVAX,0FF;十六進(jìn)制數(shù)不要加后綴MOVBX,150D;十進(jìn)制數(shù)要加后綴4.3DOS功能調(diào)用MS-DOS叫磁盤操作系統(tǒng)。它不僅提供了許多命令,還給用戶提供了80多個(gè)常用子程序。DOS功能調(diào)用就是對(duì)這些子程序的調(diào)用,也叫系統(tǒng)功能調(diào)用。子程序的順序編號(hào)稱為功能調(diào)用號(hào)。DOS功能調(diào)用的過程是:根據(jù)需要的功能調(diào)用設(shè)置入口參數(shù),把功能調(diào)用號(hào)送AH寄存器,執(zhí)行軟中斷指令I(lǐng)NT21H后,可以根據(jù)有關(guān)功能調(diào)用的說明取得出口參數(shù)。4.3DOS功能調(diào)用(續(xù))1.單個(gè)字符輸入功能調(diào)用號(hào)AH=01H。功能:接收從鍵盤輸入的一個(gè)字符并在屏幕回顯。輸入字符的ASCII碼存入AL寄存器。若按下組合鍵Ctrl+Break或Ctrl+C,則程序返回DOS。例如:MOVAH,01HINT21H4.3DOS功能調(diào)用(續(xù))2.字符串輸入功能調(diào)用號(hào)AH=0AH。功能:接收從鍵盤輸入的一個(gè)字符串。入口參數(shù):存放字符串的接收緩沖區(qū)首地址和最大字符個(gè)數(shù)。寄存器DS和DX存放接收緩沖區(qū)首地址,分別存放其段地址和偏移地址;緩沖區(qū)第一字節(jié)存放接收字符串的最大字符個(gè)數(shù)。出口參數(shù):輸入的字符串及實(shí)際輸入的字符個(gè)數(shù)。緩沖區(qū)第二字節(jié)存放實(shí)際輸入的字符個(gè)數(shù)(不包括回車符);第三字
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 同居生子分手協(xié)議書電子版
- 天津市小型建設(shè)工程合同的適用范圍
- 《地鐵設(shè)施設(shè)備系統(tǒng)》課件
- 2025年宜春貨運(yùn)從業(yè)資格證模擬考試題目
- 2025年隴南道路貨物運(yùn)輸從業(yè)資格證考試
- 2025年瀘州貨物從業(yè)資格證考試題
- 動(dòng)物屠宰產(chǎn)業(yè)升級(jí)
- 智能家居投資管理辦法
- 挖掘機(jī)地鐵建設(shè)施工合同
- 汽車行業(yè)市場(chǎng)調(diào)研全解析
- 專題19 重點(diǎn)用法感嘆句50道
- 2024-2025學(xué)年統(tǒng)編版五年級(jí)語文上冊(cè)第七單元達(dá)標(biāo)檢測(cè)卷(原卷+答案)
- 人教版七年級(jí)語文上冊(cè)《課內(nèi)文言文基礎(chǔ)知識(shí) 》專項(xiàng)測(cè)試卷及答案
- 2024年光伏住宅能源解決方案協(xié)議
- 【初中數(shù)學(xué)】基本平面圖形單元測(cè)試 2024-2025學(xué)年北師大版數(shù)學(xué)七年級(jí)上冊(cè)
- 江蘇省蘇州市2023-2024學(xué)年高二上學(xué)期1月期末物理試卷(含答案及解析)
- 2025屆陜西省四校聯(lián)考物理高三上期末聯(lián)考試題含解析
- 外墻裝修合同模板
- 中國發(fā)作性睡病診斷與治療指南(2022版)
- 律師事務(wù)所律師事務(wù)所管理手冊(cè)
- 2024年保安員證考試題庫及答案(共260題)
評(píng)論
0/150
提交評(píng)論