第4章匯編語言程序設計1_第1頁
第4章匯編語言程序設計1_第2頁
第4章匯編語言程序設計1_第3頁
第4章匯編語言程序設計1_第4頁
第4章匯編語言程序設計1_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

會計學1第4章匯編語言程序設計1第4章匯編語言程序設計4.1匯編語言和匯編程序的基本概念

4.2匯編語言源程序書寫格式

4.3

8086匯編語言中標識符、表達式和運算符

4.5匯編語言程序上機過程

4.4偽指令語句

第1頁/共39頁4.1匯編語言和匯編程序的基本概念

4.1.1匯編語言面向CPU指令系統(tǒng)的程序設計語言采用助記符表示操作碼和操作數(shù)用符號地址表示操作數(shù)地址用匯編語言編寫程序占用內(nèi)存空間少,執(zhí)行速度快第2頁/共39頁

將匯編語言源程序翻譯成目標程序的過程稱為匯編,所用的軟件稱為匯編程序。

宏匯編程序MASM

匯編產(chǎn)生目標程序文件和源程序列表文件:目標程序文件經(jīng)連接定位后由計算機執(zhí)行源程序列表文件將列出源程序、目標程序的機器語言代碼及符號表

4.1.2匯編程序第3頁/共39頁語句類型

8086宏匯編MASM使用的語句分成3種類型:指令語句:能夠產(chǎn)生目標代碼,CPU可執(zhí)行偽指令語句:為匯編程序和連接程序提供的管理性語句,不產(chǎn)生目標代碼宏指令語句:可包括多條指令或偽指令4.2匯編語言語句的格式第4頁/共39頁一般情況下,匯編語言的語句可以由1~4部分組成:[名字]操作碼項[操作數(shù)][;注釋]名字(標號)項是一個符號。操作碼項是一個操作碼的助記符,它可以是指令、偽操作或宏指令。操作數(shù)項由一個或多個表達式組成,它提供為執(zhí)行所要求的操作而需要的信息。注釋項用來說明程序或語句的功能,分號(;)為識別注釋項的開始,也可以從一行的第一個字符開始,此時整行都是注釋,常用來說明下面一段程序的功能。其中帶方括號的部分表示任選項,即可以選用,也可以不用。下機分別說明每一項的作用及表示方法。4.2.1名字項第5頁/共39頁

4.2.1名字項名字項可以是語句標號或標量。標號是可執(zhí)行指令語句的符號地址,在代碼段中定義,用作轉(zhuǎn)移指令或調(diào)用指令的操作數(shù),表示轉(zhuǎn)移地址;變量通常是指存放數(shù)據(jù)的存儲器單元符號地址,它在除段碼段以外的其它段中定義,可以用作指令的操作數(shù)。名字和變量統(tǒng)稱為標識符。第6頁/共39頁1.組成名字的字符及規(guī)則它是由字母打頭的字符串,可由下列字符組成:①字母A~Z,a~z。②數(shù)字0~9。③專用字符?、.、@、-、$。除數(shù)字0~9外,其他字符都可以放在名字的第一個位置。字符“.”只能出現(xiàn)在名字的第一個位置,其他位置不允許出現(xiàn)。名字最長由31個字符組成。匯編程序?qū)?1個以后的字符不予理會,所以,當兩個名字的前31個字符完全相同而從第32個字符開始有不同字符時,匯編程序?qū)⑺鼈円暈橥幻?。?頁/共39頁2.標號和變量的區(qū)別

