第4章-匯編語言程序設(shè)計(jì)_第1頁
第4章-匯編語言程序設(shè)計(jì)_第2頁
第4章-匯編語言程序設(shè)計(jì)_第3頁
第4章-匯編語言程序設(shè)計(jì)_第4頁
第4章-匯編語言程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

會計(jì)學(xué)1第4章-匯編語言程序設(shè)計(jì)2§4.1

匯編語言源程序理解:匯編語言源程序的結(jié)構(gòu)匯編語言語句類型及格式第1頁/共77頁3一、匯編語言源程序結(jié)構(gòu)第2頁/共77頁41.

匯編語言源程序與匯編程序匯編語言源程序匯編程序用助記符編寫匯編程序匯編語言源程序機(jī)器語言目標(biāo)程序源程序的編譯程序第3頁/共77頁52.

匯編語言程序設(shè)計(jì)與執(zhí)行過程輸入?yún)R編語言源程序(EDIT)匯編(MASM)鏈接(LINK)調(diào)試(TD)源文件.ASM目標(biāo)文件.OBJ可執(zhí)行文件.EXE最終程序第4頁/共77頁6匯編語言源程序結(jié)構(gòu)數(shù)據(jù)段名SEGMENT

…數(shù)據(jù)段名ENDS附加段名SEGMENT

…附加段名ENDS堆棧段名

SEGMENT…堆棧段名

ENDS代碼段名

SEGMENT…代碼段名

ENDS

END

第5頁/共77頁7一個完整源程序結(jié)構(gòu)例DSEGSEGMENTDATA1DB1,2,3DUP(?)DATA2DW1234HDSEGENDSESEGSEGMENTDB20DUP(?)ESEGENDSSSEGSEGMENTSTACK‘STACK’DB200DUP(?)SSEGENDS表示該邏輯段的段地址此處還不能確定邏輯段的性質(zhì)第6頁/共77頁8一個完整源程序結(jié)構(gòu)例CSEGSEGMENTASSUMECS:CSEG,DS:DSEG,ES:ESEG,SS:SSEGSTART:MOVAX,DSEGMOVDS,AXMOVAX,ESEGMOVES,AXMOVAX,SSEGMOVSS,AX┇CSEGENDSENDSTART源程序代碼段寄存器初始化——將段地址送相應(yīng)的段寄存器說明各邏輯段的性質(zhì)第7頁/共77頁源程序的結(jié)構(gòu)特點(diǎn)(1)匯編語言程序通常由若干段組成,段由偽指令SEGMENT與ENDS定義,各段順序任意,段的數(shù)目按需要確定,原則上不受限制。(2)段由若干語句組成,語句以指令為主體而構(gòu)成。一條語句寫在一行上,書寫時語句的各部分應(yīng)盡量對齊(3)匯編語言程序中至少要有一個啟動標(biāo)號,作為程序開始執(zhí)行時目標(biāo)代碼的入口地址。啟動標(biāo)號常用START、BEGIN、MAIN等命名。(4)同時需要配合ASSUME偽指令指明邏輯段是代碼段、堆棧段、數(shù)據(jù)段還是附加段為增加程序的可讀性,可在匯編語言語句“;”后加上注釋。(5)每個源程序在代碼中都必須有返回DOS操作系統(tǒng)的指令語名.匯編語言程序設(shè)計(jì)中,有多種返回DOS的方法,但一般利用DOS功能調(diào)用的4CH子功能實(shí)現(xiàn),它需要的入口參數(shù)是AL=返回?cái)?shù)碼(通常用0表示程序沒有錯誤)movax,4c00h int21h第8頁/共77頁10二、匯編語言語句類型及格式第9頁/共77頁111.

匯編語言語句類型指令性語句指示性語句CPU執(zhí)行的語句,能夠生成目標(biāo)代碼CPU不執(zhí)行,而由匯編程序執(zhí)行的語句,不生成目標(biāo)代碼第10頁/共77頁122.

匯編語言語句格式

指令性語句:

