




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
會計學1第4章-匯編語言程序設計2§4.1
匯編語言源程序理解:匯編語言源程序的結構匯編語言語句類型及格式第1頁/共77頁3一、匯編語言源程序結構第2頁/共77頁41.
匯編語言源程序與匯編程序匯編語言源程序匯編程序用助記符編寫匯編程序匯編語言源程序機器語言目標程序源程序的編譯程序第3頁/共77頁52.
匯編語言程序設計與執行過程輸入匯編語言源程序(EDIT)匯編(MASM)鏈接(LINK)調試(TD)源文件.ASM目標文件.OBJ可執行文件.EXE最終程序第4頁/共77頁6匯編語言源程序結構數據段名SEGMENT
…數據段名ENDS附加段名SEGMENT
…附加段名ENDS堆棧段名
SEGMENT…堆棧段名
ENDS代碼段名
SEGMENT…代碼段名
ENDS
END
第5頁/共77頁7一個完整源程序結構例DSEGSEGMENTDATA1DB1,2,3DUP(?)DATA2DW1234HDSEGENDSESEGSEGMENTDB20DUP(?)ESEGENDSSSEGSEGMENTSTACK‘STACK’DB200DUP(?)SSEGENDS表示該邏輯段的段地址此處還不能確定邏輯段的性質第6頁/共77頁8一個完整源程序結構例CSEGSEGMENTASSUMECS:CSEG,DS:DSEG,ES:ESEG,SS:SSEGSTART:MOVAX,DSEGMOVDS,AXMOVAX,ESEGMOVES,AXMOVAX,SSEGMOVSS,AX┇CSEGENDSENDSTART源程序代碼段寄存器初始化——將段地址送相應的段寄存器說明各邏輯段的性質第7頁/共77頁源程序的結構特點(1)匯編語言程序通常由若干段組成,段由偽指令SEGMENT與ENDS定義,各段順序任意,段的數目按需要確定,原則上不受限制。(2)段由若干語句組成,語句以指令為主體而構成。一條語句寫在一行上,書寫時語句的各部分應盡量對齊(3)匯編語言程序中至少要有一個啟動標號,作為程序開始執行時目標代碼的入口地址。啟動標號常用START、BEGIN、MAIN等命名。(4)同時需要配合ASSUME偽指令指明邏輯段是代碼段、堆棧段、數據段還是附加段為增加程序的可讀性,可在匯編語言語句“;”后加上注釋。(5)每個源程序在代碼中都必須有返回DOS操作系統的指令語名.匯編語言程序設計中,有多種返回DOS的方法,但一般利用DOS功能調用的4CH子功能實現,它需要的入口參數是AL=返回數碼(通常用0表示程序沒有錯誤)movax,4c00h int21h第8頁/共77頁10二、匯編語言語句類型及格式第9頁/共77頁111.
匯編語言語句類型指令性語句指示性語句CPU執行的語句,能夠生成目標代碼CPU不執行,而由匯編程序執行的語句,不生成目標代碼第10頁/共77頁122.
匯編語言語句格式
指令性語句:
[標號:][前綴]助記符[操作數],[操作數][;注釋]指令的符號地址標號后要有冒號操作碼注釋前加分號第11頁/共77頁13指示性語句[名字]偽指令助記符操作數[,操作數,…][;注釋]變量的符號地址其后不加冒號指示性語句中至少有一個操作數第12頁/共77頁143.
標號、名字標號后有冒號,在指令性語句前;名字后不加冒號,在指示性語句前。英文字母、數字及專用字符組成,最大長度不能超過31個,且不能由數字打頭,不能用保留字(如寄存器名,指令助記符,偽指令)。 第13頁/共77頁154.
操作數寄存器存儲器單元常量變量或標號表達式第14頁/共77頁16常量數字常量字符串常量例:‘A’
MOVAL,’A’例:’ABCD’匯編時被譯成對應的ASCII碼41H,42H,43H,44H用單引號引起的字符或字符串第15頁/共77頁17變量代表內存中的數據區,程序中視為存儲器操作數變量的屬性:變量所在段的段地址變量單元地址與段首地址之間的位移量。字節型、字型和雙字型段值偏移量類型第16頁/共77頁18表達式算術運算邏輯運算*關系運算取值運算和屬性運算其它運算第17頁/共77頁19算術運算和邏輯運算符算術運算符+,-,*,/,MOD邏輯運算符AND,OR,NOT,XOR例:MOVAL,8AND4MOVAL,8+4-1第18頁/共77頁20取值運算符取得其變量或標號的偏移地址取得其變量或標號的段地址TYPE取變量的類型LENGTH取所定義存儲區的長度SIZE取所定義存儲區的字節數用于分析存儲器操作數的屬性獲取變量的屬性值OFFSETSEG第19頁/共77頁21取值運算符例
MOVAX,SEGDATAMOVDS,AXMOVBX,OFFSETDATA
LEABX,DATA等價于第20頁/共77頁22取值運算符例若BUFFER存儲區用如下偽指令定義:
BUFFERDW200DUP(0)則:
TYPE BUFFER 等于2
LENGTHBUFFER 等于200
SIZEBUFFER 等于400第21頁/共77頁23屬性運算符用于指定其后存儲器操作數的類型運算符:PTR例:
MOVBYTEPTR[BX],12H第22頁/共77頁24其它運算符方括號:
[]段重設符
段寄存器名:[]方括號中內容為操作數的偏移地址用于修改默認的段基地址第23頁/共77頁25§4.2
偽指令掌握:偽指令的格式及實現的操作偽指令的應用第24頁/共77頁26偽指令由匯編程序執行的“指令系統”作用:定義變量;分配存儲區定義邏輯段;指示程序開始和結束;定義過程等。第25頁/共77頁27常用偽指令數據定義偽指令符號定義偽指令段定義偽指令結束偽指令過程定義偽指令宏命令偽指令第26頁/共77頁28一、數據定義偽指令用于定義數據區中變量的類型及大小格式:
[變量名]偽指令助記符操作數,…;[注釋]符號地址定義變量類型定義變量值及區域大小第27頁/共77頁291.
數據定義偽指令助記符DB定義的變量為字節型DW定義的變量為字類型(雙字節)DD定義的變量為雙字型(4字節)DQ定義的變量為4字型(8字節)DT定義的變量為10字節型第28頁/共77頁30數據定義偽指令例DATA1DB11H,22H,33H,44HDATA2DW11H,22H,3344HDATA3DD22H,22H,33445566H以上變量在內存中的存放形式第29頁/共77頁31數據定義偽指令例_變量在內存中的分布DATA111223344DATA2224411000033DATA3220022000066554433第30頁/共77頁32數據定義偽指令的幾點說明偽指令的性質決定所定義變量的類型;定義字符串必須用DB偽指令例:
DATA1DB‘ABCD’,66H‘A’‘B’‘C’‘D’41H42H43H44H66H第31頁/共77頁332.
重復操作符作用:為一個數據區的各單元設置相同的初值目的:常用于聲明一個數據區格式:
[變量名]偽指令助記符nDUP(初值,…)例:
M1
DW20DUP(0)M2DB10DUP(5)20個初值為0的字單元10個初值為5的字節單元第32頁/共77頁343.
“?”的作用表示隨機值,用于預留存儲空間MEM1DB34H,’A’,?DW20DUP(?)預留40個字節單元,每單元初值為隨機值隨機數占1個字節單元第33頁/共77頁35數據定義偽指令例M1DB‘Howareyou?’M2DW3DUP(11H),3344H
DB4DUP(?)M3DB3DUP(22H,11H,?)變量在內存中的分區第34頁/共77頁36數據定義偽指令例M1‘H’‘o’‘w’‘‘‘a’M211H11H00H44H33H‘r’‘e’‘‘‘y’‘o’‘u’‘?’11H00H00H隨機數M311H22H11H22H11H22HXXXXXXXXXXXXXX第35頁/共77頁37二、符號定義偽指令格式:符號名EQU表達式操作:用符號名取代后邊的表達式,不可重新定義例:CONSTANT EQU 100VAREQU30H+99HEQU說明的表達式不占用內存空間第36頁/共77頁38三、段定義偽指令說明邏輯段的起始和結束;說明不同程序模塊中同類邏輯段之間的聯系形態第37頁/共77頁39段定義偽指令格式段名SEGMENT[定位類型][組合類型][’類別’]
┇段名ENDS說明邏輯段的起點說明不同模塊中同名段的組和連接方式第38頁/共77頁40定位類型PARA:段的起點從節邊界開始(16個字節為1節)BYTE:段的起點從存儲器任何地址開始WORD:段的起點從偶地址開始PAGE:段的起點從頁邊界開始(256個字節為1頁)第39頁/共77頁41組合類型與其它模塊中的同名段在滿足定位類型的前提下具有的組合方式:NONE:不組合PUBLIC:依次連接(順序由LINK程序確定)COMMON:覆蓋連接STACK:堆棧段的依次連接AT表達式:段定義在表達式值為段基的節邊界MEMORY:相應段在同名段的最高地址處。第40頁/共77頁42類別不同模塊連接時將相同類別的段放在連續的內存區域中第41頁/共77頁43段定義偽指令例DATASEGMENTMEM1DB11H,22HMEM2DB‘Hello!’
MEM3DW2DUP(?)DATAENDS變量在邏輯段中的位置就代表了它的偏移地址表示變量所在邏輯段的段地址表示變量的類型第42頁/共77頁44四、設定段寄存器偽指令說明所定義邏輯段的性質格式:
ASSUME段寄存器名:段名[,段寄存器名:段名,…]第43頁/共77頁45五、結束偽指令表示源程序結束格式:
END[標號]實際編程中必有,該處標號須與程序第1條指令前的標號一致。第44頁/共77頁46六、過程定義偽指令用于定義一個過程體格式:
過程名PROC[NEAR/FAR]┇RET過程名ENDPP157例過程的入口地址第45頁/共77頁過程定義及調用例定義延時子程序DELAYPROCPUSHBXPUSHCX
MOVBL,2NEXT:MOVCX,4167W10M:LOOPW10MDECBLJNZNEXTPOPCXPOPBXRETDELAYENDP47調用延時子程序:CALLDELAY第46頁/共77頁48七、宏命令偽指令
源程序中由匯編程序識別的具有獨立功能的一段程序代碼格式:
宏命令名MACRO<形式參數>
┇
┇ENDM宏體宏第47頁/共77頁八、其它偽指令
段內程序代碼或變量的起始偏移地址格式:ORG表達式例:DATASEGMENTORG200M1DB12H,4DUP(0)M2DW1234HDATAENDS計算值為非負常數ORGM10034121200┇M2200205第48頁/共77頁50§4.3
功能調用BIOS駐留在ROM中的基本輸入/輸出系統加電自檢,裝入引導,主要I/O設備處理程序及接口控制BIOS功能調用使程序員不必了解硬件操作的細節而實現相應的操作。DOS磁盤操作系統相比BIOS,對硬件的依賴性小DOS功能與BIOS功能均通過中斷方式調用。第49頁/共77頁DOS中斷與BIOS中斷DOS中斷包括:設備管理,目錄管理,文件管理,其它在某些情況下,同樣的功能既可選擇DOS中斷,也可選擇BIOS中斷51第50頁/共77頁DOS調用和BIOS調用的基本步驟將調用參數裝入指定的寄存器;將功能號裝入AH;按中斷類型號調用DOS或BIOS中斷;檢查返回參數是否正確。52第51頁/共77頁53一、DOS功能調用說明:DOS中斷是包含多個子功能的功能包;各子功能用功能號區分;用軟中斷指令調用,中斷類型碼固定為21H。調用格式:MOVAH,功能號<置相應參數>
INT21H第52頁/共77頁541.單字符輸入調用方法:
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: ┇交互式應答程序第54頁/共77頁562.字符串輸入注意問題:調用格式字符輸入緩沖區的定義第55頁/共77頁57調用格式
功能號OAH字符串在內存中的存放地址INT21HAHDS:DX第56頁/共77頁58定義字符緩沖區用戶自定義緩沖區格式:0DHN1N2整個緩沖區最大可鍵入字符數實際鍵入字符數存放鍵入的字符存放字符個數:≤255第57頁/共77頁59輸入字符串程序段DAT1DB20,?,20DUP(?)┇
LEADX,DAT1MOVAH,0AHINT21H在數據段中定義第58頁/共77頁60輸入緩沖區14H?20個字節定義后的輸入緩沖區初始狀態:第59頁/共77頁613.單字符顯示輸出功能號O2H待輸出字符INT21HAHDL第60頁/共77頁62單字符顯示輸出例MOV AH,02MOV DL,41HINT 21H
執行結果:屏幕顯示A第61頁/共77頁634.字符串輸出顯示
功能號O9H待輸出字符串的偏移地址INT21HAHDS:DX第62頁/共77頁64字符串輸出顯示注意點:被顯示的字符串必須以‘$’結束;所顯示的內容不應出現非可見的ASCII碼;若考慮輸出格式需要,在定義字符串后,加上回車符和換行符。第63頁/共77頁65字符串輸出顯示例DATA SEGMENTMESS1DB‘InputString:’,0DH,0AH,’$’DATAENDSCODESEGMENT ┇MOV AH,09MOV DX,OFFSETMESS1INT 21H┇第64頁/共77頁5.返回操作系統(DOS)功能功能號:4CH調用格式:MOVAH,4CHINT21H功能:程序執行完該2條語句后能正常返回DOS常位于程序結尾處。66第65頁/共77頁二、BIOS功能調用通過中斷指令調用相應的BIOS中斷服務程序BIOS中斷服務程序實際上是一些對端口的輸入輸出操作,是微機系統中軟件與硬件之間的一個可編程接口。光驅、硬盤管理;中斷設置等67附錄D第66頁/共77頁鍵盤狀態檢驗可利用類型碼為16H的BIOS中斷判斷是否有任意鍵按下調用格式:AHINT16H判斷方法:若ZF=0若ZF=168功能號1有鍵按下無鍵按下第67頁/共77頁例:在屏幕上顯示信息,當有任意鍵按下時退出69DSEGSEGMENT
MESSDB‘Hello,World!’,0DH,0AH,’$’DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGSTART:MOVAX,DSEGMOVDS,AXAGAIN:LEADX,MESSMOVAH,9INT21HMOVAH,1INT16HJZAGAINMOVAH,4CHINT21HCSEGENDSENDSATRT第68頁/共77頁鍵盤狀態檢驗判斷是否有任意鍵按下的方法可以用DOS軟中斷,功能號為0BH,出口參數為AL。格式:MOVAH,0BHINT21H若AL=FFH,則有鍵按下;若AL=0,則無鍵按下70第69頁/共77頁DOS和BIOS功能調用小結均通過中斷指令調用。1個中斷類型碼對應1個功能程序包;每個程序包中的子功能通過功能號區分,調用時功能號須送AH;部分功能既可用DOS中斷也可以用BIOS中斷;注意不同子功能的入口/出口參數要求;DOS和BIOS中斷均可能影響AX。71第70頁/共77頁72§4.4
匯編語言程序設計設計步驟:根據實際問題抽象出數學模型確定算法畫程序流程圖分配內存工作單元和寄存器程序編碼調試第71頁/共77頁73匯編語言程序結構順序結構循環結構先判定型后判定型分支結構單分支多分支子程序結構第72頁/共77頁例4-16對于三個8位無符號數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順序結構程序設計例題第73頁/共77頁分支結構程序設計例題例4-18編寫程序,數據以字節變量BUFFER為首地址的100個單元清零。參考書上程序DATASEGMENTBUFFERDB100DUP(?)COUNTDB100DATAENDSSTACKSEGMENTDW32DUP(?
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 訂購仔豬合同協議書模板
- 2025年數據驅動測試試題及答案
- 退休反聘合同解除協議書
- 房屋換頂合同協議書
- 重點詞匯現代漢語考試試題及答案
- 所有權與責任在測試中的傳遞原理試題及答案
- 致勝策略2025年計算機二級VFP試題及答案
- 2025年計算機VFP考試學習理念試題及答案
- 2025年計算機二級JAVA復習與應試的最佳方案及試題及答案
- 安徽省黃山市“八校聯盟”2023-2024學年高二上學期期中考試物理 含解析
- 行政管理(專科)畢業實習
- 2024年中國鐵路濟南局集團有限公司招聘筆試參考題庫含答案解析
- 《垃圾填埋場》課件
- 三高科普知識講座
- 銷售動力激發心態
- 2024年生產部員工培訓計劃
- 校園綠化養護投標方案
- 【基于STM32廚房安全環境監測的設計與實現9400字(論文)】
- 南京玄武外國語中學英語新初一分班試卷
- 高邊坡施工腳手架搭設技術
- 免稅資格申請模版
評論
0/150
提交評論