標號是某條指令所存放單元的符號地址,而變量是某操作數(shù)據(jù)所存放單元的符號地址。在匯編語言程序中,指令語句中的名字一般采用標號,這個標號可以是任選的,即可以不寫。標號出現(xiàn)在代碼段,后面跟著冒號“:”。第8頁/共39頁3變量和標號的屬性標號和名字一經(jīng)定義便具有兩類三種屬性:①段值標號和名字對應存儲單元的段地址②偏移值標號和名字對應存儲單元的偏移地址③類型標號、子程序名的類型可以是NEAR(近)和FAR(遠),分別表示段內(nèi)或段間變量名的類型可以是BYTE(字節(jié))、WORD(字)和DWORD(雙字)等地址屬性類型屬性第9頁/共39頁4.2.3操作數(shù)項操作數(shù)項是操作符的操作對象。操作符在完成相應的操作時要求有一系列的操作數(shù)。當有兩個或兩個以上的操作數(shù)時,各操作數(shù)之間用逗號隔開。對于指令語句,操作數(shù)項一般給出操作數(shù)地址,它們可能一個或多個,或一個也沒有。對于偽指令和宏指令語句,操作數(shù)項則給出所要求的參數(shù)。操作數(shù)一般有常數(shù)、寄存器、標號、變量和表達式等幾種形式。第10頁/共39頁1.常數(shù)常數(shù)是操作數(shù)位置出現(xiàn)的數(shù)值數(shù)據(jù)或字符型數(shù)據(jù),它的值在匯編時已完全確定,程序運行過程中,不會發(fā)生變化。在8086宏匯編中,允許有以下幾種常數(shù):①二進制常數(shù):是一串0和1數(shù)字的組合,以字母B結(jié)尾。②八進制常數(shù):由數(shù)字0~7組成,必須以字母O結(jié)尾。③十進制常數(shù):這是最常用的一種常數(shù),后跟字母D或不跟任何字母。④十六進制常數(shù):由數(shù)字0~9和字母A~F組成,這類數(shù)據(jù)必須以字母H結(jié)尾。⑤字符串常數(shù):用單引號括起來的字符以及字符串,其各個字符的ASCII碼值構(gòu)成字符串常數(shù)。字符串常數(shù)可以和整數(shù)常數(shù)等價使用,但這些字符串常數(shù)的長度必須為一個字節(jié)或一個字,以便與目標操作數(shù)的長度相匹配。在指令中,常數(shù)通常被稱為立即數(shù),它只能用作源操作數(shù),不能作為目標操作數(shù)。它的允許取值范圍由指令中的目標操作數(shù)的形式自動確定為8位或16位。第11頁/共39頁2表達式和運算符指由運算符連接的各種常數(shù)構(gòu)成的表達式匯編過程中計算表達式得數(shù)值程序運行之前,已算出結(jié)果增強程序可讀性第12頁/共39頁2、表達式和運算符(1)算術運算符+

-

*

/MOD(2)邏輯運算符ANDORXORNOT(3)移位運算符

SHLSHR(4)關系運算符

EQNEGTLTGELE(5)分析運算符HIGHLOW第13頁/共39頁(1)算術運算符實現(xiàn)加、減、乘、除、取余的算術運算MOVAX,3*4+5 ;等價于MOVAX,17其中MOD也稱為取模,它產(chǎn)生除法之后的余數(shù),如19MOD7=5加+和減-運算符還可以用于地址表達式除加、減外,其他運算符的參數(shù)必須是整數(shù)第14頁/共39頁(2)邏輯運算符實現(xiàn)按位相與、相或、異或、求反的邏輯運算ORAL,03HAND45H;等價于ORAL,01H第15頁/共39頁(3)移位運算符實現(xiàn)對數(shù)值的左移、右移的邏輯操作;移入低位或高位的是0格式為:數(shù)值表達式SHL/SHR移位次數(shù)MOVAL,0101BSHL(2*2);等價于MOVAL,01010000B第16頁/共39頁(4)關系運算符用于比較和測試符號數(shù)值MASM用0FFFFH(補碼-1)表示條件為真MASM用0000H表示條件為假

MOVBX,PORTGE5;PORT<5時,匯編結(jié)果為MOVBX,0FFFFH;否則,匯編結(jié)果為MOVBX,0第17頁/共39頁(5)分析運算符對存儲器地址進行運算的5個:SEG(求段基值)、OFFSET(求偏移量)、TYPE(求變量類型)、LENGTH(求變量長度)和SIZE(求字節(jié)數(shù))

例如:

MOVBX,SEGARR

MOVES,SEGDATA1第18頁/共39頁 ORG$+10ARRAYDB45,45H ……MOVBX,OFFSETARRAY ;等價于LEABX,ARRAY MOVCL,ARRAY+4 ;等效于MOVCL,ARRAY[4] MOVAX,ES:[2000H]分析運算符實例

加4個字節(jié)單元第19頁/共39頁屬性修改運算符,用來建立和臨時改變變量或標號的類型6個:PTR、段屬性前綴、SHORT、THIS例如:

MOVBX,OFFSETARR;等同于LEABX,ARR

MOVAX,ES:[DATA1]

MOVCX,WORDPTR[BX]

MOVDX,HIGHDATA1(6)綜合運算符第20頁/共39頁運算符的優(yōu)先級()<>[]·LENGTHSIZEPTROFFSETSEGTPYETHIS:HIGHLOW*/MODSHLSHR+-EQNEGTLTGELENOTANDORXORSHORT