[標(biāo)號:][前綴]助記符[操作數(shù)],[操作數(shù)][;注釋]指令的符號地址標(biāo)號后要有冒號操作碼注釋前加分號第11頁/共77頁13指示性語句[名字]偽指令助記符操作數(shù)[,操作數(shù),…][;注釋]變量的符號地址其后不加冒號指示性語句中至少有一個操作數(shù)第12頁/共77頁143.

標(biāo)號、名字標(biāo)號后有冒號,在指令性語句前;名字后不加冒號,在指示性語句前。英文字母、數(shù)字及專用字符組成,最大長度不能超過31個,且不能由數(shù)字打頭,不能用保留字(如寄存器名,指令助記符,偽指令)。 第13頁/共77頁154.

操作數(shù)寄存器存儲器單元常量變量或標(biāo)號表達(dá)式第14頁/共77頁16常量數(shù)字常量字符串常量例:‘A’

MOVAL,’A’例:’ABCD’匯編時被譯成對應(yīng)的ASCII碼41H,42H,43H,44H用單引號引起的字符或字符串第15頁/共77頁17變量代表內(nèi)存中的數(shù)據(jù)區(qū),程序中視為存儲器操作數(shù)變量的屬性:變量所在段的段地址變量單元地址與段首地址之間的位移量。字節(jié)型、字型和雙字型段值偏移量類型第16頁/共77頁18表達(dá)式算術(shù)運(yùn)算邏輯運(yùn)算*關(guān)系運(yùn)算取值運(yùn)算和屬性運(yùn)算其它運(yùn)算第17頁/共77頁19算術(shù)運(yùn)算和邏輯運(yùn)算符算術(shù)運(yùn)算符+,-,*,/,MOD邏輯運(yùn)算符AND,OR,NOT,XOR例:MOVAL,8AND4MOVAL,8+4-1第18頁/共77頁20取值運(yùn)算符取得其變量或標(biāo)號的偏移地址取得其變量或標(biāo)號的段地址TYPE取變量的類型LENGTH取所定義存儲區(qū)的長度SIZE取所定義存儲區(qū)的字節(jié)數(shù)用于分析存儲器操作數(shù)的屬性獲取變量的屬性值OFFSETSEG第19頁/共77頁21取值運(yùn)算符例

MOVAX,SEGDATAMOVDS,AXMOVBX,OFFSETDATA

LEABX,DATA等價于第20頁/共77頁22取值運(yùn)算符例若BUFFER存儲區(qū)用如下偽指令定義:

BUFFERDW200DUP(0)則:

TYPE BUFFER 等于2

LENGTHBUFFER 等于200

SIZEBUFFER 等于400第21頁/共77頁23屬性運(yùn)算符用于指定其后存儲器操作數(shù)的類型運(yùn)算符:PTR例:

MOVBYTEPTR[BX],12H第22頁/共77頁24其它運(yùn)算符方括號:

[]段重設(shè)符

段寄存器名:[]方括號中內(nèi)容為操作數(shù)的偏移地址用于修改默認(rèn)的段基地址第23頁/共77頁25§4.2

偽指令掌握:偽指令的格式及實(shí)現(xiàn)的操作偽指令的應(yīng)用第24頁/共77頁26偽指令由匯編程序執(zhí)行的“指令系統(tǒng)”作用:定義變量;分配存儲區(qū)定義邏輯段;指示程序開始和結(jié)束;定義過程等。第25頁/共77頁27常用偽指令數(shù)據(jù)定義偽指令符號定義偽指令段定義偽指令結(jié)束偽指令過程定義偽指令宏命令偽指令第26頁/共77頁28一、數(shù)據(jù)定義偽指令用于定義數(shù)據(jù)區(qū)中變量的類型及大小格式:

[變量名]偽指令助記符操作數(shù),…;[注釋]符號地址定義變量類型定義變量值及區(qū)域大小第27頁/共77頁291.

