




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第四章匯編語言程序格式第1頁,共39頁,2023年,2月20日,星期三1上機環(huán)境硬件系統(tǒng)軟件
應用軟件
操作系統(tǒng):DOS系統(tǒng)編輯器:EDIT.exe編程序:MASM.exe連接程序:LINK.exe調試程序:DEBUG.exe用戶開發(fā)的程序:ABC.exe等CPU、存儲器(ROM、RAM)、I/O接口、輸入、輸出設備第2頁,共39頁,2023年,2月20日,星期三2一、匯編語言上機過程D:>EDITABC.asmD:>MASMABC;有語法錯,回EDIT下改該程序D:>LINKABC;有錯,回在EDIT下改程序D:>ABC運行結果錯,回EDIT下改程序或在DEBUG下調試,找原因。D:>DEBUGABC.exe編輯源程序
EDITABC.ASM匯編源程序
MASM
ABC.ASM形成目標程序ABC.OBJ連接目標程序
LINKABC.OBJ有連接錯誤信息?形成可執(zhí)行程序
ABC.EXE裝入可執(zhí)行程序到內存,并執(zhí)行D:\>sub>ABC下一程序用DEBUG調試可執(zhí)行程序D:\>sub>DEBUG
ABC.EXE找到原因YNYNNYN有匯編錯誤信息?Y運行結果正確?用DEBUG調試程序查錯?第3頁,共39頁,2023年,2月20日,星期三3二、匯編語言程序結構一、程序結構二、語句結構第4頁,共39頁,2023年,2月20日,星期三4一、程序結構程序由數(shù)條語句構成,每條語句占一行。指令性語句(指令語句)指示性語句(偽指令語句)分段結構程序按段編寫,與8088內存分段編址相對應。每段由偽操作SEGMENT開始、由ENDS結束。程序最后為END結束語句,后跟一啟動地址。啟動地址指示程序開始執(zhí)行的第一條語句。程序中設有返回DOS的功能。使程序執(zhí)行完后返回DOS系統(tǒng)的命令接受狀態(tài)。
程序中用到內存操作數(shù)時,
應按操作數(shù)的尋址方式,給相應的段寄存器賦值;匯編語言程序結構例一movs.asm;實現(xiàn)數(shù)據傳送功能aaSEGMENT
;數(shù)據段1str1DB'Hello!’aaENDSbbSEGMENT
;數(shù)據段2str2DB6dup(?)bbENDSccSEGMENT
;代碼段ASSUMECS:cc,DS:aa,ES:bbstart:CLDMOVAX,aaMOVDS,AXLEASI,str1MOVAX,SEGstr2MOVES,AXMOVDI,OFFSETstr2MOVCX,6REPMOVSB
MOVAH,4CHINT21H
;返回DOSccENDS
ENDstart;指示程序結束第5頁,共39頁,2023年,2月20日,星期三51.名字項
據語句功能的不同,
名字項可用來表示:段名、變量名、標號、過程名以及常量名等。二、語句結構第6頁,共39頁,2023年,2月20日,星期三6名字項用一個符號表示。
對符號的規(guī)定:①由字符A~Z,a~z,0~9及符號@、$、下劃線_等組成,最長31個字符,超出部分忽略。②不能用數(shù)字打頭,以免與十六進制數(shù)相混。③不使用匯編程序中的保留字。(如指令的助記符等)④對定義的符號不區(qū)分大小寫。第7頁,共39頁,2023年,2月20日,星期三72.助記符項助記符可以是指令、偽操作中的助記符。對于指令,匯編程序將其翻譯成機器語言指令。
MOVAX,100→B80001對于偽操作,匯編程序據其要求的功能進行處理。dataSEGMENT
→data與一段值對應stringDB‘Tsinghua’→string與一內存地址對應第8頁,共39頁,2023年,2月20日,星期三83.操作數(shù)項操作數(shù)給出參與操作的數(shù)或數(shù)所在的地方。操作數(shù)多于一個時,用逗號分開。操作數(shù)可以是常數(shù)、寄存器、存儲器操作數(shù)、標號名、過程名或表達式等。第9頁,共39頁,2023年,2月20日,星期三9常數(shù)給出具體的數(shù)據??梢允菙?shù)字常量或字符常量。◢◢
數(shù)字默認十進制,也可加D表示十進制數(shù)。如1234D,1234◢
◢
數(shù)字后加B表示二進制數(shù)。如1010B◢
◢
數(shù)字后加H表示十六進制數(shù)。如1234H◢
◢
字符常量,用單引號表示。如‘1234’匯編時,用字符對應的ASCII表示。如31H,32H,33H,34H例
data1DB12,34,56;十進制data2DB12H,34H,56H;十六進制MOVAL,‘G’;字符stringDB‘1234’;字符串第10頁,共39頁,2023年,2月20日,星期三10A、B、C、D、E、F開頭的十六進制數(shù)前面加0,與H結尾的標識符區(qū)別。如寄存器名AH、BH、CH、
DH變量名abcdH等例
movAL,0AHmovAL,AHmovBX,0abcdH第11頁,共39頁,2023年,2月20日,星期三114.注釋項由分號引出,用來說明語句或程序的功能。匯編程序對分號后的內容不做處理。作用:①注釋程序,增強程序可讀性。
②可放在語句最前,暫時注釋某語句,調試程序用。例
、、、
;MOVAH,2;顯示提示信息
;MOVDL,’A’
;INT21H
、、、第12頁,共39頁,2023年,2月20日,星期三12指示性語句與指令性語句:指令性語句是用指令系統(tǒng)中的指令構成的語句。
例MOVAX,BX指示性語句是指示匯編程序進行匯編的操作。
例MOVAX,4+8中的+codeSEGMENT中的SEGMENTMOVBX,OFFSETstring中的OFFSET第13頁,共39頁,2023年,2月20日,星期三13指示性語句與指令性語句區(qū)別一個程序經匯編,連接和裝入內存后,在執(zhí)行程序之前:
◢指示性語句的功能已經完成,故又稱偽操作。
◢而指令性語句的功能尚未完成,需控制CPU去執(zhí)行,才能完成。第14頁,共39頁,2023年,2月20日,星期三14常用偽操作介紹一、程序開始和結束二、段定義三、變量定義四、ASSUME語句五、表達式中的操作符六、過程定義七、等值定義第15頁,共39頁,2023年,2月20日,星期三15一、模塊定義和程序結束偽操作1.NAME和TITLE偽操作
格式
NAME
模塊名
格式
TITLE
模塊名在源程序開始可用NAME或TITLE為模塊命名,模塊名的作用是指示給連接程序進行連接用。源程序中可無模塊定義,此時源文件名作為模塊名。
第16頁,共39頁,2023年,2月20日,星期三162.END偽操作
格式
END啟動地址作用是指示源程序到此結束。匯編程序對END之后的語句不進行處理。程序中所有有效語句應放在END語句之前。源程序中必須有END結束語句。匯編程序對無END語句的源程序不進行處理,只給出無END語句錯誤信息。第17頁,共39頁,2023年,2月20日,星期三17二、段定義偽操作
格式
段名SEGMENT、、、、、、段名ENDS段定義由偽操作SEGMENT開始、ENDS結束。其中:SEGMENT和ENDS必須成對出現(xiàn),且語句前必須有段名,段名必須相同。SEGMENT和ENDS語句之間可以有指令和其他偽操作,表示存放在該段內存的變量、指令或其他偽操作對該段內存的處理程序中可以定義多個段。程序經匯編、連接及裝入內存后,段名為一具體的段值。第18頁,共39頁,2023年,2月20日,星期三18三、變量定義偽操作
格式
變量名類型助記符操作數(shù)[,操作數(shù),...]用來定義程序中所用的內存操作數(shù)。其中變量名指示內存操作數(shù)的地址(符號地址)
類型助記符指示內存操作數(shù)的類型(字節(jié)、字、雙字等)
操作數(shù)指示內存操作數(shù)的內容匯編程序將定義的操作數(shù),按其類型分配內存單元數(shù),順序存入變量名指向的內存單元中。常用的類型助記符有:DB指示其后的操作數(shù)為字節(jié)類型DW指示其后的操作數(shù)為字類型DD指示其后的操作數(shù)為雙字類型第19頁,共39頁,2023年,2月20日,星期三19例1:定義賦初值的變量dataSEGMENT
xxDB1,-1,0fcH
yyDW1,-1,0fcH
zzDD1,-1,0fcHdataENDS第20頁,共39頁,2023年,2月20日,星期三20例2:定義字符串變量(只能用DB定義)dataSEGMENT
str1DB'TsingHua'
str2DB'INPUT:',0dH,0aH,'$'dataENDS注意:3個及其以上的字符,只能用DB定義str1DW‘abcd’str2DD‘abcd’str1str25473696e67487561494e5055543a0d0a24‘T’‘s’‘i’‘n’‘g’‘H’‘u’‘a’‘I’‘N’‘P’‘U’‘T’‘:’0dH0aH‘$’第21頁,共39頁,2023年,2月20日,星期三21操作數(shù)可以是用常量、表達式和?表示。常量和表達式表示內存操作數(shù)的初始值,其值應在其定義的類型范圍內,否則匯編出錯。例aaDB270bbDW80000用?表示不置初始值的內存操作數(shù)。
例ccDB?可用DUP復制操作符定義相同的操作數(shù),其格式為
重復次數(shù)DUP(操作數(shù))
例eeDB3DUP(4)等價于eeDB4,4,4第22頁,共39頁,2023年,2月20日,星期三22四、ASSUME偽操作
格式
ASSUME段寄存器:段名[,段寄存器:段名,…]
其中段寄存器為CS、DS、ES、SS中的一個
段名為用偽操作SEGMENT定義過的段名例
ASSUMECS:cc,DS:aaASSUME偽操作的作用指示匯編程序指令中用到的標號、過程及變量所在的段。其中對標號、過程必須用CS段寄存器指示
對變量可用CS、DS、ES、SS段寄存器指示第23頁,共39頁,2023年,2月20日,星期三23若未用ASSUME語句指示指令中用到的標號、過程和變量所在的段,匯編程序將給出錯誤信息。ASSUME語句只起指示作用,并無實際的操作。在程序中引用定義的變量做內存操作數(shù)時,需按尋址方式用傳送指令(如MOV)給相應的段寄存器賦值。第24頁,共39頁,2023年,2月20日,星期三24codeSEGMENTASSUMECS:codestart:
…;程序主體部分.........MOVAH,4CH
;返回DOS
INT21HcodeENDS
ENDstart一個完整匯編程序的基本框架:第25頁,共39頁,2023年,2月20日,星期三25五、表達式及表達式中的操作符表達式由常量、標號、變量和一些操作符構成。匯編程序對表達式進行運算后,得到一個確定的數(shù)值,再把這個數(shù)值匯編到指令中。據表達式所表示的內容,分數(shù)字表達式、地址表達式。表達式是指令或偽操作的操作數(shù);表達式中的操作符由匯編程序完成例
MOVAX,12-4;MOVAX,8;數(shù)字表達式LEABX,[string+4];地址表達式
第26頁,共39頁,2023年,2月20日,星期三26表達式中的操作符有以下幾類:1.算術運算符(+、-、*、/、MOD)2.邏輯運算符(AND、OR、NOT、XOR)3.關系運算符(EQ、NE、GT、GE、LT、LE)真:FFFFH;假:04.數(shù)值返回操作符(SEG、OFFSET)5.類型操作(PTR)6.地址記數(shù)器($)第27頁,共39頁,2023年,2月20日,星期三27例:
1.算術運算符(+、-、*、/、MOD(取余數(shù)))MOVAX,6*8←MOVAX,482.邏輯運算符(AND、OR、NOT、XOR)MOVAX,80hOR70h←MOVAX,0F0h3.關系運算符(EQ、NE、GT、GE、LT、LE)真:FFFFH;假:0MOVAX,1GE2←MOVAX,0第28頁,共39頁,2023年,2月20日,星期三28
4.數(shù)值返回操作符(SEG、OFFSET)SEG取符號地址的段地址例MOVAX,SEGyyOFFSET取符號地址的偏移地址例MOVBX,OFFSETyybb SEGMENT
yy DB6dup(?)bb ENDScc SEGMENT ASSUMECS:cc,DS:aa,ES:bbstart
: CLD MOVAX,SEGyy MOVES,AX MOVDI,OFFSETyy
MOVCX,6 …….
cc ENDS
ENDstart第29頁,共39頁,2023年,2月20日,星期三29aa SEGMENTxx DB'Hello!’aa ENDSbb SEGMENT
yy DB6dup(?)bb ENDScc SEGMENT ASSUMECS:cc,DS:aa,ES:bbstart
: CLD MOVAX,aa MOVDS,AX LEASI,xx MOVAX,SEGyy MOVES,AX MOVDI,OFFSETyy
MOVCX,6 REPMOVSB MOVAH,4CH INT21H
cc ENDS
ENDstartMOVAX,bbLEADI,yy第30頁,共39頁,2023年,2月20日,星期三30注意:SEG、OFFSET只能對符號地址操作MOVAX,SEG[BX]MOVBX,OFFSET[SI]第31頁,共39頁,2023年,2月20日,星期三31六、過程定義偽操作
格式
過程名PROC類型、、、過程名ENDP過程定義由偽操作PROC開始、ENDP結束。其中:PROC和ENDP必須成對出現(xiàn),且語句前必須有過程名,過程名必須相同。PROC和ENDP語句之間為子程的指令序列。程序中可以定義多個過程。程序經匯編、連接及裝入內存后,過程名為一具體的內存地址,指示子程入口。第32頁,共39頁,2023年,2月20日,星期三32過程名常用作CALL調用指令的操作數(shù),
子程的最后安排RET返回指令,使執(zhí)行完子程后能返回調用處。過程有兩種類型:NEAR和FAR
無類型項時,默認為NEAR類型。當過程與調用指令不在同一段時,應將過程定義為FAR類型。過程類型決定子程中RET的返回類型第33頁,共39頁,2023年,2月20日,星期三33例1displayPROC、、、、C3H
、、RET;NEAR屬性的過程對應段內返回displayENDP例2displayPROCFAR、、、、CBH、、RET;FAR屬性的過程對應段間返回displayENDP第34頁,共39頁,2023年,2月20日,星期三34七、等值定義偽操作
格式
符號名EQU需等值的表達式作用是用符號名等值指定的表達式其中:表達式可以是任何有效的操作數(shù)匯編時用語句中的表達式代替程序中符號所在的地方。應用:1.定義符號常量,方便修改程序。2.某表達式多次出現(xiàn)時,用等值偽操作可以方便編程。第35頁,共39頁,2023年,2月20日,星期三35八、數(shù)值回送操作符TYPE,LENGTH,SIEE,OFFSET,SEG5種。把一些特征或存貯器地址的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 土木工程項目管理質量控制計劃
- 五年級道德與法治課堂反思計劃
- 2025年鄉(xiāng)村醫(yī)生考試題庫:農村常見傳染病防治與疫情監(jiān)測技術試題
- 2025年鄉(xiāng)村醫(yī)生考試題庫(公共衛(wèi)生服務)-公共衛(wèi)生服務倫理與法律試題
- 機電設備購置合同
- 家具定制數(shù)據安全協(xié)議
- 2025年消防執(zhí)業(yè)資格考試題庫:消防燃燒學基礎消防法規(guī)案例分析試題
- 2025年消防安全知識培訓考試題庫:消防設施操作應急處理試題試卷
- 2025年危險化學品安全風險評價考試題庫
- 2025年消防執(zhí)業(yè)資格考試題庫(消防應急救援預案)實戰(zhàn)演練試題
- 企業(yè)重組相關稅收政策培訓教學課件(38張)
- 肝癌的防治(大眾科普版本)-PPT課件
- 職業(yè)危害防治實施管理臺賬
- 社會團體民辦非清算審計報告模板
- 畢業(yè)設計U型管換熱器設計說明書
- 建筑工程質量檢測收費項目及標準表67262
- 天然氣的加臭
- 第六章醇酚醚(有機化學課后習題答案)
- KGW船用起重機維護使用手冊
- 怎樣確保騎車安全-1
- 金蝶資產負債表公式設置
評論
0/150
提交評論