版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第四章匯編語言程序設(shè)計§4.1概述§4.2匯編語言源程序的格式§4.3MASM中的表達式§4.4偽指令§4.5常用的DOS和BIOS調(diào)用§4.6匯編程序設(shè)計及舉例§4.1概述三層語言結(jié)構(gòu):用來編寫計算機程序的語言,即程序設(shè)計語言,包括機器語言、匯編語言和高級語言,分別位于三個層次。(1)機器語言機器語言是位于最底層的程序設(shè)計語言,是使用二級制代碼表示的指令系統(tǒng),用機器語言編寫的程序稱為“目標程序”難辨認、難記憶、易出錯(2)匯編語言匯編語言使用助記符來表示指令的操作碼和操作數(shù),使用標號和符號來代表地址、常量和變量,便于識別和記憶。匯編語言的一條語句對應(yīng)一條機器語言指令。用匯編語言編寫的程序,稱為“匯編語言程序”,這種程序不能直接由計算機識別,需要通過一種起翻譯作用的“匯編程序”將其翻譯成機器語言,由計算機執(zhí)行。缺點:使用匯編語言編寫程序,必須要熟悉機器的指令系統(tǒng)、尋址方式、寄存器的設(shè)置和使用方法,它是一種面向機器的低級語言,不能被直接移植到其他類型的機器上。(3)高級語言高級語言是一種面向問題或過程的語言,它獨立于機器,其編寫的程序是可以移植的。高級語言的一個語句相當于許多條匯編語言指令或機器語言指令。高級語言編寫的程序也必須翻譯成機器語言后才能執(zhí)行。實現(xiàn)這種翻譯的程序叫做“編譯程序”,不同的語言有不同的編譯程序。用匯編語言或高級語言編寫的程序稱為“源程序”。匯編語言或高級語言的程序處理過程:匯編語言或高級語言的程序處理過程:1、編輯匯編語言源程序(即建立.ASM文件)2、匯編為目標程序(即匯編為.OBJ,.LST,.CRF文件)3、連接為可執(zhí)行程序(即生成.EXE文件)4、運行語言源程序結(jié)構(gòu):§4.2匯編語言格式一、分段格式匯編語言程序按段編寫,這樣有利于用戶按段組織程序和存放數(shù)據(jù)。用戶所定義的不同段將被存放在內(nèi)存的不同位置,有利于存儲器管理。一個匯編語言源程序可以由若干個段組成,程序中的指令、數(shù)據(jù)以及堆棧都應(yīng)當定義到具體的段中。匯編語言有兩種類型語句,即指令和偽指令,前者屬于指令性語句,后者屬于指示性語句指令性語句:指令,由匯編程序翻譯成機器指令,在匯編過程中產(chǎn)生對應(yīng)的目標代碼典型的匯編指令是:ADDAX,[SI]指示性語句:為匯編程序提供一些信息,讓匯編程序在匯編過程執(zhí)行某些特定的功能,不產(chǎn)生目標代碼典型的偽指令是:COSTDW?;定義一個字空間,并將標識符COST指向該字空間二、匯編語言語句的類型和組成1、匯編指令格式[標號:]助記符[操作數(shù),操作數(shù)][;注釋]標號是指為該指令所在地址取的名字,后面必須跟冒號“:”。標號是可供選擇的標識符8086/8088匯編語言中使用的標識符必須遵循下列規(guī)則:標識符由字母(a~z,A~Z)、數(shù)字(0~9)或下劃線組成標識符必須以字母開頭標識符有效長度為31個字符,若超過31個字符,則只保留前面的31個字符為有效字符[標號:]助記符[操作數(shù),操作數(shù)][;注釋]指令助記符是指令名稱的代表符號,是指令語句中的關(guān)鍵字,不能省略,它表示本指令的操作類型,必要時可在助記符前加一個或多個“前綴”操作數(shù)是參加本指令運算的數(shù)據(jù),有些指令不需要操作數(shù),有些指令只需要一個操作數(shù),有些指令需要兩個操作數(shù),需要用逗號隔開;有些操作數(shù)可以用表達式表示注釋為可選項,需用分號開頭,便于閱讀程序,匯編程序不對其進行任何處理2、偽指令格式[名稱]偽指令定義符[操作數(shù)][;注釋]偽指令格式與指令格式有以下幾點不同:名稱相當于指令語句中的標號,但在名稱后不允許帶冒號偽指令定義符是由MASM規(guī)定的符號,又稱匯編命令,不可缺省,如DB、DW、PROC等操作數(shù)個數(shù)隨不同的偽指令不同,有的偽指令不允許帶操作數(shù),有的允許帶多個操作數(shù)三、匯編語言的數(shù)據(jù)1、常數(shù)指令中出現(xiàn)的固定值二進制:最后加字母B例如:01000111B十進制:最后加字母D,D可以忽略例如:1996或1996D八進制:最后加字母Q(或O)例如:2560Q十六進制:最后加字母H,如果以字母“A~F”開頭,前面加0例如:0AH,0A342H132、變量變量通常指存放在存儲單元中的值,在程序運行中是可以修改的。(1)段值(SEGMENT)(2)段內(nèi)偏移地址(OFFSET)(3)類型(TYPE):指變量中每個元素包含的字節(jié)數(shù)3、標號標號是可執(zhí)行指令語句的地址的符號表示,它可以作為轉(zhuǎn)移指令和調(diào)用指令的目標操作數(shù),以確定程序轉(zhuǎn)向的目標地址,它也具有三個屬性:段值、段內(nèi)偏移地址、類型(指在轉(zhuǎn)移指令中標號可轉(zhuǎn)移的距離)144、保留字保留字是匯編語言中預先保留下的具有特殊意義的符號,只能作為固定的用途指令、偽指令。寄存器名等都是保留字5、注釋從分號(;)開始,到本行結(jié)束15§4.3MASM中的表達式表達式由操作數(shù)以及運算符組成,在匯編時由匯編程序?qū)λM行運算,運算結(jié)果作為一個語句中的操作數(shù)去使用。運算結(jié)果可以是一個常數(shù)字,也可以是一個存儲器的地址。一、操作數(shù):代表一個數(shù)據(jù)或一個地址數(shù)據(jù):常數(shù)或變量地址:標號二、運算符1、算術(shù)運算符2、邏輯運算符3、關(guān)系運算符4、分析運算符5、綜合運算符6、其它運算符16171、算術(shù)運算符+-X/MODSHLSHR可以對數(shù)據(jù)進行運算,運算結(jié)果仍然為數(shù)據(jù),但對地址不能進行乘除運算。例如:20A1H+1040H21HSHL2=84H182、邏輯運算符
ANDORNOTXOR只能對常數(shù)進行運算,得到的結(jié)果也是常數(shù)既可以作指令助記符,又可以作匯編語言的運算符指令助記符是在程序執(zhí)行時運算的,運算符是在匯編過程進行的例如:ANDDX,PORTAND0FEH
如果PORT值為90H,則相當于ANDDX,90H
如果PORT值為81H,則相當于ANDDX,80H193、關(guān)系運算符EQNELTGTLEGE兩個參加運算的數(shù)必須同是數(shù)值,或同是內(nèi)存單元的地址,而結(jié)果總是一個數(shù)值。如果關(guān)系成立:其運算結(jié)果為0FFH或0FFFFH,否則,其結(jié)果為0例如:MOVDX,PORTLT5
如果PORT小于5,相當于MOVDX,0FFFFH
如果PORT不小于5,相當于MOVDX,020關(guān)系運算符一般不單獨使用,而是和邏輯運算符結(jié)合起來使用例如:MOVBX,((PORTLT5)AND20)OR(PORTGE5)AND30)當PORT小于5時,相當于MOVBX,20當PORT大于或等于5時,相當于MOVBX,30214、分析運算符(數(shù)值返回運算符)OFFSETSEGTYPESIZELENGTH(1)OFFSET:取變量或標號的偏移地址值格式:OFFSET變量或標號(2)SEG:取變量或標號的段基址格式:SEG變量或標號(3)TYPE:返回變量的類型屬性或標號的距離屬性格式:TYPE變量或標號A1DB20H,30HA2DW0438HL1:MOVAH,TYPEA1MOVBH,TYPEA2MOVBL,TYPEL1(4)LENGTH:當變量中使用DUP時,LENGTH返回此變量所包含的單元數(shù),對其它變量則返回1格式:LENGTH變量22M1DW100DUP(?)M2DW1,2,3M3DB‘ABCD’MOVCX,LENGTHM1MOVBL,LENGTHM2MOVAL,LENGTHM3(5)SIZE:返回變量包含的字節(jié)數(shù)格式:SIZE變量SIZE=LENGTH*TYPE2324例如:ABCDW100DUP(?)OFFSET:求偏移地址MOVDX,OFFSETABCSEG:求段基址
MOVAX,SEGABCMOVDS,AXTYPE:求標識符類型值LENGTH:求為標識符分配的項數(shù)SIZE:求為標識符分配的字節(jié)數(shù)
TYPEABC;等于2LENGTHABC;等于100SIZEABC;等于200255、綜合運算符(修改屬性運算符):段操作符、PTR、THIS、HIGH、LOW、SHORTPTR:定義某內(nèi)存單元類型
格式:類型PTR變量/標號例如:MOVAX,WORDPTRD1;定義D1指向的內(nèi)存單
元為字單元MOVBYTEPTR[1000H],0MOVWORDPTR[1000H],0PTR通常和偽指令BYTE、WORD等合用26THIS:指定新類型
格式:變量/標號EQUTHIS類型/距離將EQUTHIS右邊的類型/距離屬性,賦給左邊的變量/標號,該變量或標號的段地址和偏移地址與下一個存儲單元的地址相同例如:LABCEQUTHISBYTELABDDW4321H,2255HMOVAL,LABC;AL=21HMOVAX,LABD;AX=4321HLABC和LABD具有相同的段地址和偏移量,但LABC是字節(jié)類型,LABD是字類型。27SHORT標號
SHORT用來說明轉(zhuǎn)移類指令中轉(zhuǎn)向地址的屬性,指出轉(zhuǎn)向的目標地址與本指令之間的距離在-128~+127之間,即限制在短轉(zhuǎn)移范圍內(nèi)LOW變量或標號
;取低字節(jié)HIGH變量或標號
;取高字節(jié)MOVAL,LOW3080H;AL=80HMOVAX,HIGH3A4BH;AH=3AH6、其他運算符其它運算符有(),[],<>,●,MASK和WIDTH等六種圓括號():用來改變運算符的優(yōu)先級別,()中的運算符具有最高優(yōu)先權(quán)方括號[]:主要用來表示地址表達式或多重變量的下標值尖括號<>及原點:在結(jié)構(gòu)中專用MASK和WIDTH:在記錄中專用2829數(shù)據(jù)定義偽指令:DBDWDDDQDT存儲單元類型定義偽指令:BYTEWORDDWORD符號定義偽指令:EQU=段定義偽指令:SEGMENTENDSASSUMEORG過程定義偽指令:PROCENDPNEARFAR程序結(jié)束偽指令:END簡化段定義偽指令:MODELCODEDATASTACK§4.4偽指令301、數(shù)據(jù)定義偽指令:DBDWDDDQDT用來定義存儲單元的符號名,并初始化該單元或該單元開始的若干連續(xù)單元,初始化可以采用確定值,也可以采用不確定值DB(DefineByte)格式:[符號名]DB<表達式或數(shù)據(jù)項表>表達式中的值或項表中的每一項定義為一個字節(jié)數(shù),它們從符號名地址開始按字節(jié)連續(xù)存放,直到表中數(shù)據(jù)項結(jié)束(地址遞增方向),表達式的值或項對應(yīng)小于8位2進制數(shù)表示的最大值例如:FIRSTDB3,18,25H,’ABC’SECONDDB?THIRDDB9DUP(?)31DW(DefineWord)格式:[符號名]DW<表達式或數(shù)據(jù)項表>表達式的值或項表中的每一項都是兩個字節(jié)數(shù),應(yīng)小于16位二進制數(shù)表示的最大值例如:DONDW10DUP(?);在內(nèi)存中留出10個空單
元,其中每項都是2個字節(jié)32DD:定義雙字DQ:定義4個字DT:定義10個字例如:N1DD2.5,3.2E+2DD可以用來定義有小數(shù)點的十進制數(shù)或用科學計數(shù)法表示的數(shù)據(jù),小數(shù)在匯編時被譯成四字節(jié)浮點數(shù),尾數(shù)在低地址一端,階碼在高地址一端DQ和DT也允許浮點數(shù)形式
COUNTDT?;在內(nèi)存中留出1個空單元,其中每項都是10個字33舉例:S1DB‘ABCDEF’S1DB‘A’,’B’,’C’,’D’,’E’,’F’
S2DW‘AB’,’CD’,’EF’S3DD‘AB’,’CD’34帶DUP的表達式,DUP是定義重復數(shù)據(jù)操作符例:DB1DB10HDUP(?)DB2DB10HDUP(‘ABCD’)DB3DB2HDUP(0,2,?)第一個語句表示保留10H個字節(jié),第二個語句表示重復10H個字符串“ABCD”,共占40H個字節(jié),第三個語句是重復2H個數(shù)字串和空單元
35注意數(shù)據(jù)定義與引用時,要保證數(shù)據(jù)類型的正確性舉例:數(shù)據(jù)定義:D1DB3DUP(12H)
引用:MOVAX,D1;引用錯誤MOVAX,WORDPTRD12、符號定義偽指令EQUEQU偽指令用來對標號賦值,使標號等于數(shù)值或標號等于標號格式:<標號>EQU<表達式><新標號>EQU<舊標號>例如:ABCEQU220XYZEQUABCCOUNTEQUCX同一個標號不能被兩次賦值,除非先清除標號的原值,與EQU相對應(yīng)的清除指令:PURGEPURGEABC;清除對ABC的賦值362、符號定義偽指令=用來對標號賦值,使標號等于數(shù)值格式:<標號>=<表達式>例如:ABC=10ABC=ABC-1373、段定義偽指令SEGMENTENDSAEEUMEORGSEGMENTENDS成對出現(xiàn),定義段格式:段名SEGMENT
段的內(nèi)容…
段名ENDS段名為用戶自定義的標號,可以為任何有效的標識符例如:DATA-SEGSEGMENT…DATA-SEGENDSCODE-SEGSEGMENT…CODE-SEGENDS383、段定義偽指令ASSUME:用于指定用戶定義的哪一個段為數(shù)據(jù)段、代碼段和堆棧段。對DS、SS只知道段基址,而實際值要在程序中使用傳送命令來具體賦值。例如:ASSUMECS:CODE-SEG,DS:DATA-SEG該指令指出CODE-SEG的段地址在CS中,DATA-SEG的段地址在DS中,但并沒有把段地址裝入相應(yīng)的段寄存器,因此除了CS以外(CS通過在啟動代碼段時由段間轉(zhuǎn)移裝入),將段地址裝入相應(yīng)寄存器的工作必須通過MOV傳送指令完成。39舉例例如:CODE-SEGSEGMENTASSUMECS:CODE-SEG,DS:DATA-SEG,SS:STACK-SEGSTART:MOVAX,DATA-SEGMOVDS,AXMOVAX,STACK-SEGMOVSS,AX…CODE-SEGENDS說明:段名可以是任意的自定義標識符DS、SS的段地址值需要傳送指令獲得40實現(xiàn)兩個16位二進制數(shù)的相乘41424、過程定義偽指令PROC、ENDP、NEAR、FARPROC、ENDP成對出現(xiàn),用于定義過程,即子程序格式:過程名PROC[NEAR](或[FAR]
過程的內(nèi)容……
過程名ENDP過程名為用戶自定義的標號,定義過程是為實現(xiàn)子程序調(diào)用而設(shè)的調(diào)用格式為:CALL過程名過程由RET指令返回,它可以不是最后一條指令,在過程中可以設(shè)置多點返回。434、過程定義偽指令過程調(diào)用可分為段內(nèi)調(diào)用和段間調(diào)用:段內(nèi)調(diào)用和段間調(diào)用由被調(diào)用子程序頭部的FAR或NEAR偽指令指出,NEAR可以省略段內(nèi)調(diào)用和段間調(diào)用的返回指令助記符都是RET,但執(zhí)行的操作不同,段內(nèi)調(diào)用時匯編程序?qū)ET產(chǎn)生指令編碼C3H,實現(xiàn)段內(nèi)返回;段間調(diào)用時匯編程序?qū)ET產(chǎn)生指令編碼CBH,實現(xiàn)段間返回44例子:多字節(jié)的BCD碼相加45465、源程序結(jié)束偽指令END格式:END標號476、簡化段定義偽指令(1)存儲模式定義偽指令.MODEL格式:.MODEL<存儲模式>TINY:微型,其代碼和數(shù)據(jù)位于一個段內(nèi)(<=64KB),一般用于編寫.COM程序SMALL:小型,代碼在一個段內(nèi)(<=64KB),數(shù)據(jù)在另一個段內(nèi),在這種存儲模式下,數(shù)據(jù)段寄存器可保持不變,所有轉(zhuǎn)移都可以認為是段內(nèi)轉(zhuǎn)移COMPACT:緊湊型,代碼在一個段內(nèi),有任意個數(shù)據(jù)段,沒有大于64KB的數(shù)組LARGE:大型,代碼與數(shù)據(jù)均占用任意個段,沒有大于64KB的數(shù)組48(2)段定義偽指令.CODE,.DATA和.STACK簡化段定義偽指令說明一個段的開始,同時也表示上一個段的結(jié)束。偽指令END則說明最后一個段地結(jié)束和程序的結(jié)束49例:簡化段定義的源程序示例,用于顯示字符串“HELLO”50§4.5
DOS的軟件中斷和系統(tǒng)功能調(diào)用MC-DOS是IBMPC系列計算機上最普遍的操作系統(tǒng),它采用層次化模塊結(jié)構(gòu),由一個引導程序BOOT和3個層次模塊組成。這3個模塊分別是:輸入輸出模塊IO.SYS、文件管理模塊MSDOS.SYS和命令處理模塊COMMAND.COMMS-DOS從兩個層次上為用戶提供了訪問接口。一般用戶可以通過鍵盤命令在命令處理模塊層次上進行訪問;高級用戶則可以通過軟件中斷和系統(tǒng)功能調(diào)用在文件管理模塊層次上進行訪問。511、MS-DOS常用軟件中斷52MS-DOS的主要系統(tǒng)功能都使用中端處理程序的形式來提供這些軟中斷隱蔽了設(shè)備的物理特性和接口方式,調(diào)用時首先設(shè)置好入口參數(shù),即可轉(zhuǎn)去執(zhí)行相應(yīng)的子程序系統(tǒng)功能調(diào)用專指類型為21H的軟中斷,包含多個功能程序,每個子程序?qū)?yīng)一個功能號。531、MS-DOS常用軟件中斷5455INT10H;顯示器設(shè)置INT13H;磁盤驅(qū)動INT16H;鍵盤驅(qū)動INT17H;打印機驅(qū)動INT14H;異步通訊設(shè)備驅(qū)動INT1AH;系統(tǒng)時間設(shè)置和讀取MS-DOS的主要系統(tǒng)功能都是使用中斷處理程序的形式來提供的。這些軟中斷隱蔽了設(shè)備的物理特性和接口方式,調(diào)用時首先設(shè)置好入口參數(shù),即可轉(zhuǎn)去執(zhí)行相應(yīng)的子程序。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版工業(yè)地皮購置與交易全程稅務(wù)籌劃合同3篇
- 二零二五年教育培訓機構(gòu)兼職教師雇傭協(xié)議書3篇
- 蘇州工業(yè)園區(qū)服務(wù)外包職業(yè)學院《電液控制工程》2023-2024學年第一學期期末試卷
- 二零二五版生態(tài)環(huán)保型建筑材料銷售合同3篇
- 二零二五年度定制化餐盒包裝解決方案合同3篇
- 2025年度高新技術(shù)企業(yè)研發(fā)項目財務(wù)擔保合同會計處理細則3篇
- 2024版茶樓活動策劃合同2篇
- 二零二五年服裝店導購員培訓與激勵合同范本3篇
- 山西鐵道職業(yè)技術(shù)學院《矯正社會工作》2023-2024學年第一學期期末試卷
- 廈門海洋職業(yè)技術(shù)學院《創(chuàng)意表現(xiàn)圖案》2023-2024學年第一學期期末試卷
- 公路工程施工現(xiàn)場安全檢查手冊
- 公司組織架構(gòu)圖(可編輯模版)
- 1汽輪機跳閘事故演練
- 陜西省銅川市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細
- 禮品(禮金)上交登記臺賬
- 北師大版七年級數(shù)學上冊教案(全冊完整版)教學設(shè)計含教學反思
- 2023高中物理步步高大一輪 第五章 第1講 萬有引力定律及應(yīng)用
- 青少年軟件編程(Scratch)練習題及答案
- 浙江省公務(wù)員考試面試真題答案及解析精選
- 系統(tǒng)性紅斑狼瘡-第九版內(nèi)科學
- 全統(tǒng)定額工程量計算規(guī)則1994
評論
0/150
提交評論