微機原理與介面技術-第四章-組合語言程式設計
Purple-Pupil發表於2020-10-15
第四章
4.1 8086組合語言的語句
0. 變數:通過偽指令定義的識別符號
- 格式: 變數名 DB/DW/DD/DQ/DT 表示式
- a)變數名:識別符號;
- b)變數型別:標定變數所指地區的數值屬性;
- c)表示式:表示變數所表示的內容;
- 1)常數或運算公式,多個時由從左到右,從上到下(由低到高)排放;
- 2)字串: 須用單引號引出,編譯時/存放在記憶體中時,以ASCII碼的值存放;
- 3)?:表示佔著記憶體,內容隨機;
- 4)DUP:格式:n DUP (重複操作的值) 表示在記憶體中將“重複操作的值”重複放置n次;
- 5)地址表示式:表示式的內容為存放的地址;只能為DB或DD型別
- 為DB型別時:變數名錶示該變數首儲存地址的偏移; 表示式中的標號表示該指令的首位元組地址的偏移;
- 為DD型別時:低位元組預置偏移地址;高位元組預置段地址;
- 表示式中的變數/標號可與常數相加減
- 變數或標號不能與變數或標號相加,但可相減,減完為無屬性的純數字。
1. 指令性語句 :可由彙編程式翻譯成機器語言
- 格式 : [標號:] 操作碼 [運算元1,] [運算元2,] [;註釋]
- 標號:用符號表示的地址,表明語句所在的地址
- a)指令性語句的識別符號;
- b)可由數字、字母、特殊字元(?,·,@,-,¥)組成,且字母在前;
- c)最多31個字元;
- d)屬性:
- 1)段地址屬性:標號的段地址表示標號所表示的指令語句所在的段地址;
- 2)偏移地址:標號的偏移地址表示標號所表示的指令語句所在的偏移地址;
- 3)型別:段內引用:NEAR;段間引用:FAR;
- 操作助記符:表示指令語句的基本操作功能;
- 運算元:可帶可不帶,多個用逗號隔開;
2. 指示性語句 :CPU不執行,僅幫助CPU理解彙編程式的意義
- 格式: [識別符號(名字)] 指示符(偽指令) 表示式 [;註釋]
- 識別符號:由數字、字母、下劃線組成,其意義由偽指令指定;
- 指示符:標定識別符號為資料/程式碼/堆疊/附加段,並規定其屬性;
- a)EQU語句:相當於C語言中的#define
- b)=(賦值語句):與EQU的區別是可以對同一名字重複定義。
- c)LABLE語句:定義標號的型別(NEAR/FAR)與定義變數的型別(BYTE/WORD/DWORD)。
- 表示式:由運算元和操作符組成;
- a)算術運算子:加減乘除取模(MOD)
- b)邏輯運算子:與(AND)或(OR)非(NOT)異或(XOR)
- c)關係運算子:EQ(=);NE(!=)LT(<)GT(>)<=(LE)>=(GE),其型別是布林型別
- d)分析運算子:
- SEG:取段地址
- OFFSET :取偏移地址
- TYPE:取型別
- SIZE:取尺寸大小
- LENGTH:取長度
- e)綜合運算子
- PTR運算子:重新定義變數或標號的型別
- THIS運算子:改變儲存區的型別
4.2 組合語言程式結構
4.2.1 段定義語句
- 主要用於定義邏輯段
- 格式:
- 段名 SEGMENT [定位型別] [組合型別] [‘類別’]
…… - ENDS
- a)段名:表示該段語句的地址。
- b)定位型別:PAGE/PARA/WORD/BYTE
- c)組合型別:表示該段與其他同名段間的連線方式
組合型別名 | 意義 |
---|
PUBLIC | 只要是滿足定位型別,就可依次連線 |
COMMON | 所有同名段共享儲存空間,且以最長的段最為連線後的空間容量 |
AT | 將段定位到由表示式求得的節邊界地址上 |
STACK | 把所有帶有堆疊屬性的模組依次連線 |
MEMORY | MEMORY後的第一個段連在同段名段中的最高地址,之後的按COMMON處理 |
- ’類別‘:決定連線時裝入各邏輯段的順序,相同類別的邏輯段裝入連續的記憶體區,無名的按先後排序裝入記憶體。
4.2.2 ASSUME 語句
指出邏輯段與物理段的關係
- 格式:
- ASSUME 段暫存器名:段名[段暫存器名:段名,……]
- 段暫存器:CS/DS/SS/ES
- 段名:由SEGMENT偽指令定義的段名。
4.2.3 ORG偽指令
- 格式:ORG 表示式
- 指明該語句下一條程式的段內偏移地址。其表示式為2位元組無符號數。
4.2.4 PUBLIC與EXTRN偽指令
- PUBLIC:其後定義的符號公用。
- EXTRN:引用外部的符號與符號的型別
4.2.5 組合語言過程定義
定義格式:過程名 PROC [型別]
……
RET
過程名 ENDP
- 1)過程名: 一種供呼叫的識別符號,或呼叫的入口地址,其段地址和偏移地址表示過程中第一個語句的段地址和偏移地址
- 2)型別: NEAR:過程與呼叫程式在同一段;FAR:過程與呼叫程式在不同段
- 3)PROC/ENDP:過程定義的關鍵字,一個表開始另一個表結束;
- 4)RET:返回到呼叫指令的下一條指令。
- 5)過程的呼叫:CALL 過程名。
4.2.6 標準程式返回方式
1)使用中斷呼叫20H
2)使用DOS的功能呼叫
- 在結束後插入:MOV AH,4CH
INT 21H
4.3 子程式
4.3.1 子程式結構(同過程呼叫)
4.3.2 主程式與子程式的引數傳遞
1)暫存器傳參
2)指定記憶體單元傳參
3)堆疊傳參
4.4 DOS功能呼叫
輸入/顯示功能
- 單字元輸入
- MOV AH,O1H
- INT 21H
- 可將輸入的單字元儲存到AL中
- 單字元顯示
- MOV DL,待顯示單字元的ASCII碼
- MOV AH,02H
- INT 21H
- 多字元輸入
- MOV DX,資料區首偏移地址
- MOV AH,0AH
- INT 21H
- 多字元顯示
- MOV DX,待顯示字串首地址偏移地址
- MOV AH,05H
- INT 21H
4.5 巨集定義
格式
巨集指令名 MACRO <形參>
巨集體
ENDM
巨集呼叫:
巨集指令名 <形參>