數(shù)據(jù)定義偽指令助記符DB定義的變量為字節(jié)型DW定義的變量為字類型(雙字節(jié))DD定義的變量為雙字型(4字節(jié))DQ定義的變量為4字型(8字節(jié))DT定義的變量為10字節(jié)型第28頁/共77頁30數(shù)據(jù)定義偽指令例DATA1DB11H,22H,33H,44HDATA2DW11H,22H,3344HDATA3DD22H,22H,33445566H以上變量在內(nèi)存中的存放形式第29頁/共77頁31數(shù)據(jù)定義偽指令例_變量在內(nèi)存中的分布DATA111223344DATA2224411000033DATA3220022000066554433第30頁/共77頁32數(shù)據(jù)定義偽指令的幾點(diǎn)說明偽指令的性質(zhì)決定所定義變量的類型;定義字符串必須用DB偽指令例:

DATA1DB‘ABCD’,66H‘A’‘B’‘C’‘D’41H42H43H44H66H第31頁/共77頁332.

重復(fù)操作符作用:為一個數(shù)據(jù)區(qū)的各單元設(shè)置相同的初值目的:常用于聲明一個數(shù)據(jù)區(qū)格式:

[變量名]偽指令助記符nDUP(初值,…)例:

M1

DW20DUP(0)M2DB10DUP(5)20個初值為0的字單元10個初值為5的字節(jié)單元第32頁/共77頁343.

“?”的作用表示隨機(jī)值,用于預(yù)留存儲空間MEM1DB34H,’A’,?DW20DUP(?)預(yù)留40個字節(jié)單元,每單元初值為隨機(jī)值隨機(jī)數(shù)占1個字節(jié)單元第33頁/共77頁35數(shù)據(jù)定義偽指令例M1DB‘Howareyou?’M2DW3DUP(11H),3344H

DB4DUP(?)M3DB3DUP(22H,11H,?)變量在內(nèi)存中的分區(qū)第34頁/共77頁36數(shù)據(jù)定義偽指令例M1‘H’‘o’‘w’‘‘‘a(chǎn)’M211H11H00H44H33H‘r’‘e’‘‘‘y’‘o’‘u’‘?’11H00H00H隨機(jī)數(shù)M311H22H11H22H11H22HXXXXXXXXXXXXXX第35頁/共77頁37二、符號定義偽指令格式:符號名EQU表達(dá)式操作:用符號名取代后邊的表達(dá)式,不可重新定義例:CONSTANT EQU 100VAREQU30H+99HEQU說明的表達(dá)式不占用內(nèi)存空間第36頁/共77頁38三、段定義偽指令說明邏輯段的起始和結(jié)束;說明不同程序模塊中同類邏輯段之間的聯(lián)系形態(tài)第37頁/共77頁39段定義偽指令格式段名SEGMENT[定位類型][組合類型][’類別’]

┇段名ENDS說明邏輯段的起點(diǎn)說明不同模塊中同名段的組和連接方式第38頁/共77頁40定位類型PARA:段的起點(diǎn)從節(jié)邊界開始(16個字節(jié)為1節(jié))BYTE:段的起點(diǎn)從存儲器任何地址開始WORD:段的起點(diǎn)從偶地址開始PAGE:段的起點(diǎn)從頁邊界開始(256個字節(jié)為1頁)第39頁/共77頁41組合類型與其它模塊中的同名段在滿足定位類型的前提下具有的組合方式:NONE:不組合PUBLIC:依次連接(順序由LINK程序確定)COMMON:覆蓋連接STACK:堆棧段的依次連接AT表達(dá)式:段定義在表達(dá)式值為段基的節(jié)邊界MEMORY:相應(yīng)段在同名段的最高地址處。第40頁/共77頁42類別不同模塊連接時將相同類別的段放在連續(xù)的內(nèi)存區(qū)域中第41頁/共77頁43段定義偽指令例DATASEGMENTMEM1DB11H,22HMEM2DB‘Hello!’

MEM3DW2DUP(?)DATAENDS變量在邏輯段中的位置就代表了它的偏移地址表示變量所在邏輯段的段地址表示變量的類型第42頁/共77頁44四、設(shè)定段寄存器偽指令說明所定義邏輯段的性質(zhì)格式:

ASSUME段寄存器名:段名[,段寄存器名:段名,…]第43頁/共77頁45五、結(jié)束偽指令表示源程序結(jié)束格式:

