宏彙編程式

宏彙編程式是一種以把彙編語言編寫的源程式翻譯成機器語言的目標程式,它不但可以代替 ASM ,而且可以彙編具有宏定義的彙編程式。

宏彙編程式-MASM 彙編( Assemble )就是把用彙編語言編寫的源程式翻譯(彙編)成機器語言的目標程式。其基本工具是彙編程式。可使用小彙編程式( ASM ), 也可以使用微軟公司產品宏彙編程式(MASM )。實驗推薦使用宏彙編程式,因為它不但可以代替 ASM ,而且可以彙編具有宏定義的彙編程式。
宏意思是源程式中的一段有獨立功能的程式代碼
宏指令,用戶自定義的指令。編程式時候,將多次使用的功能用一條宏指令來代替。
彙編包括指令 ,偽指令,宏指令。前兩個都是規定的,最後一個是你自己設計的。
好處是用起來方便,::))定義就是為了使用,但是要先定義,後調用。
(這一點和子程式可是不一樣啊)
例如,宏定義,兩個字相乘
multiply MACRO opr1, opr2, result
push dx
push ax
mov ax,opr1
IMUL opr2
mov result, ax
pop ax
pop dx
ENDM
調用這個宏,
multiply cx, var, xyz[bx]
宏展開
1 push dx
1 push ax
1 mov ax, cx
1 imul var (var不能使立即數
1 mov xyz[bx], ax
1 pop ax
1 pop dx
(就是帶進去,看明白了吧,注意一點,必須保證展看後有效)
例如,求絕對值
宏定義,
absol MACRO oper
LOCAL next
cmp oper, 0 (和0比較)
jge next
neg oper (求補,就是求絕對值了)
next: (防止多次存入一個地址)
ENDM
宏調用,
.........
absol var
.......
absol bx
宏展開,
1 cmp var,0
1 jge ??0000
1 neg var
1 ??0000:
..........
1 cmp bx, 0
1 jge ??0001
1 neg bx
1??0001:
(很清楚把,就像是你做好了一個公式,然後帶入就是了,
彙編學到這裡才覺得有趣:))
&使用
例如宏定義,
leap macro cond, lab
j&cond lab
endm
宏調用
leap z, there
.........
leap nz, here
宏展開,
1 jz there
.........
1 jnz here
(明白了吧,就是and,合起來的意思,沒有什麼好講的,)
在舉一個例子
msg macro lab, num, xyz
lab&num db 'WELCOEME YOU STUDY WITH JINZHOU MR,&xyz'
endm
宏調用
msg ary, 1, wang (這個地方不用注釋吧,就是調用兩次:)
......
msg ary, 2, zhang
宏展開
1 ary1 db 'WELCOEME YOU STUDY WITH JINZHOU MR wang'
.......
1 ary2 db 'WELCOEME YOU STUDY WITH JINZHOU MR zhang'
(特別簡單吧,很好玩吧,)
%用法
例如,
宏定義,
msg macro count, string
msg&count db string
endm
errmsg macro text
cntr = cntr + 1
msg %cntr, text
endm
宏調用
entr=0
....
errmsg 'SYNTAX ERROR'
.......
errmsg 'invalid OPERAND'
宏展開
1 cntr = cntr + 1
1 msg %cntr, 'SYNTAX ERROR'
2 msg1 db 'SYNTAX ERROR'
...........
1 cntr = cntr + 1
1 msg %cntr, 'INVALID OPERAND'
2 msg1 db 'INVALID OPERAND'
(看出來了吧,就是代替,一般只能看到2所顯示的,為了清楚理解,
把1也寫出來了)
宏庫的建立與調用,(一般以mac後綴)
建立宏庫,很簡單,遍上號碼,變成一個程式就是了
入 MACRO.MAC macro1 MACRO
........
ENDM
..... macro2 MACRO
.........
ENDM
.......
(想用多少用多少)
調用,
方式include加上 路徑
不舉例子了,很簡單。
簡單說一下宏調用和子程式的區別:
子程式在程式執行期間調用,只占用自身大小的一段空間。
(必須到子程式的IP,好處是節省記憶體,效率高,
但是因為要保存返回地址,轉向地址,時間長,適合長代碼,
頻繁調用的)
宏調用,在彙編期間被展開,調用一次展開一次。
注:可能有失誤之處,請大家指出,另外這是學習的記錄
文章引用自:

相關詞條

熱門詞條

聯絡我們