微機原理與介面技術-第四章-組合語言程式設計

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
        • 格式: 名稱 EQU 表示式
      • 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運算子:重新定義變數或標號的型別
          • 格式:型別 PTR 表示式
        • THIS運算子:改變儲存區的型別

4.2 組合語言程式結構

4.2.1 段定義語句

  • 主要用於定義邏輯段
    • 格式:
      • 段名 SEGMENT [定位型別] [組合型別] [‘類別’]
        ……
      • ENDS
        • a)段名:表示該段語句的地址。
        • b)定位型別:PAGE/PARA/WORD/BYTE
        • c)組合型別:表示該段與其他同名段間的連線方式
組合型別名意義
PUBLIC只要是滿足定位型別,就可依次連線
COMMON所有同名段共享儲存空間,且以最長的段最為連線後的空間容量
AT將段定位到由表示式求得的節邊界地址上
STACK把所有帶有堆疊屬性的模組依次連線
MEMORYMEMORY後的第一個段連在同段名段中的最高地址,之後的按COMMON處理
  • ’類別‘:決定連線時裝入各邏輯段的順序,相同類別的邏輯段裝入連續的記憶體區,無名的按先後排序裝入記憶體。

4.2.2 ASSUME 語句

指出邏輯段與物理段的關係

  • 格式:
    • ASSUME 段暫存器名:段名[段暫存器名:段名,……]
      • 段暫存器:CS/DS/SS/ES
      • 段名:由SEGMENT偽指令定義的段名。

4.2.3 ORG偽指令

  • 格式:ORG 表示式
    • 指明該語句下一條程式的段內偏移地址。其表示式為2位元組無符號數。

4.2.4 PUBLIC與EXTRN偽指令

  • PUBLIC:其後定義的符號公用。
    • 格式:PUBLIC 符號
  • EXTRN:引用外部的符號與符號的型別
    • 格式: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

巨集呼叫:

巨集指令名 <形參>

相關文章