END[標(biāo)號]實(shí)際編程中必有,該處標(biāo)號須與程序第1條指令前的標(biāo)號一致。第44頁/共77頁46六、過程定義偽指令用于定義一個過程體格式:

過程名PROC[NEAR/FAR]┇RET過程名ENDPP157例過程的入口地址第45頁/共77頁過程定義及調(diào)用例定義延時子程序DELAYPROCPUSHBXPUSHCX

MOVBL,2NEXT:MOVCX,4167W10M:LOOPW10MDECBLJNZNEXTPOPCXPOPBXRETDELAYENDP47調(diào)用延時子程序:CALLDELAY第46頁/共77頁48七、宏命令偽指令

源程序中由匯編程序識別的具有獨(dú)立功能的一段程序代碼格式:

宏命令名MACRO<形式參數(shù)>

┇ENDM宏體宏第47頁/共77頁八、其它偽指令

段內(nèi)程序代碼或變量的起始偏移地址格式:ORG表達(dá)式例:DATASEGMENTORG200M1DB12H,4DUP(0)M2DW1234HDATAENDS計(jì)算值為非負(fù)常數(shù)ORGM10034121200┇M2200205第48頁/共77頁50§4.3

功能調(diào)用BIOS駐留在ROM中的基本輸入/輸出系統(tǒng)加電自檢,裝入引導(dǎo),主要I/O設(shè)備處理程序及接口控制BIOS功能調(diào)用使程序員不必了解硬件操作的細(xì)節(jié)而實(shí)現(xiàn)相應(yīng)的操作。DOS磁盤操作系統(tǒng)相比BIOS,對硬件的依賴性小DOS功能與BIOS功能均通過中斷方式調(diào)用。第49頁/共77頁DOS中斷與BIOS中斷DOS中斷包括:設(shè)備管理,目錄管理,文件管理,其它在某些情況下,同樣的功能既可選擇DOS中斷,也可選擇BIOS中斷51第50頁/共77頁DOS調(diào)用和BIOS調(diào)用的基本步驟將調(diào)用參數(shù)裝入指定的寄存器;將功能號裝入AH;按中斷類型號調(diào)用DOS或BIOS中斷;檢查返回參數(shù)是否正確。52第51頁/共77頁53一、DOS功能調(diào)用說明:DOS中斷是包含多個子功能的功能包;各子功能用功能號區(qū)分;用軟中斷指令調(diào)用,中斷類型碼固定為21H。調(diào)用格式:MOVAH,功能號<置相應(yīng)參數(shù)>

INT21H第52頁/共77頁541.單字符輸入調(diào)用方法:

MOVAH,01INT21H輸入的字符在AL中第53頁/共77頁55單字符輸入例GET_KEY:

MOV AH,1

INT 21H

CMP AL,’Y’

JZ YES CMP AL,’N’

JZ NO JMP GET_KEY

YES:┇ NO: ┇交互式應(yīng)答程序第54頁/共77頁562.字符串輸入注意問題:調(diào)用格式字符輸入緩沖區(qū)的定義第55頁/共77頁57調(diào)用格式

功能號OAH字符串在內(nèi)存中的存放地址INT21HAHDS:DX第56頁/共77頁58定義字符緩沖區(qū)用戶自定義緩沖區(qū)格式:0DHN1N2整個緩沖區(qū)最大可鍵入字符數(shù)實(shí)際鍵入字符數(shù)存放鍵入的字符存放字符個數(shù):≤255第57頁/共77頁59輸入字符串程序段DAT1DB20,?,20DUP(?)┇

LEADX,DAT1MOVAH,0AHINT21H在數(shù)據(jù)段中定義第58頁/共77頁60輸入緩沖區(qū)14H?20個字節(jié)定義后的輸入緩沖區(qū)初始狀態(tài):第59頁/共77頁613.單字符顯示輸出功能號O2H待輸出字符INT21HAHDL第60頁/共77頁62單字符顯示輸出例MOV AH,02MOV DL,41HINT 21H

執(zhí)行結(jié)果:屏幕顯示A第61頁/共77頁634.字符串輸出顯示