建議采用圓括號“()”顯式表達,它可以極大地提高程序的可閱讀性第21頁/共39頁5.3偽指令語句給匯編程序(軟件)的命令,在匯編過程中處理5.3.1數(shù)據(jù)定義偽指令用來定義變量的類型分配存儲單元,可賦值或不賦值一般格式:[變量名]

偽指令

操作數(shù)

[,操作數(shù)…][;注釋]第22頁/共39頁

2.常用的數(shù)據(jù)定義偽指令定義字節(jié)變量偽指令DB

定義字變量偽指令DW

定義雙字變量偽指令DD

定義四字變量偽指令DQ

定義十字節(jié)變量偽指令DT

變量定義偽指令最常使用第23頁/共39頁字節(jié)單元定義實例DATA SEGMENT ;數(shù)據(jù)段

XDB'A',-5DB2DUP(100),?YDB'ABC'DATA ENDS應用指定復制次數(shù),用復制運算符DUP復制操作數(shù)第24頁/共39頁字單元定義實例DATASEGMENT;數(shù)據(jù)段

COUNTDW8000H,?,'AB'MAXINTEQU64HNUMBERDWMAXINTARRAYDWMAXINTDUP(0)DATA ENDS應用第25頁/共39頁4.3.2符號定義偽指令給符號重新命名或定義新的類型屬性常用的有EQU、=、LABLE

5.4.3段定義偽指令定義邏輯段時指定段的名稱和范圍,并指明段的定位類型、組合類型及類別常用SEGMENT、ENDS和ASSUME等第26頁/共39頁符號定義

DCHAREQU2 ENTER=13 CALLDOSEQU<INT21H>符號應用(左邊程序段等價右側(cè)的符號形式)

MOVAH,DCHAR

;

MOVAH,2

MOVDL,ENTER;MOVDL,13 CALLDOS;INT21H

符號常數(shù)實例第27頁/共39頁4.3.4過程定義偽指令將一些重復出現(xiàn)的語句組定義為子程序,又稱為過程,可以采用CALL指令來調(diào)用。定義格式:

過程名

PROC[NEAR]/FAR

(語句系列)

RET

(語句系列)

過程名

ENDP2.

調(diào)用過程的格式:CALL過程名

第28頁/共39頁

4.3.5結(jié)構(gòu)定義偽指令結(jié)構(gòu)是相互關聯(lián)的一組數(shù)據(jù)的組合形式。用偽指令STRUC和ENDS把相關數(shù)據(jù)定義語句組合起來,便構(gòu)成一個完整的結(jié)構(gòu)。使用格式:

結(jié)構(gòu)名

STRUC

…(數(shù)據(jù)定義語句序列)

結(jié)構(gòu)名ENDS第29頁/共39頁4.3.6模塊定義與連接偽指令編寫規(guī)模較大的匯編語言源程序時,可將整個程序劃分為幾個獨立的源程序,稱之為模塊。將各模塊分別進行匯編,生成各自的目標程序,最后連接成為一個完整的可執(zhí)行程序。各模塊之間可以相互進行符號訪問。為了進行模塊間連接和相互訪問,通常使用偽指令NAME、END、PUBLIC、EXTRN第30頁/共39頁4.3.7程序計數(shù)器$和ORG偽指令

1.程序計數(shù)器$用在表達式里,為下一個能分配的存儲單元的偏移地址

2.ORG偽指令起始位置設定偽指令用來指出源程序或數(shù)據(jù)塊的起點可改變位置計數(shù)器的值

第31頁/共39頁4.4匯編語言程序的段結(jié)構(gòu)匯編語言源程序的分段結(jié)構(gòu)若干個任意排序的邏輯段每個邏輯段以SEGMENT語句開始,以ENDS語句結(jié)束整個源程序以END語句結(jié)束第32頁/共39頁4.5匯編語言程序上機過程

4.5.1匯編語言的工作環(huán)境及上機步驟

1.硬件環(huán)境

一般IBMPC/XT及其兼容機基本配置

2.軟件環(huán)境

1)DOS操作系統(tǒng)2)編輯程序

3)宏匯編程序MASM.EXE4)連接程序LINK.EXE5)調(diào)試程序DEBUG.COM第33頁/共39頁3.運行匯編語言程序的步驟

1)編輯匯編語言源程序,擴展名為.ASM;

2)用MASM.EXE匯編成.OBJ目標文件;

3)有語法錯,用編輯軟件重新調(diào)入修改。無錯用LINK.EXE把.OBJ文件轉(zhuǎn)化成.EXE可執(zhí)行

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論