




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第4 4章章 匯編語言程序設計匯編語言程序設計n匯編語句可分為兩種,一種是指令語句,另一種是偽指令語句。匯編程序在對源程序進行匯編時,把指令語句翻譯成對應的機器指令,而偽指令被匯編程序直接執行。指令語句的格式:標號: 指令助記符 操作數,操作數 ;注釋偽指令語句的格式:名字 偽指令助記符 操作數,操作數 ;注釋4.1 匯編語言程序設計匯編語言程序設計概述概述n分析問題,弄清楚問題的性質、目的、已知數據、運算精度以及速度等方面的要求。n確定算法,把實際問題轉化為計算機求解的步驟和方法。n繪制程序流程圖。n根據流程圖編寫程序。n進行靜態檢查。n上機調試。在匯編語言程序中,有以下四種基本結構:n順
2、序程序n分支程序n循環程序n子程序這幾種程序的設計方法是匯編語言程序設計的基礎。1.常量常量 常量是指那些在匯編源程序翻譯成目標程序期間已經有確定數值的量,可分為數值常量和符號常量。2.數值表達式數值表達式 由常量、符號常量以及運算符組成,其運算結果為數值常量。匯編語言允許對常量進行三種類型的運算:算術運算、邏輯運算、關系運算。 4.2 4.2 匯編語言的表達式匯編語言的表達式n例4-1 已知符號常量NUM51,求下列指令的匯編結果(表達式的值): MOV AX,NUM/9 MOV AX,NUM MOD 9 MOV AX,NUM*5n匯編的結果是: MOV AX,5 MOV AX,6 MOV
3、AX,255n例4-2 求下列指令匯編的結果。 MOV AL,4CH SHL 2 MOV AL,NOT 0FFH AND AL,4CH AND 0F0H XOR AL,4CH XOR 0FFHn匯編的結果是: MOV AL,30H MOV AL,0 AND AL,40H XOR AL,0B3H (3)關系運算符 關系運算包括:相等(EQ)、不等(NE)、小于(LT)、大于(GT)、小于等于(LE)和大于等于(GE)。 它們的運算結果是兩個特殊的常量,若關系不成立,結果為0;否則結果為0FFH或0FFFFH。 例4-3 求下列指令匯編的結果。 MOV AL,4CH EQ 2 MOV AL,4CH
4、 GT 1 匯編的結果是: MOV AL,0 MOV AL,0FFH3. 變量變量 變量是一個數據存儲單元的名字,即數據存放單元地址的符號表示。變量由4.3節介紹的數據定義偽指令定義,也可以用LABEL或EQU偽指令來定義,一般在除代碼段以外的其它段中定義。由于主存是分段使用的,所定義的變量體現出以下三種屬性:(1)段屬性。(2)偏移屬性。(3)類型屬性。4. 標號標號 標號是機器指令語句存放單元地址的符號表示,也可以是過程名。標號在代碼段中定義,用于機器指令之前,并用冒號“:”作為分隔符,它也可以用LABEL或EQU偽指令來定義。由于標號代表了指令的符號地址,因此它也有三個屬性:(1)段屬性
5、。(2)偏移屬性。1. (3)類型屬性。 地址表達式是由變量、標號、常量、寄存器(BP、BX、SI、DI)間址的內容(用寄存器名加方括號表示)和運算符組成。 地址表達式的值一般是偏移地址具有段、偏移地址及類型三個屬性。 地址表達式的運算符可以使用數值表達式的運算符,也可以使用屬性運算符和數值回送操作符。n語句格式:變量名 數據定義偽指令 表達式1 ,表達式2,. ;注釋n功 能:定義一數據存儲區,其類型由所使用的數據定義偽指令指定。n變量名是可選的,需要時由用戶自己命名。它是該數據區的符號地址,也是其中第一個數據項的偏移地址。程序可以通過變量名引用其中的數據。n常用的數據定義偽指令有DB(字節
6、)、DW(字)、DD(雙字)、DQ(8字節)、DT(10字節)。 4.3 4.3 偽指令偽指令 例4-4 畫出以下數據定義偽指令定義的數據存儲形式。 CR DB 0DH LF DB 0AH DATA DW 100,100H,-50AH00H64HCRLFDATA00H01H0FBH0FFH0DH100100H-5等價偽指令 用法 :定義一個常量符號。 例如:用EQU定義的符號常量: A EQU 5 B EQU A*3+2 用法 :與特殊運算符PTR或THIS連用,可以給變量或標號定義新的類型屬性并重新命名,但其段屬性和偏移地址屬性不變。n例4-5 某程序的數據段中有如下幾條偽指令語句,試分析各
7、變量的屬性。 DATA SEGMENT DDBUF EQU THIS DWORD BUF DB 100 DUP(?) DWBUF EQU WORD PTR BUF DATA ENDS . FIRST EQU THIS FARn語句格式:符號名=表達式n功 能:該語句的功能與EQU語句類似,但有一個區別:EQU不能重復定義符號名,而等號語句能對所定義的符號名再重新定義,給它賦予新的值。同一符號多次定義時,以最后一次定義的值為準。等號偽指令 n語句格式:n變量名或標號 LABEL 類型n功 能:為當前存儲單元定義一個指定類型的變量或標號。它的功能與語句“變量名或標號 EQU THIS類型”的功能相
8、似。定義符號偽指令 n語句格式:ORG 數值表達式n功 能:將匯編地址計數器設置成數值表達式的值。n例4-6 指出下列程序段中變量BUF和NUM的偏移地址是多少? ORG 10 ; 設置$的值為10 BUF DB ABCD ; 變量BUF的偏移地址為10 ORG $+5 ; $的值增加5 NUM DW 50 ; NUM的偏移地址為19置匯編地址計數器偽指令ORG偶地址偽指令偶地址偽指令EVENEVEN INCLUDEINCLUDE偽指令偽指令 PUBLICPUBLIC偽指令偽指令 EXTRNEXTRN偽指令偽指令 TITLETITLE偽指令偽指令 MOV AX,A ;行17 ADD AX,B
9、;行18 MOV SUM,AX ;行19 RET ;行20MAIN ENDP ;行21CODE ENDS ;行22 END MAIN ;行23語句格式:段名 SEGMENT 定位方式組合方式類別.段名 ENDS功 能: 定義一個以SEGMENT偽指令開始,以ENDS偽指令 結束,以“段名”命名的存儲器段。 段定義偽指令 n語句格式:nASSUME 段寄存器:段名,段寄存器:段名.n功 能:該語句一般出現在代碼段中,且在段的開始出現,用來設定段寄存器與段之間的對應關系。在程序中使用這條語句的話,宏匯編程序就將這些段作為當前可訪問的段處理。ASSUMEASSUME偽指令偽指令 過程定義偽指令過程定
10、義偽指令 程序結束偽指令程序結束偽指令 初始化后,DS和ES并沒有指向用戶自己的數據區,而是指向PSP的段基址。但在用戶程序運行過程中,DS應指向用戶程序自己的數據段以便訪問其中的內容,例如上例中訪問A、B和SUM變量。同理,ES也應設置為正確的位置。所以,編程人員應在程序中用指令為DS和ES寄存器賦值。因為立即數不能直接傳送段寄存器,所以用以下語句為DS賦值:MOV AX, DATAMOV DS, AX 如果程序中用到了附加段,也要在程序中用同樣的方法為它們賦值。5.5. 段寄存器的裝填段寄存器的裝填 6 6 程序返回操作系統程序返回操作系統(1)利用PSP中的INT 20H返回DOS MA
11、IN PROC FAR PUSH DS XOR AX,AX PUSH AX RETMAIN END (2)利用DOS的4CH系統功能調用返回DOS目前返回DOS通常使用4CH系統功能調用,這種方法實現起來比較簡單,可用以下語句實現:MOV AH,4CHINT 21H源程序2: STSG SEGMENT STACK S DW 32 DUP(?) STSG ENDS DATA SEGMENT A DW 123 B DW 456 SUM DW ? DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STSGSTART: MOV AX,DATA MOV DS,
12、AX MOV AX,A ADD AX,B MOV SUM,AX MOV AH,4CH INT 21H CODE ENDS END START定義格式: 宏指令名 MACRO 形式參數,形式參數,. 宏體 ENDM例如: ADD3 MACRO X,Y,Z ADD X, Y ADD X, Z ENDM4.4 宏指令宏調用的格式: 宏指令名 注意宏指令的參數沒有類型,只是一種符號替換,如果 替換后的語句有錯誤,則宏擴展時系統會給出提示。 宏擴展由匯編程序在匯編的過程中在宏調用的地方用宏體代替宏指令,實參代替形參。 例如:已定義了宏指令ADD3,在源程序中進行如下調用:ADD3 AX, BX, CX宏
13、擴展后的形式為:+ ADD AX,BX+ ADD AX,CX符號“+”用于標志宏擴展的語句。1. 帶間隔符的實參帶間隔符的實參 在宏調用中,有時實參是一串帶間隔符(如空格、逗號等)的字符串,為了不至于混淆,應用尖括號將它們括起來,作為一個實參。例如:STACK0 ,尖括號的內容為一個實參。2. 數字參數數字參數 在某些情況下,需要以實參的值而不是符號本身代替形參,這種參數的替換稱為數字參數的替換。特殊宏操作符%用來將其后的表達式轉換成它所代表的數值,并將此數值的ASCII碼字符嵌入到宏擴展中。3. 宏體中的變量與標號宏體中的變量與標號 在某些宏定義中,常常需要定義一些變量或標號,當這些宏定義在
14、同一程序中多次調用并進行宏擴展后,就會出現變量或標號重復定義的錯誤。為了解決這個問題,8086宏匯編語言提供了偽指令LOCAL。語句格式:LOCAL 標號和變量表功 能:在宏擴展時,宏匯編程序自動將用LOCAL說明的變量或標號表示為唯一的特殊符號(?0000?FFFFH),從而避免了符號重復定義的錯誤。LOCAL語句只能作為宏體的第一條語句,它后面即為宏定義的變量和標號表。4.5 系統功能調用調用格式:MOV AH,1INT 21H功 能:等待從鍵盤輸入一個字符并將輸入字符的ASCII碼 送入寄存器AL中。調用格式:MOV DL,待顯示字符的ASCII碼MOV AH,2INT 21H功 能:將
15、DL中的字符送顯示器顯示,若DL中為+的ASCII碼,則從本調用的執行中退出。例如:MOV DL,H MOV AH,2 INT 2lH則在屏幕上顯示一個H字符。調用格式:MOV DL,待打印字符的ASCII碼MOV AH,5INT 2lH功 能:將DL中的字符送打印機打印。例如:將A字符送打印機打印 MOV DL,41H MOV AH,5INT 21H 調用格式:LEA DX,字符串首偏移地址MOV AH,9INT 21H功 能:將當前數據區中DS:DX所指向的以$結尾的字符串送顯示器顯示。例4-8 閱讀下列程序,指出該程序執行后顯示器顯示的結果是什么。 DATA SEGMENT BUF DB I WISH YOU SECCESS!$ DATA ENDS CODE SEGMENT LEA DX,BUF MOV AH,9 INT 21H .調用格式:LEA DX,緩沖區首偏移地址MOV AH,10INT 2lH功 能:從鍵盤上往DS:DX所指的輸入緩沖區輸入字符串并
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年網絡管理員考試細節分析試題及答案
- 2025年軟件設計師考試動態分析試題及答案
- 互聯網產業鏈與軟件開發考題及答案
- 貴州省(黔東南黔南黔西南)2025屆七下數學期末統考模擬試題含解析
- 開放源代碼的價值與模型的試題及答案
- 法學概論考試對學生能力的綜合評估與試題及答案
- 2025屆山西晉中學市榆次區七下數學期末達標檢測模擬試題含解析
- 企業資源配置與風險管理的平衡試題及答案
- 電子商務代運營服務合作協議
- 公司戰略與利益相關者關系試題及答案
- 測繪生產困難類別細則及工日定額
- 國民經濟行業分類2022年
- 獸醫藥理學 第15章 特效解毒藥
- 空乘人員職業形象設計與化妝(169張課件)
- 會計工作年限證明個人承諾書
- 物業公共秩序管理課件
- 淺談摩托艇的安全管理
- 女性功能治療方案ppt課件
- 公路工程計量與計價考試B本科
- 醫用耗材分類目錄 (低值 ╱ 高值)
- 短、中、長距離游泳項目的體能訓練方法及特征研究
評論
0/150
提交評論