功能號O9H待輸出字符串的偏移地址INT21HAHDS:DX第62頁/共77頁64字符串輸出顯示注意點(diǎn):被顯示的字符串必須以‘$’結(jié)束;所顯示的內(nèi)容不應(yīng)出現(xiàn)非可見的ASCII碼;若考慮輸出格式需要,在定義字符串后,加上回車符和換行符。第63頁/共77頁65字符串輸出顯示例DATA SEGMENTMESS1DB‘InputString:’,0DH,0AH,’$’DATAENDSCODESEGMENT ┇MOV AH,09MOV DX,OFFSETMESS1INT 21H┇第64頁/共77頁5.返回操作系統(tǒng)(DOS)功能功能號:4CH調(diào)用格式:MOVAH,4CHINT21H功能:程序執(zhí)行完該2條語句后能正常返回DOS常位于程序結(jié)尾處。66第65頁/共77頁二、BIOS功能調(diào)用通過中斷指令調(diào)用相應(yīng)的BIOS中斷服務(wù)程序BIOS中斷服務(wù)程序?qū)嶋H上是一些對端口的輸入輸出操作,是微機(jī)系統(tǒng)中軟件與硬件之間的一個可編程接口。光驅(qū)、硬盤管理;中斷設(shè)置等67附錄D第66頁/共77頁鍵盤狀態(tài)檢驗(yàn)可利用類型碼為16H的BIOS中斷判斷是否有任意鍵按下調(diào)用格式:AHINT16H判斷方法:若ZF=0若ZF=168功能號1有鍵按下無鍵按下第67頁/共77頁例:在屏幕上顯示信息,當(dāng)有任意鍵按下時退出69DSEGSEGMENT

MESSDB‘Hello,World!’,0DH,0AH,’$’DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXAGAIN:LEADX,MESSMOVAH,9INT21HMOVAH,1INT16HJZAGAINMOVAH,4CHINT21HCSEGENDSENDSATRT第68頁/共77頁鍵盤狀態(tài)檢驗(yàn)判斷是否有任意鍵按下的方法可以用DOS軟中斷,功能號為0BH,出口參數(shù)為AL。格式:MOVAH,0BHINT21H若AL=FFH,則有鍵按下;若AL=0,則無鍵按下70第69頁/共77頁DOS和BIOS功能調(diào)用小結(jié)均通過中斷指令調(diào)用。1個中斷類型碼對應(yīng)1個功能程序包;每個程序包中的子功能通過功能號區(qū)分,調(diào)用時功能號須送AH;部分功能既可用DOS中斷也可以用BIOS中斷;注意不同子功能的入口/出口參數(shù)要求;DOS和BIOS中斷均可能影響AX。71第70頁/共77頁72§4.4

匯編語言程序設(shè)計(jì)設(shè)計(jì)步驟:根據(jù)實(shí)際問題抽象出數(shù)學(xué)模型確定算法畫程序流程圖分配內(nèi)存工作單元和寄存器程序編碼調(diào)試第71頁/共77頁73匯編語言程序結(jié)構(gòu)順序結(jié)構(gòu)循環(huán)結(jié)構(gòu)先判定型后判定型分支結(jié)構(gòu)單分支多分支子程序結(jié)構(gòu)第72頁/共77頁例4-16對于三個8位無符號數(shù)86H,34H和21H,編寫S=86H*34H-21H的程序

DATASEGMENTNUMDB86H,34H,21HRESULTDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,NUMLEADI,RESULTMOVAL,[SI]MOVBL,[SI+1]MULBLMOVBL,[SI+2]MOVBH,0SUBAX,BXMOV[DI],AXMOVAH,4CHINT21HCODEENDS

ENDSTART順序結(jié)構(gòu)程序設(shè)計(jì)例題第73頁/共77頁分支結(jié)構(gòu)程序設(shè)計(jì)例題例4-18編寫程序,數(shù)據(jù)以字節(jié)變量BUFFER為首地址的100個單元清零。參考書上程序DATASEGMENTBUFFERDB100DUP(?)COUNTDB100DATAENDSSTACKSEGMENTDW32DUP(?

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論