宏彙編程式

宏彙編程式

宏彙編程式(MASM)是具有宏加工功能的彙編程式。可以用它定義含參數的程式段,在使用的位置上調用它們,彙編時將進行(指令)展開,把宏定義所預先定義的指令目標代碼插在該位置上。

基本介紹

  • 中文名:宏彙編程式
  • 外文名:macroassembler
  • 簡稱:MASM
  • 領域:計算機
  • 釋義:具有宏加工功能的彙編程式
  • 作用:縮短原始碼、擴充指令集等
彙編與彙編程式,宏彙編程式,使用宏彙編的原因,宏(指令)的用途,宏,宏定義,宏調用,宏展開,常用的宏處理偽指令,宏定義偽指令 (MACRO/ENDM),聲明宏體內局部標號的偽指令 (LOCAL),清除宏定義的為指令(PURGE),

彙編與彙編程式

彙編語言編寫的源程式也需要翻譯成目標程式才能被機器執行。這個翻譯過程稱為彙編,完成彙編任務的程式稱為彙編程式,見圖1。
圖1 彙編程式的功能示意圖圖1 彙編程式的功能示意圖
彙編程式是最早也是最成熟的一種系統軟體。它除了能夠將彙編語言源程式翻譯成機器語言程式這一主要功能外,還能夠根據用戶的要求自動分配存儲區域 (包括程式區、數據區、暫存區等 );自動地把各種進位制數轉換成二進制數,把字元轉換成 ASCII 碼,計算表達式的值等;自動對源程式進行檢查,給出錯誤信息 (如非法格式,未定義的助記符、標號,漏掉運算元等 )等。具有這些功能的彙編程式又稱為基本彙編 (或小彙編 ASM) 。

宏彙編程式

在基本彙編的基礎上,進一步允許在源程式中把一個指令序列定義為一條宏指令的彙編程式,就叫做宏彙編 (MASM)程式 。它包含全部 ASM 功能,還增加了宏指令、結構、記錄等高級彙編語言功能。
宏彙編程式的主要特點是在彙編程式中增加宏加工功能。它允許用戶方便地定義和使用宏指令,適用於程式中多處出現、具有一定格式、可以通過少數參數調節改變的程式段落的場合。採用這種方法不僅減少程式的長度,增加可讀性,而且程式段落的格式需要改變時,只須改動定義處,而不必改動每一使用處。
宏彙編程式不僅包含一般彙編程式的功能,而且用了高級程式使用的數據結構,是一種接近高級程式的彙編程式。例如它提供了記錄、結構和字元串操作;具有宏處理、條件彙編及磁碟作業系統DOS功能調用等多種功能;程式的開發以及調試手段也比較完善。

使用宏彙編的原因

在編制彙編語言程式過程中,有些功能段需要多次重複使用,所不同的只是參與操運算元。為了減少編程的工作量,通常採用兩種方法:
(1)將程式段編寫為獨立的子程式;
(2)將程式段定義成宏。

宏(指令)的用途

(1)縮短原始碼;
(2)擴充指令集;
(3)更改某些指令助記符的意義(宏指令的優先權高於指令和偽指令)。

宏是計算機軟體系統中一個廣泛存在的概念。從辦公軟體OFFICE到程式開發語言C等等,可以把某項要操作的某一個過程定義為宏。具體到在彙編語言中,宏也是彙編的主要特點之一,它是與子程式類似但又獨具特色的另外一種簡化源程式的方法。
程式語言中,宏是源程式中一段有獨立功能的程式代碼,宏也可以稱為宏指令、宏操作。宏的使用需要經過三個步驟:宏定義、宏調用和宏展開。首先進行宏定義;然後進行宏調用;最後,彙編時由 MASM 進行宏擴展。

宏定義

宏定義語句MACRO和子程式定義語句PROC一樣都是偽指令。宏定義需要一對 偽指令MACRO和ENDM完成。宏定義的格式如下:
宏名字 MACRO [啞元1,啞元2,…]
...
語句串
...
ENDM
說明:宏定義並不產生目標代碼,只是用來說明“宏名字”與一段原始碼之間的聯繫。其中啞元1,啞元2,…是虛擬參數或形式參數,用逗號分隔。虛參或形參可不設定。
例如:定義鍵盤輸入宏指令INPUT:
INPUT MACRO
MOV AH,01H
INT 21 H
ENDM
需注意的是,起名時,不要和彙編語言的指令名、保留字相同。

宏調用

在程式中使用宏時,只要寫出宏名字[實參]即可。宏調用的格式為:宏指令名 [實參1,實參2,…,實參n]。
例如,從鍵盤輸入一個字元,判斷是否為“一“號,不是則繼續輸入,是結束。(利用前面定義的宏)。
MODEL SMALL
STACK 100H
CODE
START:
INPUT
CMP AL,‘-‘
JNE START
RETSYS
END START

宏展開

宏展開將宏指令語句用宏定義中宏體的程式段目標代碼替換。彙編源程式時,宏彙編程式將對每條宏指令語句進行宏展開,用實參替代相應的形參,對宏體目標代碼作相應改變。圖2為一個宏展開的例子。
圖2圖2

常用的宏處理偽指令

宏定義偽指令 (MACRO/ENDM)

格式:
宏指令名 MACRO
(宏定義體 )
ENDM
MACRO 是宏定義符, 它將一個宏指令名定義為宏定義體中包含的程式段。 ENDM 表示宏定義結束,前面不需要有宏指令名。進行一次宏定義,以後就可以多次用宏指令名進行宏調用。但是必須先定義,後調用。宏定義允許嵌套,即宏定義體中可以包含另一個宏定義,而且宏定義體中也可以有宏調用,但是也必須先定義,後調用。

聲明宏體內局部標號的偽指令 (LOCAL)

LOCAL 的作用是聲明宏體中的局部標號,以免在宏擴展時,同一個標號在源程式中多次出現,從而產生標號多重定義的錯誤。 LOCAL 偽指令必須位於宏體內其他所有語句 (包括注釋 )之前,其格式為:
LOCAL 局部標號 [ ,…]
例如,下面的宏指令完成將暫存器中的一位十六進制數轉換為相應的 ASCII 碼,由於宏體中出現局部標號,因此必須使用 LOCAL 偽指令對宏體中的局部標號進行聲明。
HEXTOASC MACRO REG
LOCAL NUM
CMP REG, 0AH
JC NUM
ADD REG, 07H
NUM : ADD REG , 30H
ENDM

清除宏定義的為指令(PURGE)

宏指令名可以和源程式中的其他變數名、標號、指令助記符、偽操作名相同,此時宏指令的優先權別最高,使其他同名的指令或偽操作無效。為了使這些指令或偽指令恢復功能,服從機器指令的定義,宏彙編程式提供了偽操作PURGE,用來在適當的時候取消宏定義。
PURGE偽指令的一般格式是:
PURGE 宏定義名[,...]
方括弧表示PURGE可以取消多個宏定義,宏名之間用逗號隔開。如宏定義:
SUB MACRO VARX,VARY,RESULT
...
ENDM
宏調用:SUB X,Y,Z
PURGE SUB
“PURGE SUB”語句後的SUB恢復減法功能。

相關詞條

熱門詞條

聯